我采用ov7725作为视屏数据采集,采用一个2.2寸屏来显示。其中ov7725采集视频分辨率为320*240,2.2寸显示屏分辨率为240*320。ov7725采集的数据是yuv422的,而显示屏是RGB565的,将摄像头采集回来的数据的部分图像做彩色空间转换,用于LCD的显示。我的做法是,建立一个表以Y为下标对应到相应的RGB灰度,表的形式如下: volatile unsigned short Y2Gray[] = { w; B' R7 D! @9 a( k5 C
0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0020,0x0020,( Z- n: K8 M* d& D3 p9 D
0x0841,0x0841,0x0841,0x0841,0x0861,0x0861,0x0861,0x0861,7 h4 s- p. g% w7 d* W4 F
0x1082,0x1082,0x1082,0x1082,0x10a2,0x10a2,0x10a2,0x10a2,
3 E* {3 e) I. B3 t. p4 V8 y.... 0xffdf,0xffdf,0xffdf,0xffdf,0xffff,0xffff,0xffff,0xffff, }; 色彩空间转换的部分如下: volatile unsigned char *videoTopY, *videoTopC;# Z# A6 b: \ z, F6 Z
volatile unsigned short *videoTopRgb1, *videoTopRgb2; for(i = 0; i < 240; i++)$ `' ? g4 T2 \" t+ s) E2 |
{
?/ h' z0 u9 N% @2 C2 k# \! w for(j = 0; j < 240; j+=8)
( g1 D3 d" k0 `8 ~2 @" Y. C {4 i# ]: |/ q" G. I) H' E
index = i * 240+ j;6 z4 u6 f& E6 i0 ]+ _+ r" f
index1 = i * 320+ j;
' \5 K" }2 ]* l videoTopRgb1[index] = Y2Gray[videoTopY[index1 * 2]];
2 t# S; \( }, J' ^# P. r n. m videoTopRgb1[index + 1] =Y2Gray[videoTopY[(index1 + 1) * 2]];& o5 W/ ~1 u7 D6 e" \! }4 O
videoTopRgb1[index + 2] = Y2Gray[videoTopY[(index1 + 2) * 2]];
2 a% c+ |$ B/ O; V7 l! | videoTopRgb1[index + 3] = Y2Gray[videoTopY[(index1 + 3) * 2]];0 t- Y* e q& F! D8 ^9 q
videoTopRgb1[index + 4] = Y2Gray[videoTopY[(index1 + 4) * 2]];
m, l* s7 B# {8 ?6 ]9 \" t videoTopRgb1[index + 5] = Y2Gray[videoTopY[(index1 + 5) * 2]];/ R+ L7 e t" o1 \7 r b/ G( T& J# U
videoTopRgb1[index + 6] = Y2Gray[videoTopY[(index1 + 6) * 2]];8 j. e0 E8 J) n' F
videoTopRgb1[index + 7] = Y2Gray[videoTopY[(index1 + 7) * 2]]; }
' ]: e. J, P5 k" G9 c) \
) N' g) b: T2 r} 我用的是双buffer显示的。 问题是图像只会显示一半。 使用CCS5.5将DSP内存中的数据保存,放到matlab中显示如下: 我的摄像头采集回来的数据是这样的(图一) 小黑点忽略yuv 理论上处理完成之后应该是这个样子的(图二) 但是dsp处理完数据后显示buff里的数据是这样的(图三,图四): 7 W5 e" q5 U* s \4 K" L
程序运行过过程中图三,图四是交替显示的。 请问这是为什么?我开了L1cache,cache inv和wb都用了,也不起作用。 请TL的工程师帮忙解决一下,困扰了两周了,不胜感激。
* k6 R' P% r* C
$ ^1 j! C' z4 g1 o |