Mercurial > libavcodec.hg
comparison dca.c @ 6463:9f397992ddff libavcodec
Don't use unchecked data from the bitstream.
author | banan |
---|---|
date | Thu, 06 Mar 2008 14:22:02 +0000 |
parents | 8e63d869a904 |
children | 48759bfbd073 |
comparison
equal
deleted
inserted
replaced
6462:745a4216b352 | 6463:9f397992ddff |
---|---|
123 int surround_sum; ///< surround sum/difference flag | 123 int surround_sum; ///< surround sum/difference flag |
124 int dialog_norm; ///< dialog normalisation parameter | 124 int dialog_norm; ///< dialog normalisation parameter |
125 | 125 |
126 /* Primary audio coding header */ | 126 /* Primary audio coding header */ |
127 int subframes; ///< number of subframes | 127 int subframes; ///< number of subframes |
128 int total_channels; ///< number of channels including extensions | |
128 int prim_channels; ///< number of primary audio channels | 129 int prim_channels; ///< number of primary audio channels |
129 int subband_activity[DCA_PRIM_CHANNELS_MAX]; ///< subband activity count | 130 int subband_activity[DCA_PRIM_CHANNELS_MAX]; ///< subband activity count |
130 int vq_start_subband[DCA_PRIM_CHANNELS_MAX]; ///< high frequency vq start subband | 131 int vq_start_subband[DCA_PRIM_CHANNELS_MAX]; ///< high frequency vq start subband |
131 int joint_intensity[DCA_PRIM_CHANNELS_MAX]; ///< joint intensity coding index | 132 int joint_intensity[DCA_PRIM_CHANNELS_MAX]; ///< joint intensity coding index |
132 int transient_huffman[DCA_PRIM_CHANNELS_MAX]; ///< transient mode code book | 133 int transient_huffman[DCA_PRIM_CHANNELS_MAX]; ///< transient mode code book |
318 av_log(s->avctx, AV_LOG_DEBUG, "\n"); | 319 av_log(s->avctx, AV_LOG_DEBUG, "\n"); |
319 #endif | 320 #endif |
320 | 321 |
321 /* Primary audio coding header */ | 322 /* Primary audio coding header */ |
322 s->subframes = get_bits(&s->gb, 4) + 1; | 323 s->subframes = get_bits(&s->gb, 4) + 1; |
323 s->prim_channels = get_bits(&s->gb, 3) + 1; | 324 s->total_channels = get_bits(&s->gb, 3) + 1; |
325 s->prim_channels = s->total_channels; | |
326 if (s->prim_channels > DCA_PRIM_CHANNELS_MAX) | |
327 s->prim_channels = DCA_PRIM_CHANNELS_MAX; /* We only support DTS core */ | |
324 | 328 |
325 | 329 |
326 for (i = 0; i < s->prim_channels; i++) { | 330 for (i = 0; i < s->prim_channels; i++) { |
327 s->subband_activity[i] = get_bits(&s->gb, 5) + 2; | 331 s->subband_activity[i] = get_bits(&s->gb, 5) + 2; |
328 if (s->subband_activity[i] > DCA_SUBBANDS) | 332 if (s->subband_activity[i] > DCA_SUBBANDS) |
425 for (k = 0; k < s->vq_start_subband[j]; k++) { | 429 for (k = 0; k < s->vq_start_subband[j]; k++) { |
426 if (s->bitalloc_huffman[j] == 6) | 430 if (s->bitalloc_huffman[j] == 6) |
427 s->bitalloc[j][k] = get_bits(&s->gb, 5); | 431 s->bitalloc[j][k] = get_bits(&s->gb, 5); |
428 else if (s->bitalloc_huffman[j] == 5) | 432 else if (s->bitalloc_huffman[j] == 5) |
429 s->bitalloc[j][k] = get_bits(&s->gb, 4); | 433 s->bitalloc[j][k] = get_bits(&s->gb, 4); |
430 else { | 434 else if (s->bitalloc_huffman[j] == 7) { |
435 av_log(s->avctx, AV_LOG_ERROR, | |
436 "Invalid bit allocation index\n"); | |
437 return -1; | |
438 } else { | |
431 s->bitalloc[j][k] = | 439 s->bitalloc[j][k] = |
432 get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]); | 440 get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]); |
433 } | 441 } |
434 | 442 |
435 if (s->bitalloc[j][k] > 26) { | 443 if (s->bitalloc[j][k] > 26) { |