Create a generic frame and a frame queue struct to handle video picture queues
and subtitle picture queues with common code. Also add the possibility to queue
AVFrames, however at the moment we only use SDL_Overlay buffers for video and
AVSubtitles for subtitles.
Signed-off-by: Marton Balint <cus@passwd.hu>
Since audio clock calculations are more accurate now, it is safe to decrease
the sync treshold to compensate the larger buffers caused by less frequent
audio callbacks.
Signed-off-by: Marton Balint <cus@passwd.hu>
Too many audio callbacks per second can cause buffer underruns especially under
load. As now we take into accound the elapsed time after an audio callback when
determining current audio clock, it is not that important to use small buffer
sizes and frequent audio callbacks, so lets remove the comment.
Signed-off-by: Marton Balint <cus@passwd.hu>
Instead of directly rolling back the frame queue, keep the last displayed
picture in the queue and use a boolean variable to keep track if it is
displayed or not. This makes the code cleaner because it removes the
complicated logic in pictq_prev_picture.
There should be no change in functionality.
Signed-off-by: Marton Balint <cus@passwd.hu>
with -f lavfi -i testsrc=s=hd1080 as source:
rotate=90*PI/180 vs transpose=clock: 42fps -> 64fps
rotate=180*PI/180 vs vflip,hflip: 75fps -> 77fps
rotate=270*PI/180 vs transpose=cclock: 43fps -> 63fps
Whenever av_gettime() is used to measure relative period of time,
av_gettime_relative() is prefered as it guarantee monotonic time
on supported platforms.
Signed-off-by: Olivier Langlois <olivier@trillion01.com>
Reviewed-by: Marton Balint <cus@passwd.hu>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Less than 0.04 sec delays should not be noticable, and it helps us with 50fps
content where some timing errors can cause a frame dup where it is not really
necessary.
Signed-off-by: Marton Balint <cus@passwd.hu>
After this commit applications needs to call av_format_inject_global_side_data()
or handle AVStream side data by some other means if they want it not to be lost.
This fixes a API incompatibility with libav.
libav API does not allow the data to be passed through AVPackets
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
When SDL could not allocate a YUV overlay or open a window, the video thread
got locked up because it waited for the allocation to finish forever.
Reported-by: Carl Eugen Hoyos <cehoyos@ag.or.at>
Signed-off-by: Marton Balint <cus@passwd.hu>
It was introduced in c2e8691c07, but since we no
longer no longer provide a custom get_buffer callback, the original cause of
the issue is gone.
Signed-off-by: Marton Balint <cus@passwd.hu>
It is no longer necessary. Also do frame timer and video current pos reset in
the main thread because with the wait removed, the timing would not be optimal
in the read thread.
Signed-off-by: Marton Balint <cus@passwd.hu>
Also do not update current pts on dropped frames, it is no longer necessary.
Fixes regression part of ticket #2507.
Signed-off-by: Marton Balint <cus@passwd.hu>
- consider it an invalid PTS when the next PTS value is the same as the current one
- in case of invalid or unknown PTS, return vp->duration
This fixes ffplay part of ticket #3005.
Signed-off-by: Marton Balint <cus@passwd.hu>
When changing the audio, video or subtitle stream, from now on, ffplay will
cycle through the streams of the current program.
Signed-off-by: Marton Balint <cus@passwd.hu>