mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge commit '56d061ce9da954560892e3551513d5ecc0439846'
* commit '56d061ce9da954560892e3551513d5ecc0439846': metasound: add last missing modes (8kHz @ 6kbps per channel) Conflicts: Changelog doc/general.texi Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
ac021fdc40
@ -9,6 +9,7 @@ version <next>
|
|||||||
- elbg filter
|
- elbg filter
|
||||||
- string validation in ffprobe
|
- string validation in ffprobe
|
||||||
- support for decoding through VDPAU in ffmpeg (the -hwaccel option)
|
- support for decoding through VDPAU in ffmpeg (the -hwaccel option)
|
||||||
|
- complete Voxware MetaSound decoder
|
||||||
|
|
||||||
|
|
||||||
version 2.1:
|
version 2.1:
|
||||||
|
@ -943,7 +943,6 @@ following image formats are supported:
|
|||||||
@item Vorbis @tab E @tab X
|
@item Vorbis @tab E @tab X
|
||||||
@tab A native but very primitive encoder exists.
|
@tab A native but very primitive encoder exists.
|
||||||
@item Voxware MetaSound @tab @tab X
|
@item Voxware MetaSound @tab @tab X
|
||||||
@tab imperfect and incomplete support
|
|
||||||
@item WavPack @tab X @tab X
|
@item WavPack @tab X @tab X
|
||||||
@item Westwood Audio (SND1) @tab @tab X
|
@item Westwood Audio (SND1) @tab @tab X
|
||||||
@item Windows Media Audio 1 @tab X @tab X
|
@item Windows Media Audio 1 @tab X @tab X
|
||||||
|
@ -187,7 +187,7 @@ static int metasound_read_bitstream(AVCodecContext *avctx, TwinVQContext *tctx,
|
|||||||
|
|
||||||
sub = mtab->fmode[bits->ftype].sub;
|
sub = mtab->fmode[bits->ftype].sub;
|
||||||
|
|
||||||
if (bits->ftype != TWINVQ_FT_SHORT)
|
if (bits->ftype != TWINVQ_FT_SHORT && !tctx->is_6kbps)
|
||||||
get_bits(&gb, 2);
|
get_bits(&gb, 2);
|
||||||
|
|
||||||
read_cb_data(tctx, &gb, bits->main_coeffs, bits->ftype);
|
read_cb_data(tctx, &gb, bits->main_coeffs, bits->ftype);
|
||||||
@ -307,6 +307,12 @@ static av_cold int metasound_decode_init(AVCodecContext *avctx)
|
|||||||
ibps = avctx->bit_rate / (1000 * avctx->channels);
|
ibps = avctx->bit_rate / (1000 * avctx->channels);
|
||||||
|
|
||||||
switch ((avctx->channels << 16) + (isampf << 8) + ibps) {
|
switch ((avctx->channels << 16) + (isampf << 8) + ibps) {
|
||||||
|
case (1 << 16) + ( 8 << 8) + 6:
|
||||||
|
tctx->mtab = &ff_metasound_mode0806;
|
||||||
|
break;
|
||||||
|
case (2 << 16) + ( 8 << 8) + 6:
|
||||||
|
tctx->mtab = &ff_metasound_mode0806s;
|
||||||
|
break;
|
||||||
case (1 << 16) + ( 8 << 8) + 8:
|
case (1 << 16) + ( 8 << 8) + 8:
|
||||||
tctx->mtab = &ff_metasound_mode0808;
|
tctx->mtab = &ff_metasound_mode0808;
|
||||||
break;
|
break;
|
||||||
@ -362,6 +368,7 @@ static av_cold int metasound_decode_init(AVCodecContext *avctx)
|
|||||||
tctx->decode_ppc = decode_ppc;
|
tctx->decode_ppc = decode_ppc;
|
||||||
tctx->frame_size = avctx->bit_rate * tctx->mtab->size
|
tctx->frame_size = avctx->bit_rate * tctx->mtab->size
|
||||||
/ avctx->sample_rate;
|
/ avctx->sample_rate;
|
||||||
|
tctx->is_6kbps = ibps == 6;
|
||||||
|
|
||||||
return ff_twinvq_decode_init(avctx);
|
return ff_twinvq_decode_init(avctx);
|
||||||
}
|
}
|
||||||
|
@ -15198,6 +15198,24 @@ static const uint16_t bark_tab_s44_128[] = {
|
|||||||
1, 2, 1, 2, 3, 4, 6, 10, 23, 76
|
1, 2, 1, 2, 3, 4, 6, 10, 23, 76
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const TwinVQModeTab ff_metasound_mode0806 = {
|
||||||
|
{
|
||||||
|
{ 8, bark_tab_s8_64, 10, fcb8s, 1, 5, cb0806ss0, cb0806ss1, 27 },
|
||||||
|
{ 2, bark_tab_m8_256, 20, fcb8m, 2, 5, cb0806sm0, cb0806sm1, 22 },
|
||||||
|
{ 1, bark_tab_l8_512, 30, fcb8l, 3, 6, cb0806sl0, cb0806sl1, 24 }
|
||||||
|
},
|
||||||
|
512, 12, lsp8, 1, 5, 3, 3, shape8, 8, 28, 20, 6, 200
|
||||||
|
};
|
||||||
|
|
||||||
|
const TwinVQModeTab ff_metasound_mode0806s = {
|
||||||
|
{
|
||||||
|
{ 8, bark_tab_s8s_64, 10, fcb8ss, 1, 5, cb0806ss0, cb0806ss1, 27 },
|
||||||
|
{ 2, bark_tab_m8s_256, 20, fcb8sm, 2, 5, cb0806sm0, cb0806sm1, 22 },
|
||||||
|
{ 1, bark_tab_l8s_512, 30, fcb8sl, 3, 6, cb0806sl0, cb0806sl1, 24 }
|
||||||
|
},
|
||||||
|
512, 12, lsp8s, 1, 5, 3, 3, shape8s, 8, 28, 20, 6, 200
|
||||||
|
};
|
||||||
|
|
||||||
const TwinVQModeTab ff_metasound_mode0808 = {
|
const TwinVQModeTab ff_metasound_mode0808 = {
|
||||||
{
|
{
|
||||||
{ 8, bark_tab_s8_64, 10, fcb8s, 1, 5, cb0808s0, cb0808s1, 18 },
|
{ 8, bark_tab_s8_64, 10, fcb8s, 1, 5, cb0808s0, cb0808s1, 18 },
|
||||||
|
@ -704,7 +704,7 @@ static av_cold void init_bitstream_params(TwinVQContext *tctx)
|
|||||||
TWINVQ_WINDOW_TYPE_BITS +
|
TWINVQ_WINDOW_TYPE_BITS +
|
||||||
mtab->fmode[i].sub * (bse_bits[i] + n_ch * TWINVQ_SUB_GAIN_BITS);
|
mtab->fmode[i].sub * (bse_bits[i] + n_ch * TWINVQ_SUB_GAIN_BITS);
|
||||||
|
|
||||||
if (tctx->codec == TWINVQ_CODEC_METASOUND) {
|
if (tctx->codec == TWINVQ_CODEC_METASOUND && !tctx->is_6kbps) {
|
||||||
bsize_no_main_cb[1] += 2;
|
bsize_no_main_cb[1] += 2;
|
||||||
bsize_no_main_cb[2] += 2;
|
bsize_no_main_cb[2] += 2;
|
||||||
}
|
}
|
||||||
|
@ -141,6 +141,8 @@ typedef struct TwinVQContext {
|
|||||||
|
|
||||||
const TwinVQModeTab *mtab;
|
const TwinVQModeTab *mtab;
|
||||||
|
|
||||||
|
int is_6kbps;
|
||||||
|
|
||||||
// history
|
// history
|
||||||
float lsp_hist[2][20]; ///< LSP coefficients of the last frame
|
float lsp_hist[2][20]; ///< LSP coefficients of the last frame
|
||||||
float bark_hist[3][2][40]; ///< BSE coefficients of last frame
|
float bark_hist[3][2][40]; ///< BSE coefficients of last frame
|
||||||
|
@ -402,6 +402,7 @@ static av_cold int twinvq_decode_init(AVCodecContext *avctx)
|
|||||||
tctx->decode_ppc = decode_ppc;
|
tctx->decode_ppc = decode_ppc;
|
||||||
tctx->frame_size = avctx->bit_rate * tctx->mtab->size
|
tctx->frame_size = avctx->bit_rate * tctx->mtab->size
|
||||||
/ avctx->sample_rate + 8;
|
/ avctx->sample_rate + 8;
|
||||||
|
tctx->is_6kbps = 0;
|
||||||
if (avctx->block_align && avctx->block_align * 8 / tctx->frame_size > 1) {
|
if (avctx->block_align && avctx->block_align * 8 / tctx->frame_size > 1) {
|
||||||
av_log(avctx, AV_LOG_ERROR,
|
av_log(avctx, AV_LOG_ERROR,
|
||||||
"VQF TwinVQ should have only one frame per packet\n");
|
"VQF TwinVQ should have only one frame per packet\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user