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
Diego Biurrun
d3778972d8
ac3enc: Fix linking of AC-3 encoder without the E-AC-3 encoder.
...
The AC-3 encoder unconditionally references some symbols from the E-AC-3
encoder; make those references conditional to fix linking.
2011-06-08 00:06:19 +02: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
35d5cb1ab4
ac3enc: extract all exponents for the frame at once
2011-06-04 19:08:37 -04:00
Mans Rullgard
90da52f01f
ac3enc: fix LOCAL_ALIGNED usage in count_mantissa_bits()
...
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-05-28 21:42:31 +01: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
Mans Rullgard
7f7726c7a2
ac3enc: use LOCAL_ALIGNED macro
...
Aligned local variables must use the LOCAL_ALIGNED macro to ensure
correct alignment on all systems. The unusual size argument to
memset is required since the implementation of LOCAL_ALIGNED may
use a pointer to an array.
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-05-28 15:00:16 +01: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
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
Anton Khirnov
b66752790a
AVOptions: make default_val a union, as proposed in AVOption2.
...
This breaks API and ABI.
2011-05-10 20:22:06 +02:00
Alex Converse
1a5e4fd8c5
Replace strncpy() with av_strlcpy().
2011-05-03 21:20:13 -07: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
Vitor Sessak
9d35fa520e
Add AVX FFT implementation.
...
Signed-off-by: Reinhard Tartler <siretart@tauware.de>
2011-04-26 18:25:24 +02:00
Mans Rullgard
2310ee4b1c
ac3enc: move extract_exponents inner loop to ac3dsp
...
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-04-04 18:27:22 +01: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
Mans Rullgard
79997def65
ac3enc: use generic fixed-point mdct
...
This makes the AC3 encoder use the shared fixed-point MDCT rather
than its own implementation. The checksum changes are due to
different rounding in the MDCT.
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-04-03 19:01:53 +01:00
Mans Rullgard
7f6e05cdfd
ac3enc: simplify sym_quant()
...
These expressions are equivalent since levels is always odd, and
overflow is impossible due to the constraints set by the assert().
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-03-31 12:01:27 +01:00
Mans Rullgard
52fd16a264
ac3enc: move compute_mantissa_size() to ac3dsp
...
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-03-30 01:21:56 +01:00
Mans Rullgard
6f718471ea
ac3enc: move mant*_cnt and qmant*_ptr out of AC3EncodeContext
...
These fields are only used in quantize_mantissas() and reset
on each call, no need to store them in the main context.
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-03-30 00:38:45 +01:00
Mans Rullgard
6d9f52b2cd
ac3: move ff_ac3_bit_alloc_calc_bap to ac3dsp
...
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-03-29 19:31:45 +01: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
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
e6e9823488
Add apply_window_int16() to DSPContext with x86-optimized versions and use it
...
in the ac3_fixed encoder.
2011-03-22 21:08:30 -04:00
Justin Ruggles
85ab290470
ac3enc: make sym_quant() branch-free
2011-03-22 14:36:18 -04:00
Mans Rullgard
2912e87a6c
Replace FFmpeg with Libav in licence headers
...
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-03-19 13:33:20 +00:00
Justin Ruggles
0f999cfddb
ac3enc: add float_to_fixed24() with x86-optimized versions to AC3DSPContext
...
and use in scale_coefficients() for the floating-point AC-3 encoder.
2011-03-17 16:46:48 -04:00
Justin
323e6fead0
ac3enc: do not right-shift fixed-point coefficients in the final MDCT stage.
...
This increases the accuracy of coefficients, leading to improved quality.
Rescaling of the coefficients to full 25-bit accuracy is done rather than
offsetting the exponent values. This requires coefficient scaling to be done
before determining the rematrixing strategy. Also, the rematrixing strategy
calculation must use 64-bit math to prevent overflow due to the higher
precision coefficients.
2011-03-14 08:45:26 -04:00
Justin Ruggles
2d9a101a1f
ac3enc: add some assertions
2011-03-07 11:18:59 -05:00
Justin Ruggles
7100d63ca5
ac3enc: use av_assert2() instead of assert() to make debugging easier.
2011-03-07 11:18:51 -05:00
Justin Ruggles
53e35fd340
ac3enc: add num_rematrixing_bands to AC3EncodeContext and use it instead of the hardcoded value.
...
Currently it is always 4, but this change will allow it to be adjusted when
bandwidth-related features are added such as channel coupling, enhanced
channel coupling, and spectral extension.
2011-03-04 17:40:24 -05:00
Justin Ruggles
5b54d4b376
ac3enc: fix bug in stereo rematrixing decision.
...
The rematrixing strategy reuse flags are not reset between frames, so they
need to be initialized for all blocks, not just block 0.
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-02-16 23:39:57 +00:00
Justin Ruggles
50d7140441
ac3enc: change default floor code to 7.
...
This is to match the value in every (E-)AC-3 file from commercial sources.
It has a negligible effect on audio quality.
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-02-15 21:40:42 +00:00