Commit Graph

65 Commits (83913e1d31e76e09ece69b1333028e5d06c4969a)

Author SHA1 Message Date
jp9000 c1cf44fd91 deps/media-playback: Add timeout when waiting for frames
Media files that have a very low framerate or very long interval between
frames would cause the media playback to stall indefinitely until the
next frame is played.  This adds a 200ms timeout to ensure that the
media can be destroyed without being forced to wait indefinitely for the
next frame.
2017-06-14 00:39:10 -07:00
jp9000 88ae9aff6e deps/media-playback: Fix lockup issues
Certain functions such as avformat_open_input and av_read_frame can
block, causing the program to someone wait very long periods of time
when a network URL is used with the media source.  The
interrupt_callback member variable in AVFormatContext allows safely
canceling IO operations when trying to shut down or stop the
media-playback interface.
2017-06-04 00:44:04 -07:00
jp9000 f0ff1c481d deps/media-playback: Call stop callback on failure 2017-05-29 19:30:14 -07:00
jp9000 892a6548e7 obs-ffmpeg: Add network buffering property
(Note: This commit also modifies deps/media-playback)

Allows buffering network-based media sources where supported.  Default
is two megabytes of buffering.
2017-05-29 19:30:13 -07:00
jp9000 0302a4e7f7 deps/media-playback: Start decoding regardless of keyframe
Currently, when media-playback is used with a network address, video has
to wait for the first keyframe before it starts decoding.  This is
probably not wise because the first packet of video may contain
additional header information, and because audio is forced to wait and
buffer while waiting for a keyframe, potentially causing a lot of audio
to get backed up unnecessarily which could inadvertently cause sync or
audio playback issues.

So, instead of waiting for a keyframe before decoding starts, decode
right away, and make it wait for a keyframe before calling the video
callback instead.
2017-05-29 19:30:12 -07:00
jp9000 ea6bdf58e0 deps/media-playback: Output av_read_frame error string 2017-05-29 19:30:11 -07:00
jp9000 4217f273a6 deps/media-playback: Fix bug where inverted media would crash
When media returns frames with negative linesizes, it means they're
inverted RGB formats and start from the last line of the image and move
back to the top via the negative linesize number.  This would cause a
crash because this wasn't being taken in to account, and it would
traverse in to invalid memory.
2017-05-20 11:14:58 -07:00
jp9000 4aea3ce7da deps/media-playback: Always check for new frame first
Fixes potential decoding errors with FFmpeg's new decode API.  Because
avcodec_send_packet may process multiple packets, you must call
avcodec_receive_frame continually until no more frames are left.
2017-05-17 17:10:32 -07:00
jp9000 d54b51edf4 deps/media-playback: Use new FFmpeg decode funcs when possible
Prevents potential decoding issues by relying on FFmpeg to manage
sub-packet handling.
2017-05-17 16:58:47 -07:00
jp9000 5ebec76b60 deps/media-playback: Discard packet returns of invalid sizes 2017-05-17 16:23:21 -07:00
jp9000 2b3d619c31 deps/media-playback: Init avformat in thread
Prevents the media playback object from locking the render thread.
2017-05-16 01:55:58 -07:00
jp9000 3b091b1668 deps/media-playback: Do not seek network streams
Will cause avformat to lock up perpetually on av_read_frame.
2017-05-16 01:54:39 -07:00
jp9000 a78daa8a1c deps/media-playback: Include SSE flags 2017-05-16 00:51:04 -07:00
jp9000 b2717132d9 deps/media-playback: Remove unnecessary logging
Failure to decode is unfortunately quite common with certain file types,
and is most of the time safely recoverable.  There's no reason to
actually output a log message for this unless really needed.
2017-05-15 15:17:13 -07:00
jp9000 2329c71dac deps: Add media-playback static lib
Intended to replace libff as the media playback library.  Intended to
use less threads and be more extensible.  It was nearly impossible to
modify libff without bursting a vein.
2017-03-31 12:10:31 -07:00