Commit 6b0eba6e authored by michael's avatar michael

100l for me, iam being to stupid to read the mpeg4 spec / eat stuffing mbs a the end of the picture


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@6942 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent ec237586
...@@ -3188,20 +3188,29 @@ void ff_mpeg4_encode_video_packet_header(MpegEncContext *s) ...@@ -3188,20 +3188,29 @@ void ff_mpeg4_encode_video_packet_header(MpegEncContext *s)
* @return 0 if not * @return 0 if not
*/ */
static inline int mpeg4_is_resync(MpegEncContext *s){ static inline int mpeg4_is_resync(MpegEncContext *s){
const int bits_count= get_bits_count(&s->gb); int bits_count= get_bits_count(&s->gb);
int v= show_bits(&s->gb, 16);
if(s->workaround_bugs&FF_BUG_NO_PADDING){ if(s->workaround_bugs&FF_BUG_NO_PADDING){
return 0; return 0;
} }
while(v<=0xFF){
if(s->pict_type==B_TYPE || (v>>(8-s->pict_type)!=1))
break;
skip_bits(&s->gb, 8+s->pict_type);
bits_count+= 8+s->pict_type;
v= show_bits(&s->gb, 16);
}
if(bits_count + 8 >= s->gb.size_in_bits){ if(bits_count + 8 >= s->gb.size_in_bits){
int v= show_bits(&s->gb, 8); v>>=8;
v|= 0x7F >> (7-(bits_count&7)); v|= 0x7F >> (7-(bits_count&7));
if(v==0x7F) if(v==0x7F)
return 1; return 1;
}else{ }else{
if(show_bits(&s->gb, 16) == ff_mpeg4_resync_prefix[bits_count&7]){ if(v == ff_mpeg4_resync_prefix[bits_count&7]){
int len; int len;
GetBitContext gb= s->gb; GetBitContext gb= s->gb;
...@@ -4520,12 +4529,6 @@ end: ...@@ -4520,12 +4529,6 @@ end:
/* per-MB end of slice check */ /* per-MB end of slice check */
if(s->codec_id==CODEC_ID_MPEG4){ if(s->codec_id==CODEC_ID_MPEG4){
#if 0 //http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_IEC_14496-4_2004_Conformance_Testing/video_conformance/version_1/simple/ERROR.ZIP/mit025.m4v needs this but its unclear if the mpeg4 standard allows this at all (MN)
if(s->pict_type != B_TYPE){
while(show_bits(&s->gb, 9 + (s->pict_type == P_TYPE)) == 1)
skip_bits(&s->gb, 9 + (s->pict_type == P_TYPE));
}
#endif
if(mpeg4_is_resync(s)){ if(mpeg4_is_resync(s)){
const int delta= s->mb_x + 1 == s->mb_width ? 2 : 1; const int delta= s->mb_x + 1 == s->mb_width ? 2 : 1;
if(s->pict_type==B_TYPE && s->next_picture.mbskip_table[xy + delta]) if(s->pict_type==B_TYPE && s->next_picture.mbskip_table[xy + delta])
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment