We do this to ensure that input_get_buffer is not called from a
frame_worker_thread of a multithreaded decoder when we already freed the
filters.
Fixes occasional segfaults on video stream change.
Signed-off-by: Marton Balint <cus@passwd.hu>
This fixes occasional segfaults caused by lock request of the packet queue from
the reader thread.
Also don't allow to put frames into the queue when it's aborted, and don't try
to fill the queue with frames when it is aborted.
Signed-off-by: Marton Balint <cus@passwd.hu>
Also use av_guess_sample_aspect_ratio for determining aspect ratio of the video
frame if not using avfilter.
Signed-off-by: Marton Balint <cus@passwd.hu>
Codec values may not reflect the actual frame size, and it also enables us to
simplify code in the avfilter enabled and the avfilter disabled case.
Signed-off-by: Marton Balint <cus@passwd.hu>
When we are using filter chains we have to set the aspect ratio of the source
to the best known value, we use the av_guess_sample_aspect_ratio function to
determine that.
Fixes ticket 1228.
Signed-off-by: Marton Balint <cus@passwd.hu>
The new lowres support is limited to decoders where lowres decoding
is possible in high quality.
I was not able to measure any speed difference, but if one is found
the 2-3 lines that might affect speed can be made compile time conditional
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This reduces the number of queued frames for audio data but also reduces the
amount of A-V difference after changing the audio stream (because less frames
are queued). Fixes bug #1035.
Signed-off-by: Marton Balint <cus@passwd.hu>
Otherwise we may use the remaining data of the last packet from the previous
audio stream. Fixes bug #951.
Signed-off-by: Marton Balint <cus@passwd.hu>
This is somewhat redundant as no decoder should call get_buffer() with such argument.
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Also change synchronize_audio to only calculate the wanted number of samples
instead of doing the actual synchronization, and make swr_convert handle the
sample addition or deletion.
This new method replaces the old buggy way which simply deleted or
multiplied samples.
Signed-off-by: Marton Balint <cus@passwd.hu>
This allows to get out of ffplay if it or SDL got stuck.
This for example happens when the audio driver is playing something
else and doesnt support mixing multiple sources.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Signed-off-by: Marton Balint <cus@passwd.hu>
This patch reimplements early frame drop, it is now based on the current
difference between the master clock and the video clock, and the pts of the
current and the last displayed (or skipped) frame. If the frame to be added to
the queue is late after decoding, then we drop it early because later we would
drop it anyway (unless it is the only frame in the picture queue).
The current approach has only one downside that I know of, it does not handle
well when the filters are changing significantly the pts of the frames, because
we compare pts values from filtered and unfiltered frames.
We also start using the pictq_mutex to ensure consistent video_current_pts,
video_current_pts_drift, frame_last_pts, frame_last_dropped_pts and
frame_last_dropped_pos values.
Signed-off-by: Marton Balint <cus@passwd.hu>
Fixes missing blue channel when switching from/to fullscren on OSX and libsdl
1.2.14. Fixes issue 548. Thanks for Jean First for the original patch and
for testing.
Signed-off-by: Marton Balint <cus@passwd.hu>
If the picture queue is empty, or when the calculated delay is 0, frame_timer
is not increased but we are still displaying the old frame. When we eventually
get a frame, where the computed delay is positive, so we don't need to drop any
more frames, then it is best to update frame_timer to be as near as the current
time as it can.
This way we dont't have to wait several frames to add the necesarry delays to
frame_timer to reach current time, therefore there are no extra frame drops
after reaching a positive delay.
Signed-off-by: Marton Balint <cus@passwd.hu>