mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-11 01:25:25 +00:00
some libmpeg2 style bitstream reader fixes (no dv doesnt yet work with it)
Originally committed as revision 1874 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
cfd06ceb27
commit
924311cd98
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user