Author: cmcq Date: Tue Aug 4 01:17:45 2009 New Revision: 4935 Log: Map DTX bits into AMRFrame so DTX parameters can be used by name
Modified: amr/amrnbdata.h amr/amrnbdec.c Modified: amr/amrnbdata.h ============================================================================== --- amr/amrnbdata.h Tue Aug 4 01:03:53 2009 (r4934) +++ amr/amrnbdata.h Tue Aug 4 01:17:45 2009 (r4935) @@ -93,13 +93,23 @@ typedef struct { uint16_t pulses[10]; ///< pulses: 10 for MODE_122, 7 for MODE_102, and index and sign for others } AMRNBSubframe; +/** + * AMRNB SID frame parameters + */ +typedef struct { + uint16_t ref_vector; ///< index of reference vector + uint16_t energy; ///< index of logarithmic frame energy +} AMRNBSIDFrame; /** * AMRNB unpacked data frame */ typedef struct { uint16_t lsf[5]; ///< lsf parameters: 5 parameters for MODE_122, only 3 for other modes - AMRNBSubframe subframe[4]; ///< unpacked data for each subframe + union { + AMRNBSubframe subframe[4]; ///< unpacked data for each subframe + AMRNBSIDFrame sid; + } info; } AMRNBFrame; @@ -110,7 +120,7 @@ typedef struct { /** Specify an LSF parameter bit */ #define AMR_LSF(variable, bit) AMR_BIT(lsf[variable], bit) /** Specify a subframe-specific bit */ -#define AMR_OF(frame_num, variable, bit) AMR_BIT(subframe[frame_num].variable, bit) +#define AMR_OF(frame_num, variable, bit) AMR_BIT(info.subframe[frame_num].variable, bit) /** Specify a pitch gain bit */ #define AMR_PGAIN(frame_num, bit) AMR_OF(frame_num, p_gain, bit) /** Specify a fixed gain bit */ @@ -119,6 +129,10 @@ typedef struct { #define AMR_PLAG(frame_num, bit) AMR_OF(frame_num, p_lag, bit) /** Specify a pulse bit */ #define AMR_PULSES(frame_num, pulse_id, bit) AMR_OF(frame_num, pulses[pulse_id], bit) +/** Specify an SID reference vector bit */ +#define AMR_SVECTOR(bit) AMR_BIT(info.sid.ref_vector, bit) +/** Specify an SID energy index bit */ +#define AMR_SENERGY(bit) AMR_BIT(info.sid.energy, bit) static const AMROrder order_MODE_475[95] = { AMR_LSF(0, 7), AMR_LSF(0, 6), AMR_LSF(0, 5), AMR_LSF(0, 4), @@ -490,13 +504,12 @@ AMR_PULSES(3, 9, 0), AMR_PULSES(3, 9, 1) AMR_PLAG(1, 0), AMR_PLAG(3, 0) }; -//FIXME: This order array needs to be mapped to AMRNBFrame. static const AMROrder order_MODE_DTX[35] = { -{ 0, 2}, { 0, 1}, { 0, 0}, { 1, 7}, { 1, 6}, { 1, 5}, { 1, 4}, { 1, 3}, -{ 1, 2}, { 1, 1}, { 1, 0}, { 2, 8}, { 2, 7}, { 2, 6}, { 2, 5}, { 2, 4}, -{ 2, 3}, { 2, 2}, { 2, 1}, { 2, 0}, { 3, 8}, { 3, 7}, { 3, 6}, { 3, 5}, -{ 3, 4}, { 3, 3}, { 3, 2}, { 3, 1}, { 3, 0}, { 4, 5}, { 4, 4}, { 4, 3}, -{ 4, 2}, { 4, 1}, { 4, 0} +AMR_SVECTOR(2), AMR_SVECTOR(1), AMR_SVECTOR(0), +AMR_LSF(1, 7), AMR_LSF(1, 6), AMR_LSF(1, 5), AMR_LSF(1, 4), +AMR_LSF(1, 3), AMR_LSF(1, 2), AMR_LSF(1, 1), AMR_LSF(1, 0), +AMR_SENERGY(5), AMR_SENERGY(4), AMR_SENERGY(3), AMR_SENERGY(2), +AMR_SENERGY(1), AMR_SENERGY(0) }; /** Modified: amr/amrnbdec.c ============================================================================== --- amr/amrnbdec.c Tue Aug 4 01:03:53 2009 (r4934) +++ amr/amrnbdec.c Tue Aug 4 01:17:45 2009 (r4935) @@ -771,7 +771,8 @@ static void decode_gains(AMRContext *p, mode >= MODE_67 ? gains_high[amr_subframe->p_gain] : mode >= MODE_515 ? gains_low [amr_subframe->p_gain] : // gain index is only coded in subframes 0,2 for MODE_475 - gains_MODE_475[(p->frame.subframe[subframe & 2].p_gain << 1) + + gains_MODE_475[(p->frame.info.subframe[subframe & 2].p_gain + << 1) + (subframe & 1)]; p->pitch_gain[4] = gains[0]; @@ -1108,7 +1109,7 @@ static int amrnb_decode_frame(AVCodecCon lsp2lpc(p->lsp[i], p->lpc[i]); for (subframe = 0; subframe < 4; subframe++) { - const AMRNBSubframe *amr_subframe = &p->frame.subframe[subframe]; + const AMRNBSubframe *amr_subframe = &p->frame.info.subframe[subframe]; decode_pitch_vector(p, amr_subframe, subframe); _______________________________________________ FFmpeg-soc mailing list FFmpeg-soc@mplayerhq.hu https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc