-rw-r--r-- | noncore/multimedia/opieplayer2/nullvideo.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/noncore/multimedia/opieplayer2/nullvideo.c b/noncore/multimedia/opieplayer2/nullvideo.c index 5ee8d5d..79337c2 100644 --- a/noncore/multimedia/opieplayer2/nullvideo.c +++ b/noncore/multimedia/opieplayer2/nullvideo.c | |||
@@ -180,12 +180,13 @@ static void null_compute_ideal_size (null_driver_t *this, opie_frame_t *frame) { | |||
180 | image_ratio = (double) frame->width / (double) frame->height; | 180 | image_ratio = (double) frame->width / (double) frame->height; |
181 | 181 | ||
182 | switch (frame->user_ratio) { | 182 | switch (frame->user_ratio) { |
183 | case ASPECT_AUTO: | 183 | case ASPECT_AUTO: |
184 | switch (frame->ratio_code) { | 184 | switch (frame->ratio_code) { |
185 | case XINE_ASPECT_RATIO_ANAMORPHIC: /* anamorphic */ | 185 | case XINE_ASPECT_RATIO_ANAMORPHIC: /* anamorphic */ |
186 | case XINE_ASPECT_RATIO_PAN_SCAN: | ||
186 | desired_ratio = 16.0 /9.0; | 187 | desired_ratio = 16.0 /9.0; |
187 | break; | 188 | break; |
188 | case XINE_ASPECT_RATIO_211_1: /* 2.11:1 */ | 189 | case XINE_ASPECT_RATIO_211_1: /* 2.11:1 */ |
189 | desired_ratio = 2.11/1.0; | 190 | desired_ratio = 2.11/1.0; |
190 | break; | 191 | break; |
191 | case XINE_ASPECT_RATIO_SQUARE: /* square pels */ | 192 | case XINE_ASPECT_RATIO_SQUARE: /* square pels */ |
@@ -200,13 +201,13 @@ static void null_compute_ideal_size (null_driver_t *this, opie_frame_t *frame) { | |||
200 | case XINE_ASPECT_RATIO_4_3: /* 4:3 */ | 201 | case XINE_ASPECT_RATIO_4_3: /* 4:3 */ |
201 | desired_ratio = 4.0 / 3.0; | 202 | desired_ratio = 4.0 / 3.0; |
202 | break; | 203 | break; |
203 | } | 204 | } |
204 | break; | 205 | break; |
205 | case ASPECT_ANAMORPHIC: | 206 | case ASPECT_ANAMORPHIC: |
206 | desired_ratio = 16.0 / 9.0; | 207 | desired_ratio = 16.0 / 9.0; |
207 | break; | 208 | break; |
208 | case ASPECT_DVB: | 209 | case ASPECT_DVB: |
209 | desired_ratio = 2.0 / 1.0; | 210 | desired_ratio = 2.0 / 1.0; |
210 | break; | 211 | break; |
211 | case ASPECT_SQUARE: | 212 | case ASPECT_SQUARE: |
212 | desired_ratio = image_ratio; | 213 | desired_ratio = image_ratio; |
@@ -331,23 +332,26 @@ static void null_update_frame_format( vo_driver_t* self, vo_frame_t* img, | |||
331 | } | 332 | } |
332 | printf("after freeing\n"); | 333 | printf("after freeing\n"); |
333 | frame->data = xine_xmalloc (frame->output_width * frame->output_height * | 334 | frame->data = xine_xmalloc (frame->output_width * frame->output_height * |
334 | this->bytes_per_pixel ); | 335 | this->bytes_per_pixel ); |
335 | 336 | ||
336 | if( format == IMGFMT_YV12 ) { | 337 | if( format == IMGFMT_YV12 ) { |
337 | int image_size = width * height; /* cast ouch*/ | 338 | frame->frame.pitches[0] = 8*((width + 7) / 8); |
338 | frame->frame.base[0] = xine_xmalloc_aligned(16, image_size, | 339 | frame->frame.pitches[1] = 8*((width + 15) / 16); |
339 | (void **)&frame->chunk[0] ); | 340 | frame->frame.pitches[2] = 8*((width + 15) / 16); |
340 | frame->frame.base[1] = xine_xmalloc_aligned(16, image_size, | 341 | frame->frame.base[0] = xine_xmalloc_aligned (16, frame->frame.pitches[0] * height,(void **)&frame->chunk[0]); |
341 | (void **)&frame->chunk[1] ); | 342 | frame->frame.base[1] = xine_xmalloc_aligned (16, frame->frame.pitches[1] * ((height+ 1)/2), (void **)&frame->chunk[1]); |
342 | frame->frame.base[2] = xine_xmalloc_aligned(16, image_size, | 343 | frame->frame.base[2] = xine_xmalloc_aligned (16, frame->frame.pitches[2] * ((height+ 1)/2), (void **)&frame->chunk[2]); |
343 | (void **)&frame->chunk[2] ); | 344 | |
344 | }else{ | 345 | }else{ |
345 | int image_size = width * height; /* cast ouch*/ | 346 | frame->frame.pitches[0] = 8*((width + 3) / 4); |
346 | frame->frame.base[0] = xine_xmalloc_aligned(16, image_size, | 347 | frame->frame.pitches[1] = 8*((width + 3) / 4); |
347 | (void **)&frame->chunk[0] ); | 348 | frame->frame.pitches[2] = 8*((width + 3) / 4); |
349 | |||
350 | frame->frame.base[0] = xine_xmalloc_aligned (16, frame->frame.pitches[0] * height, | ||
351 | (void **)&frame->chunk[0]); | ||
348 | frame->chunk[1] = NULL; | 352 | frame->chunk[1] = NULL; |
349 | frame->chunk[2] = NULL; | 353 | frame->chunk[2] = NULL; |
350 | } | 354 | } |
351 | 355 | ||
352 | frame->format = format; | 356 | frame->format = format; |
353 | frame->width = width; | 357 | frame->width = width; |
@@ -365,25 +369,25 @@ static void null_update_frame_format( vo_driver_t* self, vo_frame_t* img, | |||
365 | switch (flags) { | 369 | switch (flags) { |
366 | case VO_TOP_FIELD: | 370 | case VO_TOP_FIELD: |
367 | case VO_BOTTOM_FIELD: | 371 | case VO_BOTTOM_FIELD: |
368 | frame->yuv2rgb->configure (frame->yuv2rgb, | 372 | frame->yuv2rgb->configure (frame->yuv2rgb, |
369 | frame->width, | 373 | frame->width, |
370 | 16, | 374 | 16, |
371 | frame->width*2, | 375 | 2*frame->frame.pitches[0], |
372 | frame->width, | 376 | 2*frame->frame.pitches[1], |
373 | frame->output_width, | 377 | frame->output_width, |
374 | frame->stripe_height, | 378 | frame->stripe_height, |
375 | frame->bytes_per_line*2); | 379 | frame->bytes_per_line*2); |
376 | frame->yuv_stride = frame->bytes_per_line*2; | 380 | frame->yuv_stride = frame->bytes_per_line*2; |
377 | break; | 381 | break; |
378 | case VO_BOTH_FIELDS: | 382 | case VO_BOTH_FIELDS: |
379 | frame->yuv2rgb->configure (frame->yuv2rgb, | 383 | frame->yuv2rgb->configure (frame->yuv2rgb, |
380 | frame->width, | 384 | frame->width, |
381 | 16, | 385 | 16, |
382 | frame->width, | 386 | frame->frame.pitches[0], |
383 | frame->width/2, | 387 | frame->frame.pitches[1], |
384 | frame->output_width, | 388 | frame->output_width, |
385 | frame->stripe_height, | 389 | frame->stripe_height, |
386 | frame->bytes_per_line); | 390 | frame->bytes_per_line); |
387 | frame->yuv_stride = frame->bytes_per_line; | 391 | frame->yuv_stride = frame->bytes_per_line; |
388 | break; | 392 | break; |
389 | } | 393 | } |