summaryrefslogtreecommitdiff
path: root/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c
diff options
context:
space:
mode:
authorRob Purchase <shotofadds@rockbox.org>2008-07-15 17:54:58 +0000
committerRob Purchase <shotofadds@rockbox.org>2008-07-15 17:54:58 +0000
commitadb6a00c59371e202edba06d19f950f422b688ee (patch)
treee852e9340d9d3a567467bc8ded6b55b64820b316 /firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c
parentbda60d18d8d2cc48eb39b37665809abb31116b55 (diff)
downloadrockbox-adb6a00c59371e202edba06d19f950f422b688ee.tar.gz
rockbox-adb6a00c59371e202edba06d19f950f422b688ee.zip
Update lcd-as-memframe.S to only rotate YUV data for portrait LCDs (and remove the D2's temporary C implementation). Enable MpegPlayer dithering option for D2.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18055 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c')
-rw-r--r--firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c87
1 files changed, 5 insertions, 82 deletions
diff --git a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c
index 48ae99ddcd..70d823a25b 100644
--- a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c
+++ b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c
@@ -359,88 +359,11 @@ void lcd_yuv_set_options(unsigned options)
359} 359}
360 360
361/* Line write helper function for lcd_yuv_blit. Write two lines of yuv420. */ 361/* Line write helper function for lcd_yuv_blit. Write two lines of yuv420. */
362static void lcd_write_yuv420_lines(fb_data *dst, 362extern void lcd_write_yuv420_lines(fb_data *dst,
363 unsigned char const * const src[3], 363 unsigned char const * const src[3],
364 int width, 364 int width,
365 int stride) 365 int stride);
366{ 366
367 int i = 0;
368 int y;
369 int rv, guv, bu;
370 int cb, cr;
371 int r, g, b;
372 unsigned const char *y_p = src[0];
373
374 for (i = 0; i < width/2; i++)
375 {
376 y_p++;
377
378 /* YCbCr -> RGB conversion */
379 cb = src[1][i] - 128;
380 cr = src[2][i] - 128;
381
382 rv = (cr*101 + 56) >> 9;
383 guv = (128 - cr*51 + cb*24) >> 8;
384 bu = (cb*128 + 256) >> 9;
385
386 y = (*y_p - 16)*74;
387 r = (y >> 9) + rv;
388 g = (y >> 8) + guv;
389 b = (y >> 9) + bu;
390 if (r < 0) r = 0;
391 else if (r > 31) r = 31;
392 if (g < 0) g = 0;
393 else if (g > 63) g = 63;
394 if (b < 0) b = 0;
395 else if (b > 31) b = 31;
396
397 dst[i*2] = (r << 11) | (g << 5) | b;
398
399 /* YCbCr -> RGB conversion */
400 y = (*(y_p+stride) - 16)*74;
401 r = (y >> 9) + rv;
402 g = (y >> 8) + guv;
403 b = (y >> 9) + bu;
404 if (r < 0) r = 0;
405 else if (r > 31) r = 31;
406 if (g < 0) g = 0;
407 else if (g > 63) g = 63;
408 if (b < 0) b = 0;
409 else if (b > 31) b = 31;
410
411 dst[i*2+LCD_FBWIDTH] = (r << 11) | (g << 5) | b;
412
413 y_p++;
414
415 /* YCbCr -> RGB conversion */
416 y = (*y_p - 16)*74;
417 r = (y >> 9) + rv;
418 g = (y >> 8) + guv;
419 b = (y >> 9) + bu;
420 if (r < 0) r = 0;
421 else if (r > 31) r = 31;
422 if (g < 0) g = 0;
423 else if (g > 63) g = 63;
424 if (b < 0) b = 0;
425 else if (b > 31) b = 31;
426
427 dst[i*2+1] = (r << 11) | (g << 5) | b;
428
429 /* YCbCr -> RGB conversion */
430 y = (*(y_p+stride) - 16)*74;
431 r = (y >> 9) + rv;
432 g = (y >> 8) + guv;
433 b = (y >> 9) + bu;
434 if (r < 0) r = 0;
435 else if (r > 31) r = 31;
436 if (g < 0) g = 0;
437 else if (g > 63) g = 63;
438 if (b < 0) b = 0;
439 else if (b > 31) b = 31;
440
441 dst[i*2+1+LCD_FBWIDTH] = (r << 11) | (g << 5) | b;
442 }
443}
444extern void lcd_write_yuv420_lines_odither(fb_data *dst, 367extern void lcd_write_yuv420_lines_odither(fb_data *dst,
445 unsigned char const * const src[3], 368 unsigned char const * const src[3],
446 int width, 369 int width,