comparison libmpcodecs/vd_libmpeg2.c @ 29263:0f1b5b68af32

whitespace cosmetics: Remove all trailing whitespace.
author diego
date Wed, 13 May 2009 02:58:57 +0000
parents 48ba0e64e754
children bbb6ebec87a0
comparison
equal deleted inserted replaced
29262:7d545a6b8aff 29263:0f1b5b68af32
7 7
8 #include "vd_internal.h" 8 #include "vd_internal.h"
9 9
10 //#undef MPEG12_POSTPROC 10 //#undef MPEG12_POSTPROC
11 11
12 static vd_info_t info = 12 static vd_info_t info =
13 { 13 {
14 "libmpeg2 MPEG 1/2 Video decoder", 14 "libmpeg2 MPEG 1/2 Video decoder",
15 "libmpeg2", 15 "libmpeg2",
16 "A'rpi & Fabian Franz", 16 "A'rpi & Fabian Franz",
17 "Aaron & Walken", 17 "Aaron & Walken",
54 info->sequence->height == info->sequence->chroma_height && 54 info->sequence->height == info->sequence->chroma_height &&
55 (*((int*)arg)) == IMGFMT_422P) 55 (*((int*)arg)) == IMGFMT_422P)
56 return CONTROL_TRUE; 56 return CONTROL_TRUE;
57 return CONTROL_FALSE; 57 return CONTROL_FALSE;
58 } 58 }
59 59
60 return CONTROL_UNKNOWN; 60 return CONTROL_UNKNOWN;
61 } 61 }
62 62
63 // init driver 63 // init driver
64 static int init(sh_video_t *sh){ 64 static int init(sh_video_t *sh){
118 for (i=0; i < 3; i++) 118 for (i=0; i < 3; i++)
119 free(context->quant_store[i]); 119 free(context->quant_store[i]);
120 free(sh->context); 120 free(sh->context);
121 } 121 }
122 122
123 static void draw_slice (void * _sh, uint8_t * const * src, unsigned int y){ 123 static void draw_slice (void * _sh, uint8_t * const * src, unsigned int y){
124 sh_video_t* sh = (sh_video_t*) _sh; 124 sh_video_t* sh = (sh_video_t*) _sh;
125 vd_libmpeg2_ctx_t *context = sh->context; 125 vd_libmpeg2_ctx_t *context = sh->context;
126 mpeg2dec_t* mpeg2dec = context->mpeg2dec; 126 mpeg2dec_t* mpeg2dec = context->mpeg2dec;
127 const mpeg2_info_t * info = mpeg2_info (mpeg2dec); 127 const mpeg2_info_t * info = mpeg2_info (mpeg2dec);
128 int stride[MP_MAX_PLANES] = {mpeg2dec->decoder.stride, mpeg2dec->decoder.uv_stride, mpeg2dec->decoder.uv_stride}; 128 int stride[MP_MAX_PLANES] = {mpeg2dec->decoder.stride, mpeg2dec->decoder.uv_stride, mpeg2dec->decoder.uv_stride};
145 int drop_frame, framedrop=flags&3; 145 int drop_frame, framedrop=flags&3;
146 146
147 // MPlayer registers its own draw_slice callback, prevent libmpeg2 from freeing the context 147 // MPlayer registers its own draw_slice callback, prevent libmpeg2 from freeing the context
148 mpeg2dec->decoder.convert=NULL; 148 mpeg2dec->decoder.convert=NULL;
149 mpeg2dec->decoder.convert_id=NULL; 149 mpeg2dec->decoder.convert_id=NULL;
150 150
151 if(len<=0) return NULL; // skipped null frame 151 if(len<=0) return NULL; // skipped null frame
152 152
153 // append extra 'end of frame' code: 153 // append extra 'end of frame' code:
154 ((char*)data+len)[0]=0; 154 ((char*)data+len)[0]=0;
155 ((char*)data+len)[1]=0; 155 ((char*)data+len)[1]=0;
156 ((char*)data+len)[2]=1; 156 ((char*)data+len)[2]=1;
157 ((char*)data+len)[3]=0xff; 157 ((char*)data+len)[3]=0xff;
160 if (mpeg2dec->pending_length) { 160 if (mpeg2dec->pending_length) {
161 mpeg2_buffer (mpeg2dec, mpeg2dec->pending_buffer, mpeg2dec->pending_buffer + mpeg2dec->pending_length); 161 mpeg2_buffer (mpeg2dec, mpeg2dec->pending_buffer, mpeg2dec->pending_buffer + mpeg2dec->pending_length);
162 } else { 162 } else {
163 mpeg2_buffer (mpeg2dec, data, (uint8_t *)data+len); 163 mpeg2_buffer (mpeg2dec, data, (uint8_t *)data+len);
164 } 164 }
165 165
166 while(1){ 166 while(1){
167 int state=mpeg2_parse (mpeg2dec); 167 int state=mpeg2_parse (mpeg2dec);
168 int type, use_callback; 168 int type, use_callback;
169 mp_image_t* mpi_new; 169 mp_image_t* mpi_new;
170 unsigned long pw, ph; 170 unsigned long pw, ph;
171 int imgfmt; 171 int imgfmt;
172 172
173 switch(state){ 173 switch(state){
174 case STATE_BUFFER: 174 case STATE_BUFFER:
175 if (mpeg2dec->pending_length) { 175 if (mpeg2dec->pending_length) {
176 // just finished the pending data, continue with processing of the passed buffer 176 // just finished the pending data, continue with processing of the passed buffer
177 mpeg2dec->pending_length = 0; 177 mpeg2dec->pending_length = 0;
207 context->height = info->sequence->picture_height; 207 context->height = info->sequence->picture_height;
208 context->aspect = sh->aspect; 208 context->aspect = sh->aspect;
209 break; 209 break;
210 case STATE_PICTURE: 210 case STATE_PICTURE:
211 type=info->current_picture->flags&PIC_MASK_CODING_TYPE; 211 type=info->current_picture->flags&PIC_MASK_CODING_TYPE;
212 212
213 drop_frame = framedrop && (mpeg2dec->decoder.coding_type == B_TYPE); 213 drop_frame = framedrop && (mpeg2dec->decoder.coding_type == B_TYPE);
214 drop_frame |= framedrop>=2; // hard drop 214 drop_frame |= framedrop>=2; // hard drop
215 if (drop_frame) { 215 if (drop_frame) {
216 mpeg2_skip(mpeg2dec, 1); 216 mpeg2_skip(mpeg2dec, 1);
217 //printf("Dropping Frame ...\n"); 217 //printf("Dropping Frame ...\n");
266 mpeg2dec->decoder.convert_id=sh; 266 mpeg2dec->decoder.convert_id=sh;
267 } else { 267 } else {
268 mpeg2dec->decoder.convert=NULL; 268 mpeg2dec->decoder.convert=NULL;
269 mpeg2dec->decoder.convert_id=NULL; 269 mpeg2dec->decoder.convert_id=NULL;
270 } 270 }
271 271
272 break; 272 break;
273 case STATE_SLICE: 273 case STATE_SLICE:
274 case STATE_END: 274 case STATE_END:
275 case STATE_INVALID_END: 275 case STATE_INVALID_END:
276 // decoding done: 276 // decoding done: