www.pudn.com > dm642video-driver.rar > colorbar.c
/* * Copyright 2003 by Texas Instruments Incorporated. * All rights reserved. Property of Texas Instruments Incorporated. * Restricted rights to use, duplicate or disclose this code are * granted through contract. * */ /* "@(#) DDK 1.10.00.21 06-26-03 (ddk-b10)" */ #include#include #include #include #include "colorbar.h" /* static function declaration */ static void generateColorBar(Uint8* y, Uint8* cb, Uint8* cr, Int lineSize); #define WHITE_Y 180 #define WHITE_CB 128 #define WHITE_CR 128 #define YELLOW_Y 162 #define YELLOW_CB 44 #define YELLOW_CR 142 #define CYAN_Y 131 #define CYAN_CB 156 #define CYAN_CR 44 #define GREEN_Y 112 #define GREEN_CB 72 #define GREEN_CR 58 #define MAGENTA_Y 84 #define MAGENTA_CB 184 #define MAGENTA_CR 198 #define RED_Y 65 #define RED_CB 100 #define RED_CR 212 #define BLUE_Y 35 #define BLUE_CB 212 #define BLUE_CR 114 #define BLACK_Y 16 #define BLACK_CB 129 #define BLACK_CR 129 /* defines arrays to hold a line of image for color bar generating */ #pragma DATA_ALIGN(imgLineY, 8); #pragma DATA_ALIGN(imgLineCb, 8); #pragma DATA_ALIGN(imgLineCr, 8); static Uint8 imgLineY[1920 * 3]; static Uint8 imgLineCb[960 * 3]; static Uint8 imgLineCr[960 * 3]; /* * ======== fillFrmBuf ======== * This function fill a frame with color bar of Y/Cb/Cr format. */ void fillFrmBuf(FVID_IFrame* frame, Int lineSz, Int numLines, Int offset ) { Int i; static Int init = 0; Int id; if(!init) { generateColorBar(imgLineY, imgLineCb, imgLineCr, lineSz); CACHE_clean(CACHE_L2ALL, NULL, NULL); init = 1; } for(i = 0; i < numLines; i ++) { DAT_copy(imgLineY + offset * 2, frame->y1 + lineSz * i, lineSz); DAT_copy(imgLineCb + offset, frame->cb1 + (lineSz >> 1) * i, (lineSz >> 1)); id = DAT_copy(imgLineCr + offset, frame->cr1+(lineSz >> 1) * i, (lineSz >> 1)); } DAT_wait(id); } /* * ======== generateColorBar ======== * This function generates a line of color bar with y/cb/cr format. */ static void generateColorBar(Uint8* y, Uint8* cb, Uint8* cr, Int lineSize) { Int i; Int fillSize = lineSize >> 3; Int k; if(fillSize & 0x1) { fillSize ++; } /* white bar */ for(k = 0; k < 3; k ++) { for(i = 0; i<(fillSize >> 1); i++) { y[2 * i] = WHITE_Y; y[2 * i + 1] = WHITE_Y; cb[i] = WHITE_CR; cr[i] = WHITE_CB; y[fillSize * 1 + 2 * i] = YELLOW_Y; y[fillSize * 1 + 2 * i + 1] = YELLOW_Y; cb[(fillSize >> 1) * 1 + i] = YELLOW_CB; cr[(fillSize >> 1) * 1 + i] = YELLOW_CR; y[fillSize * 2 + 2 * i] = CYAN_Y; y[fillSize * 2 + 2 * i + 1] = CYAN_Y; cb[(fillSize >> 1) * 2 + i] = CYAN_CB; cr[(fillSize >> 1) * 2 + i] = CYAN_CR; y[fillSize * 3 + 2 * i] = GREEN_Y; y[fillSize * 3 + 2 * i + 1] = GREEN_Y; cb[(fillSize >> 1) * 3 + i] = GREEN_CB; cr[(fillSize >> 1) * 3 + i] = GREEN_CR; y[fillSize * 4 + 2 * i] = MAGENTA_Y; y[fillSize * 4 + 2 * i + 1] = MAGENTA_Y; cb[(fillSize >> 1) * 4 + i] = MAGENTA_CB; cr[(fillSize >> 1) * 4 + i] = MAGENTA_CR; y[fillSize * 5 + 2 * i] = RED_Y; y[fillSize * 5 + 2 * i + 1] = RED_Y; cb[(fillSize >> 1) * 5 + i] = RED_CB; cr[(fillSize >> 1) * 5 + i] = RED_CR; y[fillSize * 6 + 2 * i] = BLUE_Y; y[fillSize * 6 + 2 * i + 1] = BLUE_Y; cb[(fillSize >> 1) * 6 + i] = BLUE_CB; cr[(fillSize >> 1) * 6 + i] = BLUE_CR; y[fillSize * 7 + 2 * i] = BLACK_Y; y[fillSize * 7 + 2 * i + 1] = BLACK_Y; cb[(fillSize >> 1) * 7 + i] = BLACK_CB; cr[(fillSize >> 1) * 7 + i] = BLACK_CR; } y += lineSize; cb += lineSize >> 1; cr += lineSize >> 1; } }