我采用ov7725作为视屏数据采集,采用一个2.2寸屏来显示。其中ov7725采集视频分辨率为320*240,2.2寸显示屏分辨率为240*320。ov7725采集的数据是yuv422的,而显示屏是RGB565的,将摄像头采集回来的数据的部分图像做彩色空间转换,用于LCD的显示。我的做法是,建立一个表以Y为下标对应到相应的RGB灰度,表的形式如下: volatile unsigned short Y2Gray[] = {5 P! n7 {3 ?6 W# c, T; C/ W" p, m, q
0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0020,0x0020,$ ^2 \5 m- H: W+ S+ G
0x0841,0x0841,0x0841,0x0841,0x0861,0x0861,0x0861,0x0861,( H" G, W; s# |- n. c
0x1082,0x1082,0x1082,0x1082,0x10a2,0x10a2,0x10a2,0x10a2,
% i+ E/ b& N% v5 q/ y.... 0xffdf,0xffdf,0xffdf,0xffdf,0xffff,0xffff,0xffff,0xffff, }; 色彩空间转换的部分如下: volatile unsigned char *videoTopY, *videoTopC;' J! r& x! g0 v4 s
volatile unsigned short *videoTopRgb1, *videoTopRgb2; for(i = 0; i < 240; i++)
$ r1 G4 @, R5 o6 h! E3 V{
1 Z- N/ @) F7 e; u$ f) z: t; d for(j = 0; j < 240; j+=8), _# N l" e& h- n+ v. a4 O
{
3 z$ M$ p0 A5 d" d index = i * 240+ j;
% n* `* z0 z- l7 D U; | Y0 H+ B index1 = i * 320+ j;* y0 o' J+ O- X0 I/ P2 J
videoTopRgb1[index] = Y2Gray[videoTopY[index1 * 2]];
$ s* j4 i: R) ~ Z videoTopRgb1[index + 1] =Y2Gray[videoTopY[(index1 + 1) * 2]];
+ i) _) r3 N* N" \+ V) B videoTopRgb1[index + 2] = Y2Gray[videoTopY[(index1 + 2) * 2]];
6 }1 j+ W7 A" `* b videoTopRgb1[index + 3] = Y2Gray[videoTopY[(index1 + 3) * 2]];8 _' p" @8 ]- r9 ?3 _2 _$ W S
videoTopRgb1[index + 4] = Y2Gray[videoTopY[(index1 + 4) * 2]];4 l* h* a( y! B/ W: e& y+ d; l4 I
videoTopRgb1[index + 5] = Y2Gray[videoTopY[(index1 + 5) * 2]];, m& }2 d: ]! s& P* M# Z
videoTopRgb1[index + 6] = Y2Gray[videoTopY[(index1 + 6) * 2]];
& V9 T5 l8 b+ c# {. j4 U4 M. Z videoTopRgb1[index + 7] = Y2Gray[videoTopY[(index1 + 7) * 2]]; }5 J& l" ]1 K4 A1 M# |% `
) T! y5 |6 ]( P7 f4 E1 U
} 我用的是双buffer显示的。 问题是图像只会显示一半。 使用CCS5.5将DSP内存中的数据保存,放到matlab中显示如下: 我的摄像头采集回来的数据是这样的(图一) 小黑点忽略yuv 理论上处理完成之后应该是这个样子的(图二) 但是dsp处理完数据后显示buff里的数据是这样的(图三,图四): $ I, w' D) a/ E k/ \ O
程序运行过过程中图三,图四是交替显示的。 请问这是为什么?我开了L1cache,cache inv和wb都用了,也不起作用。 请TL的工程师帮忙解决一下,困扰了两周了,不胜感激。 % h1 h' P/ W, F! m
3 A7 t: A- \5 G) S0 ^, E* R- k |