summaryrefslogtreecommitdiff
path: root/src/libffmpeg/libavcodec/rv10.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libffmpeg/libavcodec/rv10.c')
-rw-r--r--src/libffmpeg/libavcodec/rv10.c28
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);