Mercurial > sdl-ios-xcode
comparison src/video/ps3/SDL_ps3render.c @ 3153:a16c4ec43631 gsoc2009_ps3
Fixed bug in texture format.
author | Martin Lowinski <martin@goldtopf.org> |
---|---|
date | Mon, 10 Aug 2009 13:28:58 +0000 |
parents | 7f3341cccf42 |
children | cce01ba54174 |
comparison
equal
deleted
inserted
replaced
3152:7f3341cccf42 | 3153:a16c4ec43631 |
---|---|
324 break; | 324 break; |
325 default: | 325 default: |
326 /* We should never get here (caught above) */ | 326 /* We should never get here (caught above) */ |
327 break; | 327 break; |
328 } | 328 } |
329 if ((texture->format & SDL_PIXELFORMAT_YV12 || texture->format & SDL_PIXELFORMAT_IYUV) | |
330 && texture->w % 16 == 0 && texture->h % 16 == 0) { | |
331 } | |
332 } else { | 329 } else { |
333 data->pixels = NULL; | 330 data->pixels = NULL; |
334 data->pixels = SDL_malloc(texture->h * data->pitch); | 331 data->pixels = SDL_malloc(texture->h * data->pitch); |
335 if (!data->pixels) { | 332 if (!data->pixels) { |
336 PS3_DestroyTexture(renderer, texture); | 333 PS3_DestroyTexture(renderer, texture); |
534 deprintf(1, "dstrect->y = %u\n", dstrect->y); | 531 deprintf(1, "dstrect->y = %u\n", dstrect->y); |
535 deprintf(1, "texture->w = %u\n", texture->w); | 532 deprintf(1, "texture->w = %u\n", texture->w); |
536 deprintf(1, "texture->h = %u\n", texture->h); | 533 deprintf(1, "texture->h = %u\n", texture->h); |
537 | 534 |
538 if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) { | 535 if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) { |
539 deprintf(1, "SDL_ISPIXELFORMAT_FOURCC = true\n"); | 536 deprintf(1, "Texture is in a FOURCC format\n"); |
540 if ((texture->format & SDL_PIXELFORMAT_YV12 || texture->format & SDL_PIXELFORMAT_IYUV) | 537 if ((texture->format == SDL_PIXELFORMAT_YV12 || texture->format == SDL_PIXELFORMAT_IYUV) |
541 && texture->w % 8 == 0 && texture->h % 8 == 0 | 538 && texture->w % 8 == 0 && texture->h % 8 == 0 |
542 && dstrect->w % 8 == 0 && dstrect->h % 8 == 0) { | 539 && dstrect->w % 8 == 0 && dstrect->h % 8 == 0) { |
543 deprintf(1, "Use SPE for scaling/converting\n"); | 540 deprintf(1, "Use SPE for scaling/converting\n"); |
544 | 541 |
545 SDL_SW_YUVTexture *swdata = (SDL_SW_YUVTexture *) txdata->yuv; | 542 SDL_SW_YUVTexture *swdata = (SDL_SW_YUVTexture *) txdata->yuv; |
546 Uint8 *lum, *Cr, *Cb; | 543 Uint8 *lum, *Cr, *Cb; |
547 Uint8 *scaler_out = NULL; | 544 Uint8 *scaler_out = NULL; |
548 Uint8 *dstpixels; | 545 Uint8 *dstpixels; |
549 switch (swdata->format) { | 546 switch (texture->format) { |
550 case SDL_PIXELFORMAT_YV12: | 547 case SDL_PIXELFORMAT_YV12: |
551 lum = swdata->planes[0]; | 548 lum = swdata->planes[0]; |
552 Cr = swdata->planes[1]; | 549 Cr = swdata->planes[1]; |
553 Cb = swdata->planes[2]; | 550 Cb = swdata->planes[2]; |
554 break; | 551 break; |
556 lum = swdata->planes[0]; | 553 lum = swdata->planes[0]; |
557 Cr = swdata->planes[2]; | 554 Cr = swdata->planes[2]; |
558 Cb = swdata->planes[1]; | 555 Cb = swdata->planes[1]; |
559 break; | 556 break; |
560 default: | 557 default: |
558 /* We should never get here (caught above) */ | |
561 return -1; | 559 return -1; |
562 } | 560 } |
563 | 561 |
564 if (srcrect->w != dstrect->w || srcrect->h != dstrect->h) { | 562 if (srcrect->w != dstrect->w || srcrect->h != dstrect->h) { |
563 deprintf(1, "We need to scale the texture from %u x %u to %u x %u\n", | |
564 srcrect->w, srcrect->h, dstrect->w, dstrect->h); | |
565 /* Alloc mem for scaled YUV picture */ | 565 /* Alloc mem for scaled YUV picture */ |
566 scaler_out = (Uint8 *) memalign(16, dstrect->w * dstrect->h + ((dstrect->w * dstrect->h) >> 1)); | 566 scaler_out = (Uint8 *) memalign(16, dstrect->w * dstrect->h + ((dstrect->w * dstrect->h) >> 1)); |
567 if (scaler_out == NULL) { | 567 if (scaler_out == NULL) { |
568 SDL_OutOfMemory(); | 568 SDL_OutOfMemory(); |
569 return -1; | 569 return -1; |