|
|
@ -157,7 +157,7 @@ static const uint16_t block_sizes[6] = { |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
#ifndef ALT_BITSTREAM_READER |
|
|
|
#ifndef ALT_BITSTREAM_READER |
|
|
|
#error only works with ALT_BITSTREAM_READER |
|
|
|
#warning only works with ALT_BITSTREAM_READER |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
/* decode ac coefs */ |
|
|
|
/* decode ac coefs */ |
|
|
@ -171,7 +171,10 @@ static void dv_decode_ac(DVVideoDecodeContext *s, |
|
|
|
int pos = mb->pos; |
|
|
|
int pos = mb->pos; |
|
|
|
int level, pos1, sign, run; |
|
|
|
int level, pos1, sign, run; |
|
|
|
int partial_bit_count; |
|
|
|
int partial_bit_count; |
|
|
|
|
|
|
|
#ifndef ALT_BITSTREAM_READER //FIXME
|
|
|
|
|
|
|
|
int re_index=0;
|
|
|
|
|
|
|
|
int re1_index=0; |
|
|
|
|
|
|
|
#endif |
|
|
|
OPEN_READER(re, &s->gb); |
|
|
|
OPEN_READER(re, &s->gb); |
|
|
|
|
|
|
|
|
|
|
|
#ifdef VLC_DEBUG |
|
|
|
#ifdef VLC_DEBUG |
|
|
@ -364,7 +367,7 @@ static inline void dv_decode_video_segment(DVVideoDecodeContext *s, |
|
|
|
|
|
|
|
|
|
|
|
/* write the remaining bits in a new buffer only if the
|
|
|
|
/* write the remaining bits in a new buffer only if the
|
|
|
|
block is finished */ |
|
|
|
block is finished */ |
|
|
|
bits_left = last_index - s->gb.index; |
|
|
|
bits_left = last_index - get_bits_count(&s->gb); |
|
|
|
if (mb->eob_reached) { |
|
|
|
if (mb->eob_reached) { |
|
|
|
mb->partial_bit_count = 0; |
|
|
|
mb->partial_bit_count = 0; |
|
|
|
mb_bit_count += bits_left; |
|
|
|
mb_bit_count += bits_left; |
|
|
@ -389,13 +392,13 @@ static inline void dv_decode_video_segment(DVVideoDecodeContext *s, |
|
|
|
mb = mb1; |
|
|
|
mb = mb1; |
|
|
|
init_get_bits(&s->gb, mb_bit_buffer, 80*8); |
|
|
|
init_get_bits(&s->gb, mb_bit_buffer, 80*8); |
|
|
|
for(j = 0;j < 6; j++) { |
|
|
|
for(j = 0;j < 6; j++) { |
|
|
|
if (!mb->eob_reached && s->gb.index < mb_bit_count) { |
|
|
|
if (!mb->eob_reached && get_bits_count(&s->gb) < mb_bit_count) { |
|
|
|
dv_decode_ac(s, mb, block, mb_bit_count); |
|
|
|
dv_decode_ac(s, mb, block, mb_bit_count); |
|
|
|
/* if still not finished, no need to parse other blocks */ |
|
|
|
/* if still not finished, no need to parse other blocks */ |
|
|
|
if (!mb->eob_reached) { |
|
|
|
if (!mb->eob_reached) { |
|
|
|
/* we could not parse the current AC coefficient,
|
|
|
|
/* we could not parse the current AC coefficient,
|
|
|
|
so we add the remaining bytes */ |
|
|
|
so we add the remaining bytes */ |
|
|
|
bits_left = mb_bit_count - s->gb.index; |
|
|
|
bits_left = mb_bit_count - get_bits_count(&s->gb); |
|
|
|
if (bits_left > 0) { |
|
|
|
if (bits_left > 0) { |
|
|
|
mb->partial_bit_count += bits_left; |
|
|
|
mb->partial_bit_count += bits_left; |
|
|
|
mb->partial_bit_buffer =
|
|
|
|
mb->partial_bit_buffer =
|
|
|
@ -410,7 +413,7 @@ static inline void dv_decode_video_segment(DVVideoDecodeContext *s, |
|
|
|
} |
|
|
|
} |
|
|
|
/* all blocks are finished, so the extra bytes can be used at
|
|
|
|
/* all blocks are finished, so the extra bytes can be used at
|
|
|
|
the video segment level */ |
|
|
|
the video segment level */ |
|
|
|
bits_left = mb_bit_count - s->gb.index; |
|
|
|
bits_left = mb_bit_count - get_bits_count(&s->gb); |
|
|
|
vs_bit_count += bits_left; |
|
|
|
vs_bit_count += bits_left; |
|
|
|
bit_copy(&vs_pb, &s->gb, bits_left); |
|
|
|
bit_copy(&vs_pb, &s->gb, bits_left); |
|
|
|
next_mb: |
|
|
|
next_mb: |
|
|
|