Commit Graph
100 Commits
Author SHA1 Message Date
Justin Ruggles 3ed7860943 include stdint.h in adpcm_data.h
fixes make checkheaders
2011-09-13 10:59:47 -04:00
Justin Ruggles 826c56d16e adpcm: split ADPCM encoders and decoders into separate files.
Move shared tables to a separate file as well.
2011-09-12 11:26:11 -04:00
Justin Ruggles ae264bb29b ac3enc: Add channel coupling support for the fixed-point AC-3 encoder.
Update FATE references accordingly.
2011-09-05 10:09:44 -04:00
Justin Ruggles a0d17b6d45 ac3enc: scale floating-point coupling channel coefficients in
scale_coefficients() rather than in apply_channel_coupling()
2011-09-05 10:07:43 -04:00
Justin Ruggles 3e5722a8ca ac3enc: fix encoding of stereo ac3 files when rematrixing is disabled.
The number of rematrixing bands still needs to be calculated.
2011-09-05 09:24:59 -04:00
Justin Ruggles 3be5a94351 ac3enc: remove outdated TODO comment for apply_channel_coupling() 2011-08-22 12:14:57 -04:00
Justin Ruggles c766eb1ce1 ac3enc: add macros for option names to make them more understandable. 2011-08-11 11:33:32 -04:00
Justin Ruggles 9542ca9fb7 ac3enc: fix 'channel_coupling' option to actually allow 'auto'.
Use 'auto' as the default value.
2011-08-11 11:33:32 -04:00
Justin Ruggles 069083a419 ac3enc: clip coupling coordinates during calculation
This is faster than using the clip_coefficients() function. Also,
clipping the coordinates before determining reuse is better since it
will compare coordinates that are closer to their final encoded values.
2011-08-10 17:09:24 -04:00
Justin Ruggles d271d5b215 Remove incorrect info in documentation of AVCodecContext.bits_per_raw_sample.
bits_per_raw_sample is used in video as well, where sample_fmt is not used.
2011-08-10 15:40:52 -04:00
Justin Ruggles d1d33e0763 ac3enc: remove unneeded #include 2011-08-09 16:44:34 -04:00
Justin Ruggles fce33f9ead ac3enc: restructure coupling coordinate reuse calculation 2011-08-09 16:44:34 -04:00
Justin Ruggles c3d63262fe ac3enc: allow new coupling coordinates to be sent independently for each
channel.
2011-08-09 16:44:34 -04:00
Justin Ruggles d55ad59a8a ac3enc: separate exponent bit counting from exponent grouping.
Move bit counting to the bit allocation function. Move exponent grouping to
after bit allocation. This will allow for adjustment of bandwidth parameters
during bit allocation without having to do exponent grouping multiple times.
2011-08-09 16:28:18 -04:00
Justin Ruggles 093ee8e199 cosmetics: reindent 2011-07-27 11:51:46 -04:00
Justin Ruggles 1bca72e1bd eac3enc: support writing of basic mixing and info metadata 2011-07-27 11:51:46 -04:00
Justin Ruggles be7bd626c4 eac3enc: use different numbers of blocks per frame to allow higher bitrates 2011-07-21 14:57:10 -04:00
Justin Ruggles 953302656a cosmetics: indentation 2011-07-19 14:15:00 -04:00
Justin Ruggles 08a747afb9 eac3enc: use frame exponent strategy when applicable.
This checks if the set of selected exponent strategies for all blocks in a
channel are in the frame exponent strategy table, and if so, writes the
table index instead of each strategy. This saves up to 7 bits per channel per
frame, so the overall effect on quality is small.
2011-07-19 14:15:00 -04:00
Justin Ruggles 31b69928e5 cosmetics: rename eac3dec_data.c/h to eac3_data.c/h since the tables will also
be used in the E-AC-3 encoder.
2011-07-19 14:15:00 -04:00
Justin Ruggles b5849f7709 ac3enc: merge AC3MDCTContext with AC3EncodeContext.
Since both the fixed-point and floating-point encoders use the FFTContext,
this no longer needs to be in a separate context. Also, when a short-transform
context is added, the same MDCT window will be used.
2011-07-13 16:55:28 -04:00
Justin Ruggles 82cea7cb6c ac3enc: prefer passing AC3EncodeContext rather than AVCodecContext 2011-07-13 16:55:28 -04:00
Justin Ruggles f501157e53 ac3enc: fix memleak 2011-07-13 16:54:02 -04:00
Justin Ruggles e35c674d13 alsa: limit buffer_size to 32768 frames.
In testing, the file output plugin gave a max buffer size of about 20 million
frames, which is way more than what is really needed and causes a memory
allocation error on my system.
2011-07-09 16:01:06 -04:00
Justin Ruggles 8bfd7f6a47 alsa: fallback to buffer_size/4 for period_size.
buffer_size/4 is the value used by aplay. This fixes output to null
devices, e.g. writing ALSA output to a file.
2011-07-09 16:00:56 -04:00
Justin Ruggles f99a5ef92e ac3dsp: add x86-optimized versions of ac3dsp.extract_exponents(). 2011-07-01 13:02:11 -04:00
Justin Ruggles 8b7b2d6aae ac3dsp: simplify extract_exponents() now that it does not need to do clipping. 2011-07-01 13:02:11 -04:00
Justin Ruggles 523b7eba19 ac3enc: clip coefficients after MDCT.
This ensures that any processing between the MDCT and exponent extraction will
be using clipped coefficients.
2011-07-01 13:02:11 -04:00
Justin Ruggles 6054cd25b4 ac3enc: add int32_t array clipping function to DSPUtil, including x86 versions. 2011-07-01 13:02:11 -04:00
Justin Ruggles bd2deab706 cosmetics: remove outdated comment that is no longer true 2011-06-28 11:03:42 -04:00
Justin Ruggles 8683c6a638 ac3enc: move ff_ac3_encode_frame() to ac3enc_template.c
This avoids using function pointers for quite a few small functions, most of
which just call DSP functions.
2011-06-27 12:59:39 -04:00
Justin Ruggles 668afae438 ac3enc: merge log2_tab() into normalize_samples() 2011-06-27 12:59:39 -04:00
Justin Ruggles 7dcdf974d0 ac3enc: Remove bit allocation fallbacks.
They introduce too much complexity for very little benefit. The result is that
encoding will be more likely to fail at extremely low bitrates where quality
would be awful anyway.
2011-06-27 12:59:39 -04:00
Justin Ruggles 684f4abfac ac3enc: remove unneeded local variable in asym_quant() 2011-06-22 12:18:10 -04:00
Justin Ruggles f21fb76b1b ac3enc: remove a branch in asym_quant() by doing 2 shifts 2011-06-22 12:18:10 -04:00
Justin Ruggles 0e4dbe2996 ac3enc: avoid masking output in asym_quant() by using signed values for
quantized mantissas.
2011-06-22 12:18:10 -04:00
Justin Ruggles e6c52cee54 Replace usages of av_get_bits_per_sample_fmt() with av_get_bytes_per_sample().
av_get_bits_per_sample_fmt() is deprecated.
2011-06-20 18:56:06 -04:00
Justin Ruggles b203f65451 ac3enc: use correct alignment and length in channel coupling dsp functions.
This fixes a segfault when using the C version of ac3dsp.float_to_fixed24().
2011-06-15 17:56:49 -04:00
Justin Ruggles 99477adc31 ac3enc: fix allocation of floating point samples.
sizeof(SampleType) is different for fixed and float encoders.
2011-06-13 17:49:37 -04:00
Justin Ruggles 38c304addd ac3enc: remove empty ac3_float function that is never called 2011-06-13 16:49:35 -04:00
Justin Ruggles e0cc66df61 ac3enc: split templated float vs. fixed functions into a separate file.
Function pointers are used for templated functions instead of needlessly
duplicating many functions.
2011-06-13 16:49:35 -04:00
Justin Ruggles e754dfc0bb ac3enc: dynamically allocate AC3EncodeContext fields windowed_samples and mdct
This will allow the same struct to be used for both the fixed and float ac3
encoders.
2011-06-13 16:49:35 -04:00
Justin Ruggles 36151b3e31 ac3enc: use function pointer to choose between AC-3 and E-AC-3 header output
functions.
2011-06-13 16:49:35 -04:00
Justin Ruggles aecc596a65 Update copyright year for ac3enc_opts_template.c.
The code was originally committed to Libav on March 25, 2011.
2011-06-10 12:58:08 -04:00
Justin Ruggles c8e9ea43d0 Move E-AC-3 encoder functions to a separate eac3enc.c file. 2011-06-07 15:16:41 -04:00
Justin Ruggles 787a13535a ac3enc: remove convenience macro, #define DEBUG 2011-06-07 15:16:41 -04:00
Justin Ruggles a8bd53402a ac3enc: remove unused #define 2011-06-07 15:16:41 -04:00
Justin Ruggles 1397ac0aa0 APIchanges: fill-in git commit hash for av_get_bytes_per_sample() addition 2011-06-07 13:07:35 -04:00
Justin Ruggles 2f37321abc iirfilter: fix biquad filter coefficients.
The current filter implementation should only have the cx coefficients
divided by gain in order to give the correct output scale.
2011-06-07 10:47:36 -04:00
Justin Ruggles 35d5cb1ab4 ac3enc: extract all exponents for the frame at once 2011-06-04 19:08:37 -04:00
Justin Ruggles 70bb747a57 ac3dsp: do not use the ff_* prefix when referencing ff_ac3_bap_bits.
this should fix the windows builds

Signed-off-by: Martin Storsjö <martin@martin.st>
2011-05-28 22:43:40 +03:00
Justin Ruggles dc0ad40de2 ac3dsp: fix loop condition in ac3_update_bap_counts_c() 2011-05-28 14:41:21 -04:00
Justin Ruggles 6ca23db9cc ac3enc: modify mantissa bit counting to keep bap counts for all values of bap
instead of just 0 to 4.

This does all the actual bit counting as a final step.
2011-05-28 12:39:28 -04:00
Justin Ruggles 1323828a0f ac3enc: split mantissa bit counting into a separate function.
No speed difference. This is to allow for more flexible bit counting.
2011-05-28 12:39:28 -04:00
Justin Ruggles 7743865ffc ac3enc: store per-block/channel bap pointers by reference block in a 2D array
rather than in the AC3Block struct.

This will make it easier to access the bap values without having to chase
the reference block pointers each time.
2011-05-28 12:39:28 -04:00
Justin Ruggles 1a950da6a2 cosmetics: indentation and alignment after previous commit 2011-05-27 16:25:22 -04:00
Justin Ruggles aa47c35dff ac3enc: add support for E-AC-3 encoding.
This adds basic stream format support and allows for arbitrary bit rates
rather than just those supported in AC-3.
2011-05-27 16:25:22 -04:00
Justin Ruggles b1bf8c7887 ac3enc: Move AC-3 AVOptions array to a separate file to make it easier to
use only selected options for the different AC-3 encoder types.
2011-05-27 16:25:22 -04:00
Justin Ruggles 478455d66b ac3enc: initialize all coefficients to zero.
Uninitialized coefficients were being used to generate exponents, some
of which actually ended up in the final stream.  Even though, they were
just extra exponents that are not used by any decoder, it is still
better to have consistent output for testing. This also fixes valgrind
errors.
2011-05-25 20:13:49 -04:00
Justin Ruggles 7f3a7b5c40 ac3enc: add channel coupling support
Channel coupling is an optional AC-3 feature that increases quality by
combining high frequency information from multiple channels into a
single channel. The per-channel high frequency information is sent with
less accuracy in both the frequency and time domains. This allows more
bits to be used for lower frequencies while preserving enough
information to reconstruct the high frequencies.
2011-05-24 07:52:31 +02:00
Justin Ruggles cef7d70181 aacdec: fix typo in scalefactor clipping check 2011-05-23 15:56:52 -04:00
Justin Ruggles e98a95e779 10l: wrap float_interleave functions in HAVE_YASM.
fixes compilation with --disable-yasm
2011-05-18 20:18:08 -04:00
Justin Ruggles 41e21e4db6 APIchanges: fill in date and commit for request_sample_fmt 2011-05-18 17:52:31 -04:00
Justin Ruggles 9aa8193a23 Add floating-point sample format support to the ac3, eac3, dca, aac, and vorbis
decoders.

Based on patches by clsid2 in ffdshow-tryout.
2011-05-18 17:27:06 -04:00
Justin Ruggles bc778a0cea Add support for request_sample_format in ffmpeg and ffplay. 2011-05-18 17:27:06 -04:00
Justin Ruggles 00e5da893d Add APIchanges entry for request_sample_fmt. 2011-05-18 17:27:06 -04:00
Justin Ruggles 64150ff014 Add request_sample_fmt field to AVCodecContext.
This will allow audio decoders to support output of different sample formats
as a runtime option.
2011-05-18 17:27:06 -04:00
Justin Ruggles 32f8fb8ecf Add float_interleave() to FmtConvertContext with x86-optimized versions.
Partially based on patches by clsid2 in ffdshow-tryout.
ff_float_interleave6() x86 improvements by Loren Merrit.
2011-05-18 17:27:05 -04:00
Justin Ruggles a26d2b4bc8 Fix compilation of iirfilter-test. 2011-05-17 18:06:51 -04:00
Justin Ruggles 033a4a942a aacdec: Use float instead of int16_t for ltp_state to avoid needless rounding. 2011-05-15 17:42:05 -04:00
Justin Ruggles 08e434b015 Add an aac sample which uses LTP to fate-aac. 2011-05-14 12:41:11 -04:00
Justin Ruggles 4d7a421574 ac3enc: put the counting of stereo rematrixing bits in the same place to
make the code easier to understand.
2011-05-12 12:41:08 -04:00
Justin Ruggles 257de756fb ac3enc: clean up count_frame_bits() and count_frame_bits_fixed() 2011-05-12 12:41:08 -04:00
Justin Ruggles 63b1866ae1 ac3enc: clip large coefficient values and negative exponents rather than using
av_assert2().
2011-05-01 13:32:04 -04:00
Justin Ruggles 177fed4e9b ac3enc: do not store a bandwidth code for each channel.
Although AC-3 allows it, it's not very useful. The encoder uses the same code
for all full-bandwidth channels.
2011-05-01 13:32:04 -04:00
Justin Ruggles a1d0f511fc ac3enc: remove bandwidth reduction as fallback for bit allocation failure.
It was only needed at low bitrates, which now already use a low bandwidth, so
the bandwidth reduction is no longer needed.
2011-05-01 13:32:04 -04:00
Justin Ruggles ba6bce5140 ac3enc: merge compute_exp_strategy_ch() into compute_exp_strategy() 2011-05-01 13:32:04 -04:00
Justin Ruggles 4142487d1c ac3enc: return error if frame+exponent bits are too large instead of using
av_assert2().

This can occur in some very rare cases with low bitrates.
2011-05-01 13:32:03 -04:00
Justin Ruggles 987fe2dc55 ac3enc: differentiate between current block and reference block in bit_alloc() 2011-05-01 13:32:03 -04:00
Justin Ruggles 6b2636bba6 ac3enc: simplify exponent_init() by calculating exponent_group_tab[] based
on exponent group sizes.
2011-05-01 13:32:03 -04:00
Justin Ruggles e0b33d479c ac3enc: simplify stereo rematrixing decision options 2011-05-01 13:32:03 -04:00
Justin Ruggles 8745e9c458 ac3enc: remove check for mismatching channels and channel_layout 2011-04-27 12:57:43 -04:00
Justin Ruggles 688b09fa59 If AVCodecContext.channels is 0 and AVCodecContext.channel_layout is
non-zero, set channels based on channel_layout.

This allows the user to set only channel_layout and not channels.
2011-04-27 12:57:43 -04:00
Justin Ruggles 168f9e8c40 If AVCodecContext.channel_layout and AVCodecContext.channels are both
non-zero, check to make sure they do not contradict eachother.
2011-04-27 12:57:43 -04:00
Justin Ruggles 3dfc3e70c0 cosmetics: indentation 2011-04-27 12:57:43 -04:00
Justin Ruggles 8b00ab0113 Check AVCodec.supported_samplerates and AVCodec.channel_layouts in
avcodec_open().

If the encoder has a channel_layouts list and AVCodecContext.channel_layout
is 0, then only print a warning and let the encoder decide how to handle it.
2011-04-27 12:57:42 -04:00
Justin Ruggles 6271794041 aacdec: use a scale of 2 in the LTP MDCT rather than doubling the coefficient
table values from the spec.
2011-04-27 12:39:37 -04:00
Justin Ruggles 79ee8977c2 ac3enc: correct the flipped sign in the ac3_fixed encoder 2011-04-26 17:19:37 -04:00
Justin Ruggles 53f7628d38 update last major version increase dates in APIchanges 2011-04-20 11:46:23 -04:00
Justin Ruggles 31d76ec288 In avcodec_open(), set return code to an error value only when an error occurs
instead of unconditionally at the start of the function.

This fixes a bug where a successful call to ff_thread_init() masks errors that
occur after that point in the function.  It also makes future bugs like this
less likely since the error code is now set near to the point in the code
where the error is found.
2011-04-19 14:10:03 -04:00
Justin Ruggles 4c64c8e95a ac3dec: fix processing of delta bit allocation information.
The number of dba segments is the coded value + 1.
The coupling dba offset starts at the first coupling band, not at zero.
2011-04-17 12:33:41 -04:00
Justin Ruggles e05a3ac713 ac3enc: select bandwidth based on bit rate, sample rate, and number of
full-bandwidth channels.

This reduces high-frequency artifacts and improves the quality of the lower
frequency audio at low bit rates.
2011-04-03 20:59:14 -04:00
Justin Ruggles e3c007bb43 flvdec: fix segfault in amf_parse_object() due to NULL key
fixes Issue 2674
2011-04-03 20:29:04 -04:00
Justin Ruggles c4549bd66a ac3enc: avoid memcpy() of exponents and baps in EXP_REUSE case by using
exponent reference blocks.
2011-03-28 14:46:17 -04:00
Justin Ruggles 991f3de1bb ac3enc: Add codec-specific options for writing AC-3 metadata. 2011-03-27 11:30:09 -04:00
Justin Ruggles eb81cf860c mov: set audio service type for AC-3 from bitstream mode in the 'dac3' atom. 2011-03-25 16:59:09 -04:00
Justin Ruggles be18738801 Get audio_service_type for AC-3 based on bitstream mode in the AC-3 parser
and decoder, and vice-versa for the AC-3 encoder.
2011-03-25 16:59:00 -04:00
Justin Ruggles c70a6a41dd Use audio_service_type to set stream disposition. 2011-03-25 16:58:50 -04:00
Justin Ruggles 0b18b49b3b Add APIchanges entry for audio_service_type. 2011-03-25 16:55:36 -04:00
Justin Ruggles 34b47d7cbc Add audio_service_type field to AVCodecContext for encoding and reporting
of the service type in the audio bitstream.
2011-03-25 16:51:53 -04:00