Index: patched-ffmpeg-mt/libavcodec/h263dec.c |
=================================================================== |
--- patched-ffmpeg-mt/libavcodec/h263dec.c (revision 41250) |
+++ patched-ffmpeg-mt/libavcodec/h263dec.c (working copy) |
@@ -290,7 +290,7 @@ |
} |
if(s->workaround_bugs&FF_BUG_AUTODETECT){ |
- if(s->padding_bug_score > -2 && !s->data_partitioning /*&& (s->divx_version || !s->resync_marker)*/) |
+ if(s->padding_bug_score > -2 && !s->data_partitioning /*&& (s->divx_version>=0 || !s->resync_marker)*/) |
s->workaround_bugs |= FF_BUG_NO_PADDING; |
else |
s->workaround_bugs &= ~FF_BUG_NO_PADDING; |
@@ -428,26 +428,26 @@ |
avctx->has_b_frames= !s->low_delay; |
- if(s->xvid_build==0 && s->divx_version==0 && s->lavc_build==0){ |
+ if(s->xvid_build==-1 && s->divx_version==-1 && s->lavc_build==-1){ |
if(s->stream_codec_tag == AV_RL32("XVID") || |
s->codec_tag == AV_RL32("XVID") || s->codec_tag == AV_RL32("XVIX") || |
s->codec_tag == AV_RL32("RMP4")) |
- s->xvid_build= -1; |
+ s->xvid_build= 0; |
#if 0 |
if(s->codec_tag == AV_RL32("DIVX") && s->vo_type==0 && s->vol_control_parameters==1 |
&& s->padding_bug_score > 0 && s->low_delay) // XVID with modified fourcc |
- s->xvid_build= -1; |
+ s->xvid_build= 0; |
#endif |
} |
- if(s->xvid_build==0 && s->divx_version==0 && s->lavc_build==0){ |
+ if(s->xvid_build==-1 && s->divx_version==-1 && s->lavc_build==-1){ |
if(s->codec_tag == AV_RL32("DIVX") && s->vo_type==0 && s->vol_control_parameters==0) |
s->divx_version= 400; //divx 4 |
} |
- if(s->xvid_build && s->divx_version){ |
+ if(s->xvid_build>=0 && s->divx_version>=0){ |
s->divx_version= |
- s->divx_build= 0; |
+ s->divx_build= -1; |
} |
if(s->workaround_bugs&FF_BUG_AUTODETECT){ |
@@ -466,16 +466,16 @@ |
s->workaround_bugs|= FF_BUG_QPEL_CHROMA2; |
} |
- if(s->xvid_build && s->xvid_build<=3) |
+ if(s->xvid_build<=3U) |
s->padding_bug_score= 256*256*256*64; |
- if(s->xvid_build && s->xvid_build<=1) |
+ if(s->xvid_build<=1U) |
s->workaround_bugs|= FF_BUG_QPEL_CHROMA; |
- if(s->xvid_build && s->xvid_build<=12) |
+ if(s->xvid_build<=12U) |
s->workaround_bugs|= FF_BUG_EDGE; |
- if(s->xvid_build && s->xvid_build<=32) |
+ if(s->xvid_build<=32U) |
s->workaround_bugs|= FF_BUG_DC_CLIP; |
#define SET_QPEL_FUNC(postfix1, postfix2) \ |
@@ -483,30 +483,30 @@ |
s->dsp.put_no_rnd_ ## postfix1 = ff_put_no_rnd_ ## postfix2;\ |
s->dsp.avg_ ## postfix1 = ff_avg_ ## postfix2; |
- if(s->lavc_build && s->lavc_build<4653) |
+ if(s->lavc_build<4653U) |
s->workaround_bugs|= FF_BUG_STD_QPEL; |
- if(s->lavc_build && s->lavc_build<4655) |
+ if(s->lavc_build<4655U) |
s->workaround_bugs|= FF_BUG_DIRECT_BLOCKSIZE; |
- if(s->lavc_build && s->lavc_build<4670){ |
+ if(s->lavc_build<4670U){ |
s->workaround_bugs|= FF_BUG_EDGE; |
} |
- if(s->lavc_build && s->lavc_build<=4712) |
+ if(s->lavc_build<=4712U) |
s->workaround_bugs|= FF_BUG_DC_CLIP; |
- if(s->divx_version) |
+ if(s->divx_version>=0) |
s->workaround_bugs|= FF_BUG_DIRECT_BLOCKSIZE; |
//printf("padding_bug_score: %d\n", s->padding_bug_score); |
if(s->divx_version==501 && s->divx_build==20020416) |
s->padding_bug_score= 256*256*256*64; |
- if(s->divx_version && s->divx_version<500){ |
+ if(s->divx_version<500U){ |
s->workaround_bugs|= FF_BUG_EDGE; |
} |
- if(s->divx_version) |
+ if(s->divx_version>=0) |
s->workaround_bugs|= FF_BUG_HPEL_CHROMA; |
#if 0 |
if(s->divx_version==500) |
@@ -515,11 +515,11 @@ |
/* very ugly XVID padding bug detection FIXME/XXX solve this differently |
* Let us hope this at least works. |
*/ |
- if( s->resync_marker==0 && s->data_partitioning==0 && s->divx_version==0 |
+ if( s->resync_marker==0 && s->data_partitioning==0 && s->divx_version==-1 |
&& s->codec_id==CODEC_ID_MPEG4 && s->vo_type==0) |
s->workaround_bugs|= FF_BUG_NO_PADDING; |
- if(s->lavc_build && s->lavc_build<4609) //FIXME not sure about the version num but a 4609 file seems ok |
+ if(s->lavc_build<4609U) //FIXME not sure about the version num but a 4609 file seems ok |
s->workaround_bugs|= FF_BUG_NO_PADDING; |
#endif |
} |
@@ -554,7 +554,7 @@ |
#endif |
#if HAVE_MMX |
- if(s->codec_id == CODEC_ID_MPEG4 && s->xvid_build && avctx->idct_algo == FF_IDCT_AUTO && (mm_flags & FF_MM_MMX)){ |
+ if(s->codec_id == CODEC_ID_MPEG4 && s->xvid_build>=0 && avctx->idct_algo == FF_IDCT_AUTO && (mm_flags & FF_MM_MMX)){ |
avctx->idct_algo= FF_IDCT_XVIDMMX; |
avctx->coded_width= 0; // force reinit |
// dsputil_init(&s->dsp, avctx); |
@@ -623,12 +623,12 @@ |
if (!s->divx_packed) ff_thread_finish_setup(avctx); |
if (CONFIG_MPEG4_VDPAU_DECODER && (s->avctx->codec->capabilities & CODEC_CAP_HWACCEL_VDPAU)) { |
- ff_vdpau_mpeg4_decode_picture(s, buf, buf_size); |
+ ff_vdpau_mpeg4_decode_picture(s, s->gb.buffer, s->gb.buffer_end - s->gb.buffer); |
goto frame_end; |
} |
if (avctx->hwaccel) { |
- if (avctx->hwaccel->start_frame(avctx, buf, buf_size) < 0) |
+ if (avctx->hwaccel->start_frame(avctx, s->gb.buffer, s->gb.buffer_end - s->gb.buffer) < 0) |
return -1; |
} |
@@ -668,6 +668,7 @@ |
} |
assert(s->bitstream_buffer_size==0); |
+frame_end: |
/* divx 5.01+ bistream reorder stuff */ |
if(s->codec_id==CODEC_ID_MPEG4 && s->divx_packed){ |
int current_pos= get_bits_count(&s->gb)>>3; |
@@ -682,7 +683,7 @@ |
} |
} |
} |
- if(s->gb.buffer == s->bitstream_buffer && buf_size>7 && s->xvid_build){ //xvid style |
+ if(s->gb.buffer == s->bitstream_buffer && buf_size>7 && s->xvid_build>=0){ //xvid style |
startcode_found=1; |
current_pos=0; |
} |
@@ -702,7 +703,6 @@ |
intrax8_decoded: |
ff_er_frame_end(s); |
-frame_end: |
if (avctx->hwaccel) { |
if (avctx->hwaccel->end_frame(avctx) < 0) |
return -1; |