Justin Ruggles and Ronald S. Bultje
de7f22ab0c
ac3dsp: call femms/emms at the end of float_to_fixed24() for 3DNow and SSE
...
Fixes ac3-encode and eac3-encode FATE test failures with SSE2 disabled.
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com >
2012-04-12 21:33:04 -07: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
Justin Ruggles
c58846f3a8
avcodec: use align == 0 for default alignment in avcodec_fill_audio_frame()
...
Use default alignment in audio_get_buffer()
2012-04-09 10:20:35 -04:00
Justin Ruggles
0109a09dc3
avutil: use align == 0 for default alignment in audio sample buffer functions
2012-04-09 10:20:35 -04:00
Justin Ruggles
18ed3788b0
avutil: allow NULL linesize in av_samples_fill_arrays() and av_samples_alloc()
2012-04-09 10:20:35 -04:00
Justin Ruggles
1337de0c4b
avcodec: validate the channel layout vs. channel count for decoders
...
Set avctx->channel_layout to 0 if the channel count does not match
avctx->channels.
2012-04-08 18:45:58 -04:00
Justin Ruggles
4d693b023c
avutil: add av_get_packed_sample_fmt() and av_get_planar_sample_fmt()
...
Based on a patch by Clément Bœsch <ubitux@gmail.com >
2012-04-08 15:13:28 -04:00
Justin Ruggles
bb0618e68b
avcodec: remove avcodec_guess_channel_layout()
...
It is not public because the header is not installed, and its functionality
has been replaced by av_get_default_channel_layout().
2012-04-05 16:40:51 -04:00
Justin Ruggles
5cc51a5847
avutil: Add av_get_default_channel_layout()
...
Also, use the new function in the AC-3 encoder.
2012-04-05 16:35:14 -04:00
Justin Ruggles
67aec401d8
libspeexdec: set frame size in libspeex_decode_init()
...
This fixes speex decoding, which was broken in 85469f1c .
2012-03-30 16:30:37 -04:00
Justin Ruggles
eed691f7d1
oggdec: calculate correct timestamps in Ogg/FLAC
...
We need to parse the individual packet durations when there is more than one
packet in a page.
2012-03-27 16:11:06 -04: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
f036342b4b
aiffdec: set block_duration to 1 for PCM codecs that are supported in AIFF-C
2012-03-22 11:45:46 -04:00
Justin Ruggles
b38b7cc392
aiffdec: factor out handling of integer PCM for AIFF-C and plain AIFF
2012-03-22 11:45:46 -04:00
Justin Ruggles
2c07c18048
aiffdec: use av_get_audio_frame_duration() to set block_duration for AIFF-C
2012-03-22 11:45:46 -04:00
Justin Ruggles
02f88eec1d
aiffdec: do not set bit rate if block duration is unknown
...
CC: libav-stable@libav.org
2012-03-22 11:45:36 -04:00
Justin Ruggles
6aba117f12
adxenc: use AVCodec.encode2()
2012-03-21 15:04:42 -04:00
Justin Ruggles
54e6cf8a94
adxenc: Use the AVFrame in ADXContext for coded_frame
2012-03-21 15:04:42 -04:00
Justin Ruggles
5d4017b8f3
vorbisenc: use AVCodec.encode2()
2012-03-21 12:49:36 -04:00
Justin Ruggles
e5aab2d7a4
libvorbis: use AVCodec.encode2()
2012-03-21 12:49:36 -04:00
Justin Ruggles
8ccf545b95
libopencore-amrnbenc: use AVCodec.encode2()
2012-03-21 12:49:36 -04:00
Justin Ruggles
330d9d1b50
ra144enc: use AVCodec.encode2()
2012-03-21 12:49:36 -04:00
Justin Ruggles
f090428234
nellymoserenc: use AVCodec.encode2()
2012-03-21 12:49:35 -04:00
Justin Ruggles
32173df3d2
roqaudioenc: use AVCodec.encode2()
...
The first frame pts must be saved until we have 8 frames since RoQ audio
requires 8 frames in the first packet.
2012-03-21 12:49:35 -04:00
Justin Ruggles
b03dcf07f6
libspeex: use AVCodec.encode2()
2012-03-21 12:49:35 -04:00
Justin Ruggles
57a52f258e
libvo_amrwbenc: use AVCodec.encode2()
2012-03-21 12:49:35 -04:00
Justin Ruggles
db440fa12d
libvo_aacenc: use AVCodec.encode2()
2012-03-21 12:49:35 -04:00
Justin Ruggles
27bacfeb57
wmaenc: use AVCodec.encode2()
2012-03-21 12:49:32 -04:00
Justin Ruggles
b0f75ba272
mpegaudioenc: use AVCodec.encode2()
...
Update FATE references due to encoder delay.
2012-03-20 18:56:22 -04:00
Justin Ruggles
3d853d7ab3
libmp3lame: use AVCodec.encode2()
2012-03-20 18:56:18 -04:00
Justin Ruggles
1987a940b7
libgsmenc: use AVCodec.encode2()
2012-03-20 18:55:39 -04:00
Justin Ruggles
d1afb2f94e
libfaac: use AVCodec.encode2()
...
Encoder output is delayed by several frames, so we keep a queue of input
frame timing info to match up with corresponding output packets.
2012-03-20 18:55:36 -04:00
Justin Ruggles
59041fd053
g726enc: use AVCodec.encode2()
2012-03-20 18:47:23 -04:00
Justin Ruggles
bb03b6f7b1
g722enc: use AVCodec.encode2()
...
FATE reference updated due timestamp rounding because of resampling from
44100 Hz to 16000 Hz in avconv.
2012-03-20 18:47:23 -04:00
Justin Ruggles
910bdb9a42
flacenc: use AVCodec.encode2()
2012-03-20 18:47:19 -04:00
Justin Ruggles
24e74f0a0f
adpcmenc: update to AVCodec.encode2()
2012-03-20 18:46:57 -04:00
Justin Ruggles
aa872af5e3
ac3enc: update to AVCodec.encode2()
...
Update FATE references due to encoder delay.
2012-03-20 18:46:56 -04:00
Justin Ruggles
ad95307f92
aacenc: use AVCodec.encode2()
2012-03-20 18:46:49 -04:00
Justin Ruggles
4bf64961a9
avcodec: add code for a frame queue for use by audio encoders with delay
...
This simplifies matching of timestamps between input frames and output
packets.
2012-03-20 16:04:21 -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
Justin Ruggles
e056f8d37d
FATE: use +/- flag option syntax for vp8 emu-edge tests
2012-03-20 15:51:58 -04:00
Justin Ruggles
f63412fc74
oggdec: output correct timestamps for Vorbis
...
Takes encoder delay into account by comparing first the coded page
duration with the calculated page duration. Handles last packet duration
if needed, also by comparing coded duration with calculated duration.
Also does better handling of timestamp generation for packets in the
first page for streamed ogg files where the start time is not
necessarily zero.
2012-03-20 14:39:57 -04:00
Justin Ruggles
9b9fc9ba32
avconv: pass input stream timestamps to audio encoders
...
5 FATE test references updated due to using demuxer-generated timestamps that
are either not sample-accurate or are slightly off in the input file.
2012-03-20 14:12:54 -04:00
Justin Ruggles
a1977e0103
lavc: shrink encoded audio packet size after encoding.
2012-03-20 14:12:54 -04:00
Justin Ruggles
777365fe86
xa: set correct bit rate
...
Also fixes stream duration calculation.
2012-03-20 14:12:54 -04:00
Justin Ruggles
a54bc52265
xa: do not set bit_rate, block_align, or bits_per_coded_sample
...
The values in the header refer to decoded data, not compressed data.
2012-03-20 14:12:53 -04:00
Justin Ruggles
64de57f645
xa: fix end-of-file handling
...
Do not output an extra packet when out_size is reached.
Also return AVERROR_EOF instead of AVERROR(EIO).
2012-03-20 14:12:53 -04:00
Justin Ruggles
cd2ffb67ad
xa: fix timestamp calculation
...
The packet duration is always 28 samples.
2012-03-20 14:12:53 -04:00
Justin Ruggles
6ca3b248e2
resample: allocate a large enough output buffer
...
Fixes invalid writes and crashes when doing conversions such as stereo to 5.1
channels or sample rate conversion on 5.1 channels.
2012-03-17 13:37:44 -04:00
Justin Ruggles
c3da9f5060
wmaenc: remove bit-exact hack
...
It may have improved cross-platform stability, but wasn't the only place in
the encoder with bitexact issues. It is no longer needed because we have FATE
tests for float encoders using fuzzy comparison.
2012-03-17 11:46:15 -04:00
Justin Ruggles
85cf49fab7
FATE: remove WMA acodec tests
2012-03-17 11:46:15 -04:00
Justin Ruggles
3a1e453e54
FATE: add WMAv1 and WMAv2 encode/decode tests with fuzzy comparison
2012-03-17 11:33:35 -04:00
Justin Ruggles
a4cf4ef256
FATE: add AC-3 and E-AC-3 encode/decode tests with fuzzy comparison
2012-03-17 11:33:35 -04:00
Justin Ruggles
90e5b58a53
FATE: add capability for audio encode/decode tests with fuzzy psnr comparison
...
This allows for testing floating-point audio encoders across different
platforms where exact comparisons are unreliable due to float rounding
differences.
2012-03-15 17:06:17 -04:00
Justin Ruggles
cffd7580bb
FATE: allow a tolerance in the size comparison in do_tiny_psnr()
...
This will allow for comparing decoded output to the original source when the
decoded size is not exactly the same as the original size.
2012-03-15 14:40:31 -04:00
Justin Ruggles
bb6842966e
FATE: use absolute difference from a target value in do_tiny_psnr()
...
This will allow comparison to original pre-encoded content instead of
comparing to expected decoded output.
2012-03-15 14:40:31 -04:00
Justin Ruggles
5ecadc6620
FATE: allow tests to set CMP_SHIFT to pass to tiny_psnr
...
This will allow adjusting for any encoder or decoder delay when doing
comparisons.
2012-03-15 14:40:24 -04:00
Justin Ruggles
0720d263ea
FATE: use $fuzz directly in do_tiny_psnr() instead of passing it around
2012-03-15 12:06:56 -04:00
Justin Ruggles
94cf64b81f
cosmetics: reindent
2012-03-05 13:08:19 -05:00
Justin Ruggles
8c1d6ac66a
avformat: do not require a pixel/sample format if there is no decoder
...
Also, do not keep trying to find and open a decoder in try_decode_frame() if
we already tried and failed once.
Fixes always searching until max_analyze_duration in
avformat_find_stream_info() when demuxing codecs without a decoder.
2012-03-05 13:08:18 -05:00
Justin Ruggles
a7fa75684d
avformat: do not fill-in audio packet duration in compute_pkt_fields()
...
Use the estimated duration only to calculate missing timestamps if needed.
2012-03-05 13:08:18 -05:00
Justin Ruggles
6c65cf58fd
lavf: Use av_get_audio_frame_duration() in get_audio_frame_size()
...
Also, do not give AVCodecContext.frame_size priority for muxing.
Updated 2 FATE references:
dxa-feeble - adds 1 audio frame that is still within 2 seconds as specified
by -t 2 in the FATE test
wmv8-drm-nodec - durations are not needed. previously they were estimated
using the packet size and average bit rate.
2012-03-05 13:08:18 -05:00
Justin Ruggles
11ac796f7a
dca_parser: parse the sample rate and frame durations
2012-03-05 13:08:17 -05:00
Justin Ruggles
85469f1c9e
libspeexdec: do not set AVCodecContext.frame_size
...
It is not necessary
2012-03-05 13:08:17 -05:00
Justin Ruggles
adbf61ff8a
libopencore-amr: do not set AVCodecContext.frame_size
...
It is not necessary
2012-03-05 13:08:17 -05:00
Justin Ruggles
0efa4073bf
alsdec: do not set AVCodecContext.frame_size
...
It is not necessary
2012-03-05 13:08:17 -05:00
Justin Ruggles
f1e73100d9
siff: do not set AVCodecContext.frame_size
...
also, properly set AVCodecContext.bits_per_coded_sample, AVStreasm.start_time,
and AVPacket.duration.
2012-03-05 13:08:17 -05:00
Justin Ruggles
ec2e767bf3
amr demuxer: do not set AVCodecContext.frame_size.
...
it is not necessary.
2012-03-05 13:08:17 -05:00
Justin Ruggles
8d1a20aa7c
aiffdec: do not set AVCodecContext.frame_size
...
It is unnecessary. Also, for some codecs we're reading more than 1 frame per
packet. Instead we use a private context variable to calculate the bit rate,
stream duration, and packet durations.
Updated FATE seek test, which has slightly different timestamps due to a
more accurate bit rate calculation.
2012-03-05 13:08:17 -05:00
Justin Ruggles
237a855caf
mov: do not set AVCodecContext.frame_size
...
It is not necessary.
2012-03-05 13:08:17 -05:00
Justin Ruggles
9727264220
ape: do not set AVCodecContext.frame_size.
...
prevents lavf from setting incorrect packet durations.
2012-03-05 13:08:17 -05:00
Justin Ruggles
2dd18d4435
rdt: remove workaround for infinite loop with aac
...
avformat_find_stream_info() no longer hangs while waiting for AAC frame_size
2012-03-05 13:08:16 -05:00
Justin Ruggles
9c365fe8ae
avformat: do not require frame_size in avformat_find_stream_info() for CELT
...
In Ogg/CELT, frame_size is found in the same place as the sample_rate and
channels, so we do not need to force the frame_size to be parsed.
2012-03-05 13:08:16 -05:00
Justin Ruggles
fbc8c59679
avformat: do not require frame_size in avformat_find_stream_info() for MP1/2/3
...
It was only needed to avoid a bad time base (and thus non-monotone timestamps)
for stream copy to avi.
2012-03-05 13:08:16 -05:00
Justin Ruggles
84b6ae0808
avformat: do not require frame_size in avformat_find_stream_info() for AAC
...
We already will get the needed info because of CODEC_CAP_CHANNEL_CONF
2012-03-05 13:08:16 -05:00
Justin Ruggles
620b88a302
swfenc: use av_get_audio_frame_duration() instead of AVCodecContext.frame_size
...
This way we can do stream copy without having the demuxer wait until
frame_size has been set.
2012-03-05 13:08:16 -05:00
Justin Ruggles
14aecc50fa
rtpenc: use av_get_audio_frame_duration() for max_frames_per_packet
...
It is more reliable than AVCodecContext.frame_size for codecs with constant
packet duration.
2012-03-05 13:08:16 -05:00
Justin Ruggles
c019070fda
riffenc: use av_get_audio_frame_duration()
...
For encoding, frame_size is not a reliable indicator of packet duration.
Also, we don't want to have to force the demuxer to find frame_size for
stream copy to work.
2012-03-05 13:08:15 -05:00
Justin Ruggles
9524cf79df
avcodec: add av_get_audio_frame_duration() function.
...
This is a utility function for the user to get the frame duration based on
the codec id, frame size in bytes, and various AVCodecContext parameters.
2012-03-05 13:08:15 -05:00
Justin Ruggles
6699d07480
avcodec: add av_get_exact_bits_per_sample() function
...
This only returns bits per sample when it is exactly correct. That is, the
codec contains only raw samples with no frame headers or padding. This applies
to basically all PCM codecs and a small subset of ADPCM codecs.
2012-03-05 13:08:15 -05:00
Justin Ruggles
1ba08c94f5
vorbisenc: add output buffer overwrite protection
2012-03-04 01:16:54 -05:00
Justin Ruggles
fe78470a8b
libopencore-amrnbenc: fix end-of-stream handling
...
Use CODEC_CAP_DELAY and CODEC_CAP_SMALL_LAST_FRAME to properly pad and flush
the encoder at the end of encoding. This is needed in order to have all input
samples decoded.
2012-03-04 01:14:53 -05:00
Justin Ruggles
b0350c1c30
ra144enc: fix end-of-stream handling
...
Use CODEC_CAP_DELAY and CODEC_CAP_SMALL_LAST_FRAME to properly pad and flush
the encoder at the end of encoding. This is needed in order to have all input
samples decoded.
2012-03-04 01:14:53 -05:00
Justin Ruggles
29e2c85310
nellymoserenc: zero any leftover packet bytes
...
fixes writing of uninitialized packet data
2012-03-04 01:14:52 -05:00
Justin Ruggles
6c7a01621c
nellymoserenc: use proper MDCT overlap delay
2012-03-04 01:14:52 -05:00
Justin Ruggles
51ddf35c90
wmaenc: fix m/s stereo encoding for the first frame
...
We need to set ms_stereo in encode_init() in order to avoid incorrectly
encoding the first frame as non-m/s while flagging it as m/s. Fixes an
uncomfortable pop in the left channel at the start of playback.
CC:libav-stable@libav.org
2012-03-03 18:20:10 -05:00
Justin Ruggles
8ed7488ea3
wmaenc: return s->block_align instead of recalculating it
2012-03-03 18:20:10 -05:00
Justin Ruggles
5d652e063b
wmaenc: check final frame size against output packet size
...
Currently we have an assert() that prevents the frame from being too large,
but it is more user-friendly to give an error message instead of aborting on
assert(). This condition is quite unlikely due to the minimum bit rate check
in encode_init(), but it is still worth having.
2012-03-03 18:20:10 -05:00
Justin Ruggles
dfc4fdedf8
wmaenc: require a large enough output buffer to prevent overwrites
...
The maximum theoretical frame size is around 17000 bytes. Although in
practice it will generally be much smaller, we require a larger buffer
just to be safe.
CC: libav-stable@libav.org
2012-03-03 18:20:10 -05:00
Justin Ruggles
1ec075cfec
wmaenc: limit allowed sample rate to 48kHz
...
ff_wma_init() allows up to 50kHz, but this generates an exponent band
size table that requires 65 bands. The code assumes 25 bands in many
places, and using sample rates higher than 48kHz will lead to buffer
overwrites.
CC:libav-stable@libav.org
2012-03-03 18:20:10 -05:00
Justin Ruggles
c2b8dea182
wmaenc: limit block_align to MAX_CODED_SUPERFRAME_SIZE
...
This is near the theoretical limit for wma frame size and is the most that
our decoder can handle. Allowing higher bit rates will just end up padding
each frame with empty bytes.
Fixes invalid writes for avconv when using very high bit rates.
CC:libav-stable@libav.org
2012-03-03 18:20:09 -05:00
Justin Ruggles
b7beabab4b
tiertexseq: set correct block_align for audio
2012-03-03 17:03:27 -05:00
Justin Ruggles
f9cf91d822
tiertexseq: set audio stream start time to 0
...
Update FATE test to reflect delayed video due to the file having audio-only
frames prior to the first frame with video.
2012-03-03 17:03:27 -05:00
Justin Ruggles
0883109b27
voc/avs: Do not change the sample rate mid-stream.
...
Also, set the time base based on the sample rate.
lavf-voc seek test updated to reflect slightly different seek points.
2012-03-03 17:03:27 -05:00
Justin Ruggles
4da374f8a9
segafilm: use the sample rate as the time base for audio streams
2012-03-03 17:03:27 -05:00