Mercurial > libavcodec.hg
comparison h263dec.c @ 333:8aa87f1dfc52 libavcodec
divx 5.01 support
author | michaelni |
---|---|
date | Mon, 22 Apr 2002 12:45:22 +0000 |
parents | ac677a84d5df |
children | c56b45669214 |
comparison
equal
deleted
inserted
replaced
332:207cc56d18f8 | 333:8aa87f1dfc52 |
---|---|
117 if (buf_size == 0) { | 117 if (buf_size == 0) { |
118 *data_size = 0; | 118 *data_size = 0; |
119 return 0; | 119 return 0; |
120 } | 120 } |
121 | 121 |
122 init_get_bits(&s->gb, buf, buf_size); | 122 if(s->bitstream_buffer_size) //divx 5.01+ frame reorder |
123 init_get_bits(&s->gb, s->bitstream_buffer, s->bitstream_buffer_size); | |
124 else | |
125 init_get_bits(&s->gb, buf, buf_size); | |
123 | 126 |
124 /* let's go :-) */ | 127 /* let's go :-) */ |
125 if (s->h263_msmpeg4) { | 128 if (s->h263_msmpeg4) { |
126 ret = msmpeg4_decode_picture_header(s); | 129 ret = msmpeg4_decode_picture_header(s); |
127 } else if (s->h263_pred) { | 130 } else if (s->h263_pred) { |
129 } else if (s->h263_intel) { | 132 } else if (s->h263_intel) { |
130 ret = intel_h263_decode_picture_header(s); | 133 ret = intel_h263_decode_picture_header(s); |
131 } else { | 134 } else { |
132 ret = h263_decode_picture_header(s); | 135 ret = h263_decode_picture_header(s); |
133 } | 136 } |
137 if(ret==FRAME_SKIPED) return 0; | |
134 | 138 |
135 /* After H263 & mpeg4 header decode we have the height, width,*/ | 139 /* After H263 & mpeg4 header decode we have the height, width,*/ |
136 /* and other parameters. So then we could init the picture */ | 140 /* and other parameters. So then we could init the picture */ |
137 /* FIXME: By the way H263 decoder is evolving it should have */ | 141 /* FIXME: By the way H263 decoder is evolving it should have */ |
138 /* an H263EncContext */ | 142 /* an H263EncContext */ |
239 } | 243 } |
240 } | 244 } |
241 | 245 |
242 if (s->h263_msmpeg4 && s->msmpeg4_version<4 && s->pict_type==I_TYPE) | 246 if (s->h263_msmpeg4 && s->msmpeg4_version<4 && s->pict_type==I_TYPE) |
243 if(msmpeg4_decode_ext_header(s, buf_size) < 0) return -1; | 247 if(msmpeg4_decode_ext_header(s, buf_size) < 0) return -1; |
244 | 248 |
249 /* divx 5.01+ bistream reorder stuff */ | |
250 if(s->h263_pred && s->bitstream_buffer_size==0){ | |
251 int current_pos= get_bits_count(&s->gb)/8; | |
252 if( buf_size - current_pos > 5 | |
253 && buf_size - current_pos < BITSTREAM_BUFFER_SIZE){ | |
254 memcpy(s->bitstream_buffer, buf + current_pos, buf_size - current_pos); | |
255 s->bitstream_buffer_size= buf_size - current_pos; | |
256 } | |
257 }else | |
258 s->bitstream_buffer_size=0; | |
259 | |
245 MPV_frame_end(s); | 260 MPV_frame_end(s); |
246 | 261 |
247 if(s->pict_type==B_TYPE || (!s->has_b_frames)){ | 262 if(s->pict_type==B_TYPE || (!s->has_b_frames)){ |
248 pict->data[0] = s->current_picture[0]; | 263 pict->data[0] = s->current_picture[0]; |
249 pict->data[1] = s->current_picture[1]; | 264 pict->data[1] = s->current_picture[1]; |