天嵌 ARM开发社区

 找回密码
 注册
查看: 5195|回复: 18

ov9650的数据與preview_buf[240*320*2]输出的图格式

[复制链接]
nono1860 发表于 2010-5-4 22:55:14 | 显示全部楼层 |阅读模式
请问使用APP里的camera测试程序里的宣告preview_buf[240*320*2]输出的图格式是YUYV吗?
可麻烦提供ov9650的数据与技术手册吗?谢谢!拜托了
亚瑟王 发表于 2010-5-8 21:56:46 | 显示全部楼层
preview_buf[240*320*2]这个里面是rgb格式了。
这个帖子里面有datasheet:http://bbs.embedsky.net/viewthre ... &extra=page%3D5
 楼主| nono1860 发表于 2010-5-9 18:54:10 | 显示全部楼层
RGB格式不是应该要240*320*3吗?如果preview_buf[240*320*2]是GRB格式那请问是怎存放在preview_buf[240*320*2] 谢谢亚瑟王帮我解答 !正在努力看datasheet
亚瑟王 发表于 2010-5-10 16:48:59 | 显示全部楼层
谁给你说的要×3啊?我们用的是16位色的,是2个字节。就是240×320×2,不是×3.
 楼主| nono1860 发表于 2010-5-14 13:51:44 | 显示全部楼层
谢谢阿瑟大哥,还在研读中,怎将图像取出来分析,先谢谢给我很多的知识
亚瑟王 发表于 2010-5-14 16:23:39 | 显示全部楼层
你分析了,写个说明文件贴到论坛吧。如何?
 楼主| nono1860 发表于 2010-5-17 21:11:28 | 显示全部楼层
请问阿瑟大哥,目前的驱动出去的BUFFER是GRB565的格式,如果要将OV9650摄取灰阶或黑白,要怎更改驱动程序的设定呢??我还没全部分析,因为小弟愚笨还没搞懂!
亚瑟王 发表于 2010-5-18 11:49:29 | 显示全部楼层
写一个RGB转灰阶或黑白的程序就行了。关于RGB转灰阶的原理,你可以参考一下这个帖子:
http://www.photoshopcn.com/bbs/thread-307475-1-1.html
 楼主| nono1860 发表于 2010-5-18 15:04:36 | 显示全部楼层
阿瑟大哥,午安!那个程序我早已写好!只是输出在LCD上的方法不太了解,例如我下面程序是将RGB565转为灰阶(16位一个像素转为8位1个像素),但是LCD上显示怪怪的,无法按照显示灰阶的图像,是否还要改static unsigned int fb_grab(int fd, char **fbmem)里面的设定呢?我曾经有改过modeinfo.bits_per_pixel但还是无法显是灰阶图像,CAMERA_TEST的LDC显示是16位一个像素,要怎设定成8位一个像素或者1位一个像素…等
(char preview_im[240*320]为灰阶图像的BUF)


/////////////////////////////////////////////////////////////////////////
/*
*   TQ2440 camera test program
*
*   preview : 320x240 overlay on 320x240 16bpp LCD
*
*   TFT LCD size : 320x240
*/
#include <sys/time.h>
#include <sys/types.h>
#include <asm/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
#include <errno.h>

#include <linux/fs.h>
#include <linux/kernel.h>
#include "videodev.h"
#include "videodev2.h"
#include <linux/fb.h>

#define PIXFMT_NUM                        5
#define INPUT_NUM                         5
#define CTRL_NUM                         100

#define V4L2_DEV_NODE                        "/dev/camera"
#define FB_DEV_NODE                        "/dev/fb/0"

//typedef struct v4l2_input    V_INPUT;
//typedef struct v4l2_format   V_FORMAT;
//typedef struct v4l2_fmtdesc  V_FMTDESC;
//typedef struct v4l2_queryctrl V_QRYCTRL;

typedef struct fb_var_screeninfo F_VINFO;

unsigned int x_lcd_size, y_lcd_size;

static void v4l2_show_on_fb(int fd, char *fbmem, int frames)
{
        int i=0,a,b,y,x;
        int ret,tol=0;
        char preview_buf[240*320*2];
        char preview_im[240*320];
        unsigned char R,G,B,gray;
       
        __u16 *pix;
        pix = (__u16 *) preview_im;
        while(1) {
                        if ((ret = read (fd, &preview_buf, 240*320*2)) < 0) {
                                perror("read");
                                return;
                        }
                                //for 320*240,640*480,800*480


for (y = 0; y < 240*320; y++)        
{                R= ((*(pix+y )&0xf800)>>11)<<3;
                G= ((*(pix+y )&0x07e0)>>5)<<2;       
                B= ((*(pix+y )&0x001F)>>0)<<3;
                gray=0.29*R+0.58*G+0.11*B;
               
                *(preview_im+(y))=gray;
}



                        memcpy(fbmem, &preview_im, 240*320*2);
       
       
}}

static unsigned int fb_grab(int fd, char **fbmem)
{
        F_VINFO modeinfo;
        unsigned int length;

        if (ioctl(fd, FBIOGET_VSCREENINFO, &modeinfo) < 0) {
                perror("FBIOGET_VSCREENINFO");
                exit (EXIT_FAILURE);
        }
        length = modeinfo.xres * modeinfo.yres * (modeinfo.bits_per_pixel >> 3);

        x_lcd_size=modeinfo.xres;             //width of tft lcd
        y_lcd_size=modeinfo.yres;             //height of tft lcd

        printf("fb memory info=xres (%d) x yres (%d), %d bpp\n",
                        modeinfo.xres, modeinfo.yres, modeinfo.bits_per_pixel);

        *fbmem = mmap(0, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
        if (*fbmem < 0) {
                perror("mmap()");
                length = 0;
        }

        return length;
}

static void fb_ungrab(char **fbmem, unsigned int length)
{
        if (*fbmem)
                munmap(*fbmem, length);
}


int main(int argc, char *argv[])
{
        int v4l2_fd = -1;
        int fb_fd = -1;
        char *fbmem = NULL;
        unsigned int fb_length = 0;

        int preview_frames = 180;
        int tmp;

        printf("TQ2440 Camera Test Program, Start !\n");
       
        if (argc > 1) {
                if (sscanf(argv[1], "%d", &tmp) == 1)
                        preview_frames = tmp;
        }

        v4l2_fd = open(V4L2_DEV_NODE, O_RDWR);
        if (v4l2_fd < 0) {
                perror(V4L2_DEV_NODE);
                goto out;
        }

        fb_fd = open(FB_DEV_NODE, O_RDWR);
        if (fb_fd < 0) {
                perror(FB_DEV_NODE);
                goto out;
        }
       
        fflush(stdout);
        if ((fb_length = fb_grab(fb_fd, &fbmem)) == 0)
                goto out;
       
        memset(fbmem, 0, fb_length);
                printf("Press Ctrl+C to stop !\n");
        fflush(stdout);
        v4l2_show_on_fb(v4l2_fd, fbmem, preview_frames);
                printf("\n");

out:

        if (v4l2_fd > 0)
                close(v4l2_fd);

        fb_ungrab(&fbmem, fb_length);

        return 0;
}
亚瑟王 发表于 2010-5-19 17:40:32 | 显示全部楼层
转成灰阶也应该是16位,而不是8位,这点你需要注意。LCD是565格式的,是16位的。
struct 发表于 2010-5-21 16:11:02 | 显示全部楼层
请问楼主:你是否在tft上显示出了灰阶图像?
另我觉得转化成灰度图后 但输出仍是RGB565格式,灰度8位 又要转化成RGB565格式输出。
我没有尝试输出灰度图,是直接处理灰度数据后, 输出二值图。
请问亚瑟王:565格式的 转化成灰度图 应该是8位的, 如果转化成16位 的请问 如何转?
struct 发表于 2010-5-21 17:42:12 | 显示全部楼层
另菜菜的追问下:  在WXCAT35的E文PDF中似乎没有看到 对灰度支持的文字,请问WXCAT35这款屏支持灰度输出吗?
亚瑟王 发表于 2010-5-22 21:54:39 | 显示全部楼层
真彩屏都是支持灰度显示的。灰度也是彩色中的一种(我的理解)。
 楼主| nono1860 发表于 2010-5-23 19:28:52 | 显示全部楼层
我用出來怪怪的!!我是先把BUF裡的RGB565變成RGB888再利用RGB888其中的一色變成RGB565!這樣顯示也不知道算不算灰階?
亚瑟王 发表于 2010-5-25 18:47:55 | 显示全部楼层
可以不用转成888格式,直接用565就可以,我以前做过一个类似的,把彩色转为灰阶不需要转为888就可以完成。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-10-6 12:31 , Processed in 1.037043 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表