The issue is that, when the main packet data buffer is changed, streamcopy
uses a temporary new packet to store that buffer, frees the old packet, and
replace it with the new packet.
However, in doing so, it forgets about the side data, which gets freed, but
is still needed and referenced. Then, when the packet gets freed again in
the normal code path, it attempts to free its side data which has already
been freed.
Therefore, simply avoid the first free on side data by removing that side
data from the packet.
Fixes ticket #3773.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '3f3232a371cc88696184d9aef1f812656264e56c':
avconv: set the output stream timebase
Conflicts:
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Commit fc9c857c introduced deadlock regression when processing too many inputs:
ffmpeg $(seq -f " -f lavfi -i aevalsrc=0:d=%.0f" 70) -vf concat=n=70:v=0:a=1 -f null -
Happens for different number of inputs, depending on available memory size,
overcommit settings, ulimits, etc. Easily noticeable for 32-bit builds,
that exhaust address space allocating 8-10 MB stack for each thread.
Earlier ffmpeg versions exited with unhelpful "Conversion failed!" message.
This patch fixes both problems: it frees the queue to prevent deadlock
and adds a meaningful error message if pthread_create() fails.
Reviewed-by: Nicolas George <george@nsup.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
With threads the decoder has a delay and will thus have multiple
frames at EOF left in its buffers which will be returned when flushing
the decoder. The code that extracts such frames from the decoder at the
end does not pull frames from the filtergraph, thus when one of these
frames causes the filtergraph to be reinited, the frames still inside
the graph at that point re lost
This commit changes the flushing to be more similar to normal decoding
and 1 frame at a time
Fixes hqx fate with threads
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '452860d7e056f9a894cac2fe52cdedeae4c38251':
Use av_packet_rescale_ts() to simplify code.
Conflicts:
doc/examples/muxing.c
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '48e50921337984ba4ec2c1cafe45d43787f84498':
avconv: make -shortest work with streamcopy
Conflicts:
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '39ec5e1cf8444f827c42effb76e5694e091bbff3':
avconv: Report the codec and the encoder separately
Merged-by: Michael Niedermayer <michaelni@gmx.at>
We cannot use avpriv_request_sample() as this is private to the libs
or rather it would be a bad usage example
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
It seems working without this now for the files i tested it with, if this causes
a regression, dont hesitate to put the line back or open a ticket or fix (if possible)
the parser
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '383136264ef40452efd86cafb2d7221cd3830b3d':
avconv: do not use the stream codec context for encoding
Conflicts:
ffmpeg.c
ffmpeg_opt.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
The demuxer needs this value to generate correct timestamps in some corner cases
Ideally the parser would always set this correctly, but some parsers lac support
for extracting this value, also its not trivial.
This fixes a regression
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '41776ba9c0ebbb71394cefdf7dd1b243e6c852d5':
avconv: do not use the stream codec context for decoding
Conflicts:
ffmpeg.c
ffmpeg_filter.c
ffmpeg_opt.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Fixes 1 frame error in the duration and derived values,
introduced by not using AVStream.pts in the previous commit
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'dc40d88625d7e402d58ac3f3df69fbf27aa31ea0':
avconv: do not use poorly defined and undocumented AVStream.pts
Conflicts:
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
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>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '6656370b858329ca07a60a2de954d5e90daa0206':
avconv: set the "encoder" tag when transcoding
Conflicts:
ffmpeg.c
tests/ref/lavf/mkv
tests/ref/seek/lavf-mkv
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '93afb6c98df876b15e3d911a9450ad55f92080ce':
avconv: set output avg_frame_rate when known
Conflicts:
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '73ed8558a61c4f1d0ce8d1f35183ac1a0a4e31e3':
avconv: simplify exit_program() by using more local vars
Conflicts:
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'aa499568afc01d59215eef7e5b14b949a9671afc':
avconv: More descriptive message about framedrop
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'a220b07b0f971f88213aef012aea51af2800be62':
avconv: split printing the final statistics into a separate function
Conflicts:
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'f759f66e367bc62ed7738a51040f775b656a60d8':
avconv: explicitly report when the muxing overhead is unknown
Conflicts:
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '59444c76e6d43529a12dbd80b6dd29c6ba4079a9':
avconv: add stream-global side data to the first demuxed packet
Conflicts:
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '5c79d2e12d13959fc6aed92d102c25194a06de05':
avconv: Do not divide by zero
Conflicts:
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
If a packet is not ready on the input selected by ffmpeg,
it will read from another input instead. If that happens
repeatedly, frames will accumulate somewhere later in the
processing to ensure streams synchronization. It can happen
in particular when reading from a slow medium or an
expensive lavfi filter graph.
Make reading from normal demuxers on non-streamed data and
from the lavfi pseudo-device blocking to avoid that.
Should fix trac ticket #3079.
* commit '2ce8bca51f7264b47027f69d50dd8e49aa2fd683':
avconv: print a warning when falling back to default 25fps
Conflicts:
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This should make discontinuity detection more robust and detect
more cases. Timestamps after the decoder can be delayed due to threads,
timestamps before can be missing
no testcase available/known
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '674fa49110a661694188a958be13d529b7c8c5dd':
avconv: do not call avcodec_get_frame_defaults()
Conflicts:
ffmpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>