diff options
Diffstat (limited to 'src/libffmpeg/libavcodec/rv10.c')
-rw-r--r-- | src/libffmpeg/libavcodec/rv10.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/libffmpeg/libavcodec/rv10.c b/src/libffmpeg/libavcodec/rv10.c index 11c9734fc..b67ec3974 100644 --- a/src/libffmpeg/libavcodec/rv10.c +++ b/src/libffmpeg/libavcodec/rv10.c @@ -388,6 +388,10 @@ static int rv20_decode_picture_header(MpegEncContext *s) // return -1; } seq= get_bits(&s->gb, 15); + if (s->avctx->sub_id == 0x20201002 && get_bits(&s->gb, 1)){ + av_log(s->avctx, AV_LOG_ERROR, "unknown bit4 set\n"); +// return -1; + } mb_pos= get_bits(&s->gb, av_log2(s->mb_num-1)+1); s->mb_x= mb_pos % s->mb_width; s->mb_y= mb_pos / s->mb_width; @@ -395,7 +399,7 @@ static int rv20_decode_picture_header(MpegEncContext *s) seq= get_bits(&s->gb, 8)*128; mb_pos= ff_h263_decode_mba(s); } -//printf("%d\n", seq); +//av_log(s->avctx, AV_LOG_DEBUG, "%d\n", seq); seq |= s->time &~0x7FFF; if(seq - s->time > 0x4000) seq -= 0x8000; if(seq - s->time < -0x4000) seq += 0x8000; @@ -414,7 +418,10 @@ static int rv20_decode_picture_header(MpegEncContext *s) } } // printf("%d %d %d %d %d\n", seq, (int)s->time, (int)s->last_non_b_time, s->pp_time, s->pb_time); - +/*for(i=0; i<32; i++){ + av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb)); +} +av_log(s->avctx, AV_LOG_DEBUG, "\n");*/ s->no_rounding= get_bits1(&s->gb); s->f_code = 1; @@ -441,6 +448,8 @@ static int rv10_decode_init(AVCodecContext *avctx) MpegEncContext *s = avctx->priv_data; static int done=0; + MPV_decode_defaults(s); + s->avctx= avctx; s->out_format = FMT_H263; s->codec_id= avctx->codec_id; @@ -476,6 +485,7 @@ static int rv10_decode_init(AVCodecContext *avctx) s->low_delay=1; break; case 0x20200002: + case 0x20201002: case 0x30202002: case 0x30203002: s->low_delay=0; @@ -490,8 +500,6 @@ static int rv10_decode_init(AVCodecContext *avctx) h263_decode_init_vlc(s); - s->progressive_sequence=1; - /* init rv vlc */ if (!done) { init_vlc(&rv_dc_lum, DC_VLC_BITS, 256, @@ -556,10 +564,6 @@ static int rv10_decode_packet(AVCodecContext *avctx, return -1; } - if(s->pict_type == B_TYPE){ //FIXME remove after cleaning mottion_val indexing - memset(s->current_picture.motion_val[0], 0, sizeof(int16_t)*2*(s->mb_width*2+2)*(s->mb_height*2+2)); - } - #ifdef DEBUG printf("qscale=%d\n", s->qscale); #endif @@ -592,9 +596,9 @@ static int rv10_decode_packet(AVCodecContext *avctx, s->block_wrap[0]= s->block_wrap[1]= s->block_wrap[2]= - s->block_wrap[3]= s->mb_width*2 + 2; + s->block_wrap[3]= s->b8_stride; s->block_wrap[4]= - s->block_wrap[5]= s->mb_width + 2; + s->block_wrap[5]= s->mb_stride; ff_init_block_index(s); /* decode each macroblock */ @@ -669,10 +673,6 @@ static int rv10_decode_frame(AVCodecContext *avctx, return -1; } - if(s->pict_type == B_TYPE){ //FIXME remove after cleaning mottion_val indexing - memset(s->current_picture.motion_val[0], 0, sizeof(int16_t)*2*(s->mb_width*2+2)*(s->mb_height*2+2)); - } - if(s->mb_y>=s->mb_height){ MPV_frame_end(s); |