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];