diff options
author | Mike Melanson <mike@multimedia.cx> | 2005-05-06 04:19:17 +0000 |
---|---|---|
committer | Mike Melanson <mike@multimedia.cx> | 2005-05-06 04:19:17 +0000 |
commit | fd42eb6dec2d911a8480d7b30625b27aeb34ce6c (patch) | |
tree | d72cd780ca54c7816180c2bd717ed86444b4fcd9 /src/libffmpeg/libavcodec/rv10.c | |
parent | 20f83e09f4e2588b5564be12967c56717a937716 (diff) | |
download | xine-lib-fd42eb6dec2d911a8480d7b30625b27aeb34ce6c.tar.gz xine-lib-fd42eb6dec2d911a8480d7b30625b27aeb34ce6c.tar.bz2 |
syncing to FFmpeg libavcodec build 4754
CVS patchset: 7522
CVS date: 2005/05/06 04:19:17
Diffstat (limited to 'src/libffmpeg/libavcodec/rv10.c')
-rw-r--r-- | src/libffmpeg/libavcodec/rv10.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/src/libffmpeg/libavcodec/rv10.c b/src/libffmpeg/libavcodec/rv10.c index 884be9c7c..8183391e9 100644 --- a/src/libffmpeg/libavcodec/rv10.c +++ b/src/libffmpeg/libavcodec/rv10.c @@ -440,21 +440,23 @@ static int rv20_decode_picture_header(MpegEncContext *s) } seq= get_bits(&s->gb, 14)<<1; - if(v>1 || (s->avctx->sub_id < 0x20201002 && v>0)){ - f= get_bits(&s->gb, av_log2(v-1)+1); - } - + if(v) + f= get_bits(&s->gb, av_log2(v)); + if(s->avctx->debug & FF_DEBUG_PICT_INFO){ av_log(s->avctx, AV_LOG_DEBUG, "F %d/%d\n", f, v); } + }else{ + seq= get_bits(&s->gb, 8)*128; + } +// if(s->avctx->sub_id <= 0x20201002){ //0x20201002 definitely needs this + mb_pos= ff_h263_decode_mba(s); +/* }else{ 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; - }else{ - seq= get_bits(&s->gb, 8)*128; - mb_pos= ff_h263_decode_mba(s); - } + }*/ //av_log(s->avctx, AV_LOG_DEBUG, "%d\n", seq); seq |= s->time &~0x7FFF; if(seq - s->time > 0x4000) seq -= 0x8000; @@ -468,8 +470,8 @@ static int rv20_decode_picture_header(MpegEncContext *s) s->time= seq; s->pb_time= s->pp_time - (s->last_non_b_time - s->time); if(s->pp_time <=s->pb_time || s->pp_time <= s->pp_time - s->pb_time || s->pp_time<=0){ - av_log(s->avctx, AV_LOG_DEBUG, "messed up order, seeking?, skiping current b frame\n"); - return FRAME_SKIPED; + av_log(s->avctx, AV_LOG_DEBUG, "messed up order, possible from seeking? skipping current b frame\n"); + return FRAME_SKIPPED; } } } @@ -535,14 +537,17 @@ static int rv10_decode_init(AVCodecContext *avctx) s->h263_long_vectors=0; s->low_delay=1; break; - case 0x20001000: - case 0x20100001: + case 0x20001000: /* real rv20 decoder fail on this id */ + /*case 0x20100001: case 0x20101001: - case 0x20103001: + case 0x20103001:*/ + case 0x20100000 ... 0x2019ffff: s->low_delay=1; break; - case 0x20200002: + /*case 0x20200002: case 0x20201002: + case 0x20203002:*/ + case 0x20200002 ... 0x202fffff: case 0x30202002: case 0x30203002: s->low_delay=0; @@ -555,7 +560,9 @@ static int rv10_decode_init(AVCodecContext *avctx) if(avctx->debug & FF_DEBUG_PICT_INFO){ av_log(avctx, AV_LOG_DEBUG, "ver:%X ver0:%X\n", avctx->sub_id, avctx->extradata_size >= 4 ? ((uint32_t*)avctx->extradata)[0] : -1); } - + + avctx->pix_fmt = PIX_FMT_YUV420P; + if (MPV_common_init(s) < 0) return -1; @@ -571,8 +578,6 @@ static int rv10_decode_init(AVCodecContext *avctx) rv_chrom_code, 2, 2, 1); done = 1; } - - avctx->pix_fmt = PIX_FMT_YUV420P; return 0; } @@ -664,7 +669,6 @@ static int rv10_decode_packet(AVCodecContext *avctx, printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y); #endif - s->dsp.clear_blocks(s->block[0]); s->mv_dir = MV_DIR_FORWARD; s->mv_type = MV_TYPE_16X16; ret=ff_h263_decode_mb(s, s->block); |