Mercurial > mplayer.hg
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: |