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
Justin Ruggles
ea289186f0
ea: fix audio pts
...
The time base is 1 / sample_rate, not 90000.
Several more codecs encode the sample count in the first 4 bytes of the
chunk, so we set the durations accordingly. Also, we can set start_time and
packet duration instead of keeping track of the sample count in the demuxer.
2012-03-03 17:03:27 -05:00
Justin Ruggles
01be6fa926
psx-str: fix audio pts
...
Each packet has 18 sectors with 224/channels samples in each sector.
2012-03-03 17:03:27 -05:00
Justin Ruggles
d0ab585074
vqf: set packet duration
...
Fixes timestamp calculation.
The FATE reference is updated because timestamp calculations are now more
accurate. Previous timestamps were based on average bit rate.
2012-03-03 17:03:26 -05:00
Justin Ruggles
101c369b7c
tta demuxer: set packet duration
2012-03-03 17:03:26 -05:00
Justin Ruggles
0b8b7db01b
mpegaudio_parser: do not ignore information from the first parsed frame
...
Update some demuxing and seeking fate tests.
2012-03-03 17:03:26 -05:00
Justin Ruggles
5a9b952201
thp: set audio packet durations
2012-03-03 16:58:45 -05:00
Justin Ruggles
5602a464c9
avcodec: add a Vorbis parser to get packet duration
...
This also allows for removing some of the Vorbis-related hacks.
2012-03-03 16:43:11 -05:00
Justin Ruggles
737ca4482b
vorbisdec: read the previous window flag for long windows
...
When reading sequentially, we are using the actual flag from the previous
frame, but when seeking we do not know what the previous window flag was, so
we need to read it from the bitstream.
2012-03-03 16:43:11 -05:00
Justin Ruggles
f240df6a74
FATE: do not decode audio in the nuv test.
...
We already have sufficient coverage for 16-bit pcm.
2012-02-29 15:45:50 -05:00
Justin Ruggles
929dd8c108
dxa: set audio stream time base using the sample rate
2012-02-29 15:45:50 -05:00
Justin Ruggles
aa831c4093
psx-str: do not allow seeking by bytes
2012-02-29 15:45:50 -05:00
Justin Ruggles
bdbf1fa405
asfdec: Do not set AVCodecContext.frame_size
2012-02-29 15:45:50 -05:00
Justin Ruggles
4bf6775e9d
vqf: set packet parameters after av_new_packet()
...
Otherwise the values are overwritten.
2012-02-29 15:45:50 -05:00
Justin Ruggles
841c17177b
FATE: add mp3 test for sample that exhibited false overreads
...
related to b716542691
Error messages and audible artifacts were fixed in that commit.
2012-02-29 15:12:18 -05:00
Justin Ruggles
a45a1ea521
libvorbis: add/update error messages
...
also use AVERROR codes for some return values instead of -1
2012-02-29 14:54:25 -05:00
Justin Ruggles
592c4dbc7e
libvorbis: use AVFifoBuffer for output packet buffer
...
simplifies the code and does less memmove()
2012-02-29 14:54:24 -05:00
Justin Ruggles
1fe7c1be54
libvorbis: remove unneeded e_o_s check
...
vorbis_bitrate_flushpacket() does not return any packets that should not be
output in the bitstream.
2012-02-29 14:54:24 -05:00
Justin Ruggles
94025d8a99
libvorbis: check return values for functions that can return errors
2012-02-29 14:54:24 -05:00
Justin Ruggles
c5063e0348
libvorbis: use float input instead of s16
...
libvorbis takes float input, so we can just deinterleave/reorder the input
as-is instead of also converting.
2012-02-29 14:54:24 -05:00
Justin Ruggles
f15c4281dc
libvorbis: do not flush libvorbis analysis if dsp state was not initialized
...
Fixes a segfault if init() fails before initializing the dsp state
2012-02-29 14:54:23 -05:00
Justin Ruggles
147ff24a0e
libvorbis: use VBR by default, with default quality of 3
2012-02-29 14:54:20 -05:00
Justin Ruggles
182d4f1f38
libvorbis: fix use of minrate/maxrate AVOptions
...
- enable the options for audio encoding
- properly check for user-set maxrate
- use correct calling order in vorbis_encode_setup_managed()
2012-02-29 14:44:15 -05:00
Justin Ruggles
eb35ef2932
libvorbis: cosmetics: renaming/pretty-printing/comments/unused code
2012-02-29 14:44:15 -05:00
Justin Ruggles
4e99501f62
(e)ac3enc: select a default bit rate based on the channel layout
2012-02-29 14:36:00 -05:00
Justin Ruggles
6aeea1dfb2
ac3enc: choose the closest bit rate to the one requested instead of failing
2012-02-29 14:36:00 -05:00
Justin Ruggles
f234e8a32e
movenc: use timestamps instead of frame_size for samples-per-packet
...
For encoding, AVCodecContext.frame_size is the number of input samples to
send to the encoder and does not necessarily correspond directly to the
timestamps of the output packets.
2012-02-27 04:33:37 -05:00
Justin Ruggles
f3dab5fb6d
movenc: use the first cluster duration as the tfhd default duration
2012-02-27 04:33:37 -05:00
Justin Ruggles
681d17264f
movenc: factorize calculation of cluster duration into a separate function
2012-02-27 04:33:37 -05:00
Justin Ruggles
be8d812c96
vorbisenc: check all allocations for failure
2012-02-25 11:49:43 -05:00
Justin Ruggles
f7a2e12f2a
roqaudioenc: return AVERROR codes instead of -1
2012-02-25 11:49:43 -05:00
Justin Ruggles
3fa9a999c1
roqaudioenc: set correct bit rate
2012-02-25 11:49:43 -05:00
Justin Ruggles
cf57c78b77
roqaudioenc: use AVCodecContext.frame_size correctly.
...
It is not allowed to change mid-stream like it does currently. Instead we need
to buffer the first 8 frames before returning them as a single packet, then
only return single frame packets after that.
2012-02-25 11:49:43 -05:00
Justin Ruggles
56279f1d61
roqaudioenc: remove unneeded sample_fmt check
2012-02-25 11:49:43 -05:00
Justin Ruggles
4b7f8838e8
ra144enc: use int16_t* for input samples rather than void*
2012-02-25 11:49:43 -05:00
Justin Ruggles
03359ebcf9
ra144enc: set AVCodecContext.coded_frame
2012-02-25 11:49:43 -05:00
Justin Ruggles
a65f7c96fc
ra144enc: remove unneeded sample_fmt check
2012-02-25 11:49:42 -05:00
Justin Ruggles
928672f1f1
nellymoserenc: set AVCodecContext.coded_frame
2012-02-25 11:49:42 -05:00
Justin Ruggles
370b44cda2
nellymoserenc: improve error checking in encode_init()
2012-02-25 11:49:42 -05:00
Justin Ruggles
333506c33f
nellymoserenc: return AVERROR codes instead of -1
2012-02-25 11:49:42 -05:00
Justin Ruggles
6f600ab354
libvorbis: improve error checking in oggvorbis_encode_init()
2012-02-25 11:49:42 -05:00
Justin Ruggles
be60eec668
mpegaudioenc: return AVERROR codes instead of -1
2012-02-25 11:49:42 -05:00
Justin Ruggles
7a8cbb39f6
libfaac: improve error checking and handling in Faac_encode_init()
2012-02-25 11:49:42 -05:00
Justin Ruggles
c9bca80132
avutil: add AVERROR_UNKNOWN
...
Useful to return instead of -1 when the cause of the error is unknown,
typically from an external library.
2012-02-25 11:49:41 -05:00
Justin Ruggles
a8bdf2405c
check for coded_frame allocation failure in several audio encoders
2012-02-25 11:49:41 -05:00
Justin Ruggles
255ad8881d
audio encoders: do not set coded_frame->key_frame.
...
it is already set in avcodec_alloc_frame()
2012-02-25 11:49:41 -05:00
Justin Ruggles
8e2555d3b1
g722enc: check for trellis data allocation error
2012-02-25 11:49:41 -05:00
Justin Ruggles
ca300d938b
libspeexenc: export encoder delay through AVCodecContext.delay
2012-02-25 11:49:41 -05:00
Justin Ruggles
7600e5c5aa
avcodec: document the use of AVCodecContext.delay for audio encoders
2012-02-25 11:49:41 -05:00
Justin Ruggles
19adb0bc2d
vorbisdec: add a flush() function
...
clear MDCT overlap buffer and reset previous window mode when seeking
2012-02-24 17:37:25 -05:00