~ubuntu-branches/ubuntu/jaunty/xvidcap/jaunty-proposed

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/qdm2.c

  • Committer: Bazaar Package Importer
  • Author(s): Lionel Le Folgoc
  • Date: 2008-12-26 00:10:06 UTC
  • mto: This revision was merged to the branch mainline in revision 8.
  • Revision ID: james.westby@ubuntu.com-20081226001006-wd8cuqn8d81smkdp
Tags: upstream-1.1.7
ImportĀ upstreamĀ versionĀ 1.1.7

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
 * You should have received a copy of the GNU Lesser General Public
21
21
 * License along with FFmpeg; if not, write to the Free Software
22
22
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23
 
 *
24
23
 */
25
24
 
26
25
/**
98
97
/**
99
98
 * A node in the subpacket list
100
99
 */
101
 
typedef struct _QDM2SubPNode {
 
100
typedef struct QDM2SubPNode {
102
101
    QDM2SubPacket *packet;      ///< packet
103
 
    struct _QDM2SubPNode *next; ///< pointer to next packet in the list, NULL if leaf node
 
102
    struct QDM2SubPNode *next; ///< pointer to next packet in the list, NULL if leaf node
104
103
} QDM2SubPNode;
105
104
 
106
105
typedef struct {
107
106
    float level;
108
107
    float *samples_im;
109
108
    float *samples_re;
110
 
    float *table;
 
109
    const float *table;
111
110
    int   phase;
112
111
    int   phase_shift;
113
112
    int   duration;
129
128
} QDM2Complex;
130
129
 
131
130
typedef struct {
132
 
    QDM2Complex complex[256 + 1] __attribute__((aligned(16)));
 
131
    DECLARE_ALIGNED_16(QDM2Complex, complex[256 + 1]);
133
132
    float       samples_im[MPA_MAX_CHANNELS][256];
134
133
    float       samples_re[MPA_MAX_CHANNELS][256];
135
134
} QDM2FFT;
177
176
    QDM2FFT fft;
178
177
 
179
178
    /// I/O data
180
 
    uint8_t *compressed_data;
 
179
    const uint8_t *compressed_data;
181
180
    int compressed_size;
182
181
    float output_buffer[1024];
183
182
 
184
183
    /// Synthesis filter
185
 
    MPA_INT synth_buf[MPA_MAX_CHANNELS][512*2] __attribute__((aligned(16)));
 
184
    DECLARE_ALIGNED_16(MPA_INT, synth_buf[MPA_MAX_CHANNELS][512*2]);
186
185
    int synth_buf_offset[MPA_MAX_CHANNELS];
187
 
    int32_t sb_samples[MPA_MAX_CHANNELS][128][SBLIMIT] __attribute__((aligned(16)));
 
186
    DECLARE_ALIGNED_16(int32_t, sb_samples[MPA_MAX_CHANNELS][128][SBLIMIT]);
188
187
 
189
188
    /// Mixed temporary data used in decoding
190
189
    float tone_level[MPA_MAX_CHANNELS][30][64];
229
228
static uint8_t random_dequant_type24[128][3];
230
229
static float noise_samples[128];
231
230
 
232
 
static MPA_INT mpa_window[512] __attribute__((aligned(16)));
 
231
static DECLARE_ALIGNED_16(MPA_INT, mpa_window[512]);
233
232
 
234
233
 
235
234
static void softclip_table_init(void) {
405
404
 *
406
405
 * @return          0 if checksum is OK
407
406
 */
408
 
static uint16_t qdm2_packet_checksum (uint8_t *data, int length, int value) {
 
407
static uint16_t qdm2_packet_checksum (const uint8_t *data, int length, int value) {
409
408
    int i;
410
409
 
411
410
    for (i=0; i < length; i++)
1599
1598
                    tone.level = (q->fft_coefs[j].exp < 0) ? 0.0 : fft_tone_level_table[q->superblocktype_2_3 ? 0 : 1][q->fft_coefs[j].exp & 63];
1600
1599
                    tone.samples_im = &q->fft.samples_im[ch][offset];
1601
1600
                    tone.samples_re = &q->fft.samples_re[ch][offset];
1602
 
                    tone.table = (float*)fft_tone_sample_table[i][q->fft_coefs[j].offset - (offset << four_i)];
 
1601
                    tone.table = fft_tone_sample_table[i][q->fft_coefs[j].offset - (offset << four_i)];
1603
1602
                    tone.phase = 64 * q->fft_coefs[j].phase - (offset << 8) - 128;
1604
1603
                    tone.phase_shift = (2 * q->fft_coefs[j].offset + 1) << (7 - four_i);
1605
1604
                    tone.duration = i;
1693
1692
 * @param q    context
1694
1693
 */
1695
1694
static void qdm2_init(QDM2Context *q) {
1696
 
    static int inited = 0;
 
1695
    static int initialized = 0;
1697
1696
 
1698
 
    if (inited != 0)
 
1697
    if (initialized != 0)
1699
1698
        return;
1700
 
    inited = 1;
 
1699
    initialized = 1;
1701
1700
 
1702
1701
    qdm2_init_vlc();
1703
1702
    ff_mpa_synth_init(mpa_window);
1944
1943
}
1945
1944
 
1946
1945
 
1947
 
static void qdm2_decode (QDM2Context *q, uint8_t *in, int16_t *out)
 
1946
static void qdm2_decode (QDM2Context *q, const uint8_t *in, int16_t *out)
1948
1947
{
1949
1948
    int ch, i;
1950
1949
    const int frame_size = (q->frame_size * q->channels);
2006
2005
 
2007
2006
static int qdm2_decode_frame(AVCodecContext *avctx,
2008
2007
            void *data, int *data_size,
2009
 
            uint8_t *buf, int buf_size)
 
2008
            const uint8_t *buf, int buf_size)
2010
2009
{
2011
2010
    QDM2Context *s = avctx->priv_data;
2012
2011
 
2039
2038
    .init = qdm2_decode_init,
2040
2039
    .close = qdm2_decode_close,
2041
2040
    .decode = qdm2_decode_frame,
 
2041
    .long_name = "QDesign Music Codec 2",
2042
2042
};