Commit Graph

366 Commits

Author SHA1 Message Date
Anton Khirnov
bbcedade00 avconv: make the -passlogfile option per-stream. 2012-08-30 13:56:25 +02:00
Anton Khirnov
44b0b85fe9 avconv: prefer user-forced input framerate when choosing output framerate 2012-08-26 07:50:06 +02:00
Anton Khirnov
3c0df90584 avconv: make -shortest a per-output file option. 2012-08-18 08:48:30 +02:00
Mans Rullgard
d752509b74 Use log2(x) instead of log(x) / log(2)
Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-08-13 17:59:21 +01:00
Anton Khirnov
ab29609701 avconv: allow no input files.
It is now possible to use lavfi sources.
2012-08-08 21:56:26 +02:00
Anton Khirnov
a5fd7c607f avconv: prevent invalid reads in transcode_init() 2012-08-08 21:55:54 +02:00
Anton Khirnov
57d2422559 avconv: rename OutputStream.is_past_recording_time to finished.
The new name is shorter and more accurate, since this variable is no
longer used only for checking recording time constraint.
2012-08-08 21:55:45 +02:00
Anton Khirnov
0c00fd80ee avconv: split the code for processing input packets out of transcode() 2012-08-08 21:55:15 +02:00
Anton Khirnov
f154ef1ae5 avconv: send EOF to lavfi even if flushing the decoder fails 2012-08-08 20:16:29 +02:00
Anton Khirnov
cc2133b66a avconv: get rid of pointless temporary variable. 2012-08-08 20:16:13 +02:00
Anton Khirnov
8391602913 avconv: simplify transcode().
Operate with a pointer to InputFile instead of its index in input_files.
2012-08-08 20:15:36 +02:00
Anton Khirnov
c0fbf9713c avconv: cosmetics
Replace for (;foo == 0;) with while (!foo)
This is prettier.
2012-08-08 20:15:13 +02:00
Anton Khirnov
0b26ef4228 avconv: replace no_packet array in transcode() with a var in InputStream
This simplifies splitting code for reading from input out of
transcode().
2012-08-08 20:12:47 +02:00
Anton Khirnov
d64901f99d avconv: remove commented out cruft. 2012-08-08 20:12:11 +02:00
Anton Khirnov
a4f5011065 avconv: maintain sync on lavfi outputs.
Before this commit, poll_filters() reads all frames available on each
lavfi output. This does not work for lavfi sources that produce
an unlimited number of frames, e.g. color and similar.

With this commit, poll_filters() reads from output with the lowest
timestamp and returns to wait for more input if no frames are available
on it.
2012-08-08 20:04:27 +02:00
Anton Khirnov
fe2147e936 avconv: split configuring filter configuration to a separate file. 2012-08-08 11:11:52 +02:00
Anton Khirnov
f5e668273a avconv: split option parsing into a separate file. 2012-08-08 11:10:06 +02:00
Anton Khirnov
36ef5369ee Replace all CODEC_ID_* with AV_CODEC_ID_* 2012-08-07 16:00:24 +02:00
Mans Rullgard
82494835c4 rational: add av_inv_q() returning the inverse of an AVRational
This allows simplifying a few expressions.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-08-05 17:46:41 +01:00
Anton Khirnov
aba232cfa9 lavf: deprecate r_frame_rate.
According to its description, it is supposed to be the LCM of all the
frame durations. The usability of such a thing is vanishingly small,
especially since we cannot determine it with any amount of reliability.
Therefore get rid of it after the next bump.

Replace it with the average framerate where it makes sense.

FATE results for the wtv and xmv demux tests change. In the wtv case
this is caused by the file being corrupted (or possibly badly cut) and
containing invalid timestamps. This results in lavf estimating the
framerate wrong and making up wrong frame durations.
In the xmv case the file contains pts jumps, so again the estimated
framerate is far from anything sane and lavf again makes up different
frame durations.

In some other tests lavf starts making up frame durations from different
frame.
2012-07-29 08:06:30 +02:00
Ronald S. Bultje
dcb7ef5483 avprobe/avconv: fix tentative declaration compile errors on MSVS. 2012-07-28 11:48:18 -07:00
Anton Khirnov
5417efbbf3 avconv: print an error message when demuxing fails.
Also exit in such a case if -xerror is used.

Fixes bug 329.
2012-07-17 09:50:26 +02:00
Anton Khirnov
8a645bfc31 avconv: propagate fatal errors from lavfi. 2012-07-09 08:32:49 +02:00
Anton Khirnov
53ddd43f0c avconv: use only meaningful timestamps in start time check. 2012-07-06 12:59:11 +02:00
Anton Khirnov
b98c8f4f2b avconv: fix the check for -ss as an output option.
start time is already substracted from the frame timestamp, so it needs
to be checked against 0, not start time.
2012-07-06 12:54:52 +02:00
Reimar Döffinger
4c679750cb avconv: fix parsing of -force_key_frames option.
Currently it always exits with an error when more than
one position is specified.

CC: libav-stable@libav.org
2012-07-05 13:15:36 +02:00
Martin Storsjö
715129cdc4 avconv: Set audio filter time base to the sample rate
If the output frame size is smaller than the input sample rate,
and the input stream time base corresponds exactly to the input
frame size (getting input packet timestamps like 0, 1, 2, 3, 4 etc),
the output timestamps from the filter will be like
0, 1, 2, 3, 4, 4, 5 ..., leadning to non-monotone timestamps later.

A concrete example is input mp3 data having frame sizes of 1152
samples, transcoded to aac with 1024 sample frames.

By setting the audio filter time base to the sample rate, we will
get sensible timestamps for all output packets, regardless of
the ratio between the input and output frame sizes.

Signed-off-by: Martin Storsjö <martin@martin.st>
2012-07-05 09:57:04 +03:00
Martin Storsjö
d3ed1c9571 cmdutils: Pass the actual chosen encoder to filter_codec_opts
This allows passing the right options to encoders when there's more
than one encoder for a certain codec id.

Signed-off-by: Martin Storsjö <martin@martin.st>
2012-06-30 15:44:10 +03:00
Anton Khirnov
c29c1a1b6b avconv: add an assert to silence an uninitialized variable warning.
The warning silenced was:
avconv.c: In function ‘opt_output_file’:
avconv.c:3380:21: warning: ‘meta_out’ may be used uninitialized in this function [-Wuninitialized]
avconv.c:3315:20: note: ‘meta_out’ was declared here
2012-06-26 19:32:41 +02:00
Anton Khirnov
74853ed3f8 avconv: shut up an uninitialized variable warning.
The warning silenced was:
avconv.c: In function ‘configure_filtergraph’:
avconv.c:603:8: warning: ‘ist’ may be used uninitialized in this function [-Wuninitialized]
avconv.c:549:18: note: ‘ist’ was declared here
2012-06-26 19:31:51 +02:00
Anton Khirnov
b8c632a720 avconv: don't include vsrc_buffer.h, which doesn't exist anymore 2012-06-26 14:33:01 +02:00
Anton Khirnov
19ad567311 avconv: fix -force_key_frames
parse_forced_keyframes() relies in encoder timebase being set, so call
it from transcode_init() after it is known.
2012-06-26 13:10:33 +02:00
Anton Khirnov
fd269d6253 avconv: remove a forgotten debugging printf. 2012-06-24 07:15:32 +02:00
Anton Khirnov
df98bf22cb avconv: use more descriptive names for hardcoded filters.
Also ensure that all such filters get a non-NULL name. Should fix FATE
failures on some architectures after
58b049f2fa.
2012-06-24 07:15:32 +02:00
Anton Khirnov
6fc7d9a078 avconv: remove redundant handling of async.
Because of a mistake during merging the code for simple and complex
filtergraphs, -async inserts an asyncts filter both on input and output.
Remove the output hunk.
2012-06-24 07:15:31 +02:00
Mans Rullgard
896bb0d742 Replace usleep() calls with av_usleep()
This reduces the dependency on unistd.h which is not available
on all systems.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-06-22 17:15:36 +01:00
Mans Rullgard
6501dcfb5e Remove unnecessary inclusions of [sys/]time.h
Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-06-20 11:46:46 +01:00
Anton Khirnov
9034b0ed66 avconv: don't try to free threads that were not initialized. 2012-06-14 10:33:10 +02:00
Anton Khirnov
9d0bfc5052 lavfi: make AVFilterPad opaque after two major bumps.
It will allow adding new fields to it without ABI breaks.
2012-06-13 11:11:33 +02:00
Anton Khirnov
47b812e9ce avconv: support only native pthreads.
Our w32pthreads wrapper has various issues and is only supposed to be
used in libavcodec.
2012-06-12 13:44:38 +02:00
Anton Khirnov
5db5169e46 avconv: multithreaded demuxing.
When there are multiple input files, run demuxing for each input file in
a separate thread, so reading packets does not block.

This is useful for achieving low latency when reading from multiple
(possibly slow) input streams.
2012-06-10 08:12:23 +02:00
Anton Khirnov
d55c2e05b5 avtools: move buffer management code from avconv to cmdutils.
It will be used by avplay.
2012-06-05 09:35:58 +02:00
Anton Khirnov
3ffa233595 avconv: don't use InputStream in the buffer management code.
Use just the pointer to the head of the buffer pool.

This will allow sharing the code with avplay.
2012-06-05 09:35:39 +02:00
Anton Khirnov
e58b75f7ff avconv: fix exiting when max frames is reached.
frame number should never be strictly larger than max frames, so the
if() was never triggered.
2012-06-05 09:35:08 +02:00
Anton Khirnov
bb7431f4fc avconv: check output stream recording time before each frame returned from filters
There may be multiple frames returned, so with just one check we can
write more than requested to the output.
2012-06-04 14:18:34 +02:00
Anton Khirnov
a508e7a1ff avconv: split selecting input file out of transcode(). 2012-06-04 14:18:18 +02:00
Anton Khirnov
2f51ec2b94 avconv: split checking for active outputs out of transcode(). 2012-06-04 14:17:52 +02:00
Anton Khirnov
c9cc76290f avconv: extend -r to work on any input stream.
This is done by automatically inserting a setpts filter.
2012-05-29 19:19:17 +02:00
Anton Khirnov
cf6c38c62b avconv: don't print filters inserted by avconv in stream mappings. 2012-05-29 19:19:16 +02:00
Anton Khirnov
8daf21d567 avconv: merge configuration code for complex and simple filters
Some tests change because -s now inserts the scaler to the end instead
of beginning of the filtergraph.
2012-05-29 19:19:16 +02:00
Anton Khirnov
a977d91e28 avconv: split configuring input filters out of configure_complex_filter 2012-05-29 19:19:16 +02:00
Martin Storsjö
a1a6cdc26e avconv: Display the error returned by avformat_write_header
Signed-off-by: Martin Storsjö <martin@martin.st>
2012-05-26 13:35:44 +03:00
Anton Khirnov
0629f6128e avconv: rename transcode_audio/video to decode_audio/video.
Those functions do only decoding now, encoding is run from
poll_filters().
2012-05-22 21:29:06 +02:00
Anton Khirnov
39885a4bd7 avconv: reindent 2012-05-18 19:41:58 +02:00
Anton Khirnov
74b961db77 avconv: replace -vsync cfr code with the fps filter.
Invented timestamps for the h264 tests return to something resembling
sanity.

In the idroq-video-encode test when converting 25 fps -> 30 fps the
fifth frame gets duplicated instead of the sixth.
2012-05-18 19:38:40 +02:00
Anton Khirnov
0ad26cdf24 avconv: add support for audio in complex filtergraphs. 2012-05-18 19:27:00 +02:00
Anton Khirnov
01e98b1b00 avconv: fix behavior with -ss as an output option.
Don't return from poll_filters() immediately, there may be other frames
and/or other streams to handle.

Fixes a memleak.
2012-05-17 19:37:58 +02:00
Anton Khirnov
6eeb9a0433 avconv: automatically insert asyncts when -async is used.
Deprecate -async.
2012-05-14 21:36:11 +02:00
Anton Khirnov
369cb092ec avconv: add support for audio filters.
The FATE changes are all off-by-one due to different rounding being used
(lrintf vs av_rescale_q).
2012-05-14 21:36:11 +02:00
Anton Khirnov
720c6b78d1 buffersrc: add av_buffersrc_write_frame().
It's the same as av_vsrc_buffer_add_frame(), except it doesn't take pts
or pixel_aspect parameters. Those are read from AVFrame.

Deprecate av_vsrc_buffer_add_frame().
2012-05-14 21:36:11 +02:00
Mans Rullgard
4f1500689d avconv: use lrint() for rounding double timestamps
Converting the double to float for lrintf() loses precision when
the value is not exactly representable as a single-precision float.
Apart from being inaccurate, this causes discrepancies in some
configurations due to differences in rounding.

Note that the changed timestamp in the vc1-ism test is a bogus,
made-up value.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-05-10 22:54:27 +01:00
Anton Khirnov
a5117a2444 lavc: pad last audio frame with silence when needed. 2012-05-09 17:46:54 +02:00
Anton Khirnov
ac71230902 lavfi: add video buffer sink, and use it in avtools
Also add the public interface libavfilter/buffersink.h.

Based on a commit by Stefano Sabatini.
2012-05-09 08:59:37 +02:00
Anton Khirnov
dce415e7f1 avconv: remove stray useless comment. 2012-05-06 16:20:26 +02:00
Mans Rullgard
3527a73933 avutil: add av_parse_cpu_flags() function
This moves the cpu flag parsing code from avconv to avutil so
it can be accessed elsewhere.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-04-25 23:19:40 +01:00
Justin Ruggles
bcb82fe1f4 avconv: use libavresample 2012-04-24 23:38:54 -04:00
Anton Khirnov
8c4022aceb avconv: fix a segfault on -c copy with -filter_complex. 2012-04-24 06:30:02 +02:00
Luca Barbato
1381081cdb avconv: fix off by one check in complex_filter
nb_input_files is already an invalid index.
2012-04-22 17:23:50 -07:00
Mans Rullgard
d526c5338d ARM: allow runtime masking of CPU features
This allows masking CPU features with the -cpuflags avconv option
which is useful for testing different optimisations without rebuilding.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-04-22 12:30:45 +01:00
Mans Rullgard
2bcbd98459 Remove lowres video decoding
This feature is complex, of questionable utility, and slows down
normal decoding.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-04-21 18:56:19 +01:00
Anton Khirnov
2994913d70 avconv: fix a segfault when default encoder for a format doesn't exist.
Fail earlier and with a more descriptive error message.
2012-04-21 06:48:28 +02:00
Justin Ruggles
d8b06521a9 avconv: check for an incompatible changing channel layout
The decoder can change the layout and channel count during decoding,
but currently we only validate that the two are compatible when opening
the codec. This checks for incompatibilities after each decoded frame.
2012-04-18 21:02:16 -04:00
Justin Ruggles
b1041f8048 avconv: only set the "channels" option when it exists for the specified input format
This allows the user to specify an input channel layout without avconv aborting because the
"channels" option was not found.
2012-04-16 23:44:49 -04:00
Anton Khirnov
9e8aae443b avconv: flush decoders immediately after an EOF.
Prevents extensive buffering when overlaying a single picture.
2012-04-15 20:37:47 +02:00
Anton Khirnov
89605e4aa0 avconv: send EOF to vsrc_buffer. 2012-04-15 20:37:47 +02:00
Anton Khirnov
3e901cbc75 avconv: reindent. 2012-04-15 20:37:42 +02:00
Anton Khirnov
3b266da3d3 avconv: add support for complex filtergraphs. 2012-04-15 20:32:09 +02:00
Anton Khirnov
560f7774a4 avconv: make filtergraphs global.
This is the first step towards supporting complex filtergraphs with more
than one input and/or output.
2012-04-15 20:27:32 +02:00
Anton Khirnov
836ce90566 avconv: move filtered_frame from InputStream to OutputStream.
It more properly belongs to output, not input.
2012-04-15 20:24:07 +02:00
Anton Khirnov
6c9eac1998 avconv: don't set output width/height directly from input value.
Always take it from lavfi. This way we don't need a clearly defined
corresponding input stream.
2012-04-15 20:23:09 +02:00
Anton Khirnov
e77c86629f avconv: move resample_{width,height,pix_fmt} to InputStream.
This is a more proper place for them, since they store parameters of the
input, not output, stream.
2012-04-15 20:23:09 +02:00
Anton Khirnov
9dced85426 avconv: remove a useless variable from OutputStream. 2012-04-15 20:22:36 +02:00
Anton Khirnov
b7327887ea avconv: get output pixel format from lavfi.
This way we don't require a clearly defined corresponding input stream.

The result for the xwd test changes because rgb24 is now chosen instead
of bgra.
2012-04-15 20:22:36 +02:00
Anton Khirnov
2e21526790 avconv: change {input,output}_{streams,files} into arrays of pointers.
Right now, they are arrays of structs, reallocated when new
streams/files are added. This makes storing pointers to those structs
harder than necessary.
2012-04-15 20:20:03 +02:00
Anton Khirnov
ea9367e921 avconv: don't pass input/output streams to some functions.
They are globals, no point in pretending they are not.
2012-04-15 20:20:03 +02:00
Stefano Sabatini
91d3cbe0fd avfiltergraph: make the AVFilterInOut alloc/free API public
This is required for letting applications to create and destroy
AVFilterInOut structs in a convenient way.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2012-04-14 09:25:46 +02:00
Justin Ruggles
d3c59d5003 avconv: use default channel layouts when they are unknown
If either input or output layout is known and the channel counts match,
use the known layout for both. Otherwise choose the default layout based on
av_get_default_channel_layout().

Changed some FATE references due to some WAVE files now having a non-zero
channel mask.
2012-04-10 11:30:01 -04:00
Justin Ruggles
95a8dac57b avconv: parse channel layout string
This allows the user to use channel layout names instead of having to use the
channel mask values.
2012-04-10 11:30:01 -04:00
Justin Ruggles
b073819bc9 avconv: allow '-async -1' to disable timestamp sync for audio encoding
This will allow a workaround for cases where input timestamps are invalid or
when decoder delay of 1 packet or more confuses avconv into using the wrong
timestamps as a sync reference.
2012-04-09 13:47:11 -04:00
Justin Ruggles
679a973e97 avconv: use default alignment for audio buffer 2012-04-09 10:20:35 -04:00
Anton Khirnov
b6c4518a87 avconv: remove OutputStream.picref.
It's only used inside transcode_video() and there's no point in
preserving it between subsequent calls. So use a local variable instead.
2012-04-09 05:13:00 +02:00
Anton Khirnov
695ec04e6a avconv: only set SAR once on the decoded frame.
No point in repeating the assignment for each output stream.
2012-04-09 05:10:38 +02:00
Anton Khirnov
d4936548f4 avconv: remove an unused function parameter. 2012-04-06 20:21:07 +02:00
Anton Khirnov
4648fe6324 avconv: remove now pointless variables. 2012-04-06 20:21:07 +02:00
Anton Khirnov
e06d2dfcde avconv: drop support for building without libavfilter.
Since the mandatory memcpy in vsrc_buffer has been eliminated, there
shouldn't be any significant reason to build without lavfi anymore.

This will make upcoming support for complex filtergraphs easier to do.
2012-04-06 20:21:07 +02:00
Ronald S. Bultje
bc1ef85520 lavc/avconv: support changing frame sizes in codecs with frame mt.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2012-03-24 21:29:16 +01:00
Justin Ruggles
4094fc9971 avconv: fix the resampling safety factors for output audio buffer allocation
This matches the output size required for audio_resample()
2012-03-23 01:19:43 -04:00
Justin Ruggles
9869e963a6 avconv: move audio output buffer allocation to a separate function
Allows for removing a goto and makes the code easier to follow.
2012-03-23 01:19:43 -04:00
Justin Ruggles
f3ab3e1aee avconv: make the async buffer global and free it in exit_program() 2012-03-23 01:19:42 -04:00
Justin Ruggles
c9594fe0fb avconv: free packet in write_frame() when discarding due to frame number limit
Fixes a memleak when using the -frames option with audio.
2012-03-20 15:51:58 -04:00