- 31 12月, 2014 2 次提交
- 22 12月, 2014 1 次提交
-
-
由 jp9000 提交于
In certain cases the video thread could end up trying to lock itself recursively. This just allows the mutexes to safely be locked recursively.
-
- 12 12月, 2014 1 次提交
-
-
由 jp9000 提交于
This is useful for keeping track of what the current colorspace/range is if a YUV format is being used.
-
- 23 10月, 2014 2 次提交
-
-
由 jp9000 提交于
In video-io.c, video frames could skip, but what would happen is the frame's timestamp would repeat for the next frame, giving the next frame a non-monotonic timestamp, and then jump. This could mess up syncing slightly when the frame is finally given to an outputs.
-
由 jp9000 提交于
70 milliseconds is a bit too high for the default audio timestamp smoothing threshold. The full range of error thus becomes 140 milliseconds, which is a bit more than necessary to worry about. For the time being, I feel it may be worth it to try 50 milliseconds.
-
- 12 10月, 2014 1 次提交
-
-
由 Palana 提交于
-
- 07 10月, 2014 1 次提交
-
-
由 jp9000 提交于
-
- 27 9月, 2014 2 次提交
-
-
由 jp9000 提交于
This Fixes a minor flaw with the API where data had to always be mutable to be usable by the API. Functions that do not modify the fundamental underlying data of a structure should be marked as constant, both for safety and to signify that the parameter is input only and will not be modified by the function using it.
-
由 GoaLitiuM 提交于
-
- 26 9月, 2014 1 次提交
-
-
由 jp9000 提交于
Typedef pointers are unsafe. If you do: typedef struct bla *bla_t; then you cannot use it as a constant, such as: const bla_t, because that constant will be to the pointer itself rather than to the underlying data. I admit this was a fundamental mistake that must be corrected. All typedefs that were pointer types will now have their pointers removed from the type itself, and the pointers will be used when they are actually used as variables/parameters/returns instead. This does not break ABI though, which is pretty nice.
-
- 05 9月, 2014 1 次提交
-
-
由 jp9000 提交于
Audio that goes below the minimum expecting timing (current time - buffering time) is automatically removed. However, delayed audio is not removed regardless of its delay. This puts a hard cap of 6 seconds from current time that the maximum delay audio can have. This will also prevent the circular buffer from dynamically growing too large.
-
- 31 8月, 2014 2 次提交
-
-
由 jp9000 提交于
Doing timestamp smoothing in obs-source.c is good because timestamps can typically operate on a different timebase, however, obs-source.c can also change that time base dynamically (such as with async video and unexpected timestamp jumps), so in order to ensure that audio is seamless in the output as well, perform timestamp smoothing in audio-io.c as well just as an extra precautionary measure.
-
由 jp9000 提交于
-
- 11 8月, 2014 2 次提交
-
-
由 jp9000 提交于
-
由 jp9000 提交于
This is sort of hard to explain: the scale_video_output function was overwriting the current frame. If scaling was disabled, it would do nothing, and return success, and all would be well. If it was enabled, it would then call the scaler, and then replace the contents of the 'data' function parameter with the scaled frame data. The problem with this is that I was passing video_output::cur_frame directly, which overwrites its previous value with the scaled frame data. Then if cur_frame was not updated on time, it would end up trying to scale the previously scaled image, if that makes sense. it would call the video scaler with the same from for both the source and destination. So the simple fix was to simply use a local variable and pass that in as a parameter to prevent this bug from occurring.
-
- 10 8月, 2014 1 次提交
-
-
由 jp9000 提交于
Renamed: To: ----------------------------------------------------------- audio_output_blocksize audio_output_get_block_size audio_output_planes audio_output_get_planes audio_output_channels audio_output_get_channels audio_output_samplerate audio_output_get_sample_rate audio_output_getinfo audio_output_get_info audio_output_createline audio_output_create_line video_output_getinfo video_output_get_info video_gettime video_output_get_time video_getframetime video_output_get_frame_time video_output_width video_output_get_width video_output_height video_output_get_height video_output_framerate video_output_get_frame_rate video_output_num_skipped_frames video_output_get_skipped_frames video_output_total_frames video_output_get_total_frames
-
- 02 8月, 2014 1 次提交
-
-
由 jp9000 提交于
The bug here is that when conversion is active, the source video frame is initialized with the destination height/width/format instead of the source height/width/format.
-
- 28 7月, 2014 1 次提交
-
-
由 jp9000 提交于
-
- 17 7月, 2014 1 次提交
-
-
由 Palana 提交于
-
- 02 7月, 2014 1 次提交
-
-
由 jp9000 提交于
This implements the 'frame skipping' mechanism to forcibly cause frames to be duplicated in order to reduce encoder complexity so the encoder can catch up to the video, otherwise it will continue to be progressively behind and will cause a desync of the video. Typically, if a user gets this issue, they should turn down their settings. For the love of god do not tell them that 'frames are skipping', just tell them that CPU usage is high, and that they should consider turning down their settings.
-
- 09 6月, 2014 1 次提交
-
-
由 Danni 提交于
-
- 07 6月, 2014 1 次提交
-
-
由 jp9000 提交于
-
- 03 6月, 2014 1 次提交
-
-
由 jp9000 提交于
Also, Remove the volume level processing from audio-io.c, it was moved to obs_source instead.
-
- 25 5月, 2014 2 次提交
- 20 5月, 2014 1 次提交
-
-
由 Danni 提交于
-
- 10 5月, 2014 2 次提交
- 26 4月, 2014 1 次提交
-
-
由 fryshorts 提交于
This fixes a crash on Linux that supposedly occurs when pthread_join is called multiple times.
-
- 25 4月, 2014 1 次提交
-
-
由 jp9000 提交于
-
- 24 4月, 2014 2 次提交
- 15 4月, 2014 1 次提交
-
-
由 Palana 提交于
Also remove an unused variable from obs-encoder.c (via clang static analysis)
-
- 08 4月, 2014 1 次提交
-
-
由 jp9000 提交于
- Implement the RTMP output module. This time around, we just use a simple FLV muxer, then just write to the stream with RTMP_Write. Easy and effective. - Fix the FLV muxer, the muxer now outputs proper FLV packets. - Output API: * When using encoders, automatically interleave encoded packets before sending it to the output. * Pair encoders and have them automatically wait for the other to start to ensure sync. * Change 'obs_output_signal_start_fail' to 'obs_output_signal_stop' because it was a bit confusing, and doing this makes a lot more sense for outputs that need to stop suddenly (disconnections/etc). - Encoder API: * Remove some unnecessary encoder functions from the actual API and make them internal. Most of the encoder functions are handled automatically by outputs anyway, so there's no real need to expose them and end up inadvertently confusing plugin writers. * Have audio encoders wait for the video encoder to get a frame, then start at the exact data point that the first video frame starts to ensure the most accrate sync of video/audio possible. * Add a required 'frame_size' callback for audio encoders that returns the expected number of frames desired to encode with. This way, the libobs encoder API can handle the circular buffering internally automatically for the encoder modules, so encoder writers don't have to do it themselves. - Fix a few bugs in the serializer interface. It was passing the wrong variable for the data in a few cases. - If a source has video, make obs_source_update defer the actual update callback until the tick function is called to prevent threading issues.
-
- 02 4月, 2014 1 次提交
-
-
由 jp9000 提交于
- obs-outputs module: Add preliminary code to send out data, and add an FLV muxer. This time we don't really need to build the packets ourselves, we can just use the FLV muxer and send it directly to RTMP_Write and it should automatically parse the entire stream for us without us having to do much manual code at all. We'll see how it goes. - libobs: Add AVC NAL packet parsing code - libobs/media-io: Add quick helper functions for audio/video to get the width/height/fps/samplerate/etc rather than having to query the info structures each time. - libobs (obs-output.c): Change 'connect' signal to 'start' and 'stop' signals. 'start' now specifies an error code rather than whether it simply failed, that way the client can actually know *why* a failure occurred. Added those error codes to obs-defs.h. - libobs: Add a few functions to duplicate/free encoder packets
-
- 17 3月, 2014 1 次提交
-
-
由 jp9000 提交于
- Implement OBS encoder interface. It was previously incomplete, but now is reaching some level of completion, though probably should still be considered preliminary. I had originally implemented it so that encoders only have a 'reset' function to reset their parameters, but I felt that having both a 'start' and 'stop' function would be useful. Encoders are now assigned to a specific video/audio media output each rather than implicitely assigned to the main obs video/audio contexts. This allows separate encoder contexts that aren't necessarily assigned to the main video/audio context (which is useful for things such as recording specific sources). Will probably have to do this for regular obs outputs as well. When creating an encoder, you must now explicitely state whether that encoder is an audio or video encoder. Audio and video can optionally be automatically converted depending on what the encoder specifies. When something 'attaches' to an encoder, the first attachment starts the encoder, and the encoder automatically attaches to the media output context associated with it. Subsequent attachments won't have the same effect, they will just start receiving the same encoder data when the next keyframe plays (along with SEI if any). When detaching from the encoder, the last detachment will fully stop the encoder and detach the encoder from the media output context associated with the encoder. SEI must actually be exported separately; because new encoder attachments may not always be at the beginning of the stream, the first keyframe they get must have that SEI data in it. If the encoder has SEI data, it needs only add one small function to simply query that SEI data, and then that data will be handled automatically by libobs for all subsequent encoder attachments. - Implement x264 encoder plugin, move x264 files to separate plugin to separate necessary dependencies. - Change video/audio frame output structures to not use const qualifiers to prevent issues with non-const function usage elsewhere. This was an issue when writing the x264 encoder, as the x264 encoder expects non-const frame data. Change stagesurf_map to return a non-const data type to prevent this as well. - Change full range parameter of video scaler to be an enum rather than boolean
-
- 11 3月, 2014 1 次提交
-
-
由 jp9000 提交于
...The reason why audio didn't work was because I overwrote the bitrate values. As for semaphores, mac doesn't support unnamed semaphores without using mach semaphores. So, I just implemented a semaphore wrapper for each OS.
-
- 08 3月, 2014 2 次提交