如何实现LCD显示摄像头图像(2)

在这里插入图片描述上图是LCD显示摄像头图像的原理,上部分完成了摄像头参数的设置以及数据的读取。这部分要做的是采集到摄像头图像之后的图像转换问题。摄像头采集的图像可能是YUV格式,也可能是MJPEG格式,统一的需要转化成RGB格式。
因此需要实现的是convert文件夹下convert_manager.c、yuv2rgb.c、mjpeg2rgb.c、rgb2rgb.c文件,以及头文件。

实现convert_manager.h

这里需要实现的是成员是函数指针的结构体。

typedef struct VideoConvert {
   
    int (*isSupport)(int iPixelFormatIn, int iPixelFormatOut);
    int (*Convert)(PT_VideoBuf ptVideoBufIn, PT_VideoBuf ptVideoBufOut);
    int (*ConvertExit)(PT_VideoBuf ptVideoBufOut);
}T_VideoConvert, *PT_VideoConvert;

从上到下依次实现:判断摄像头采集的数据格式是否为支持该应用程序所支持;Convert函数负责转化一个buffer中的摄像头数据;ConvertExit函数负责对Convert函数中临时申请的堆进行清理(因为要读数据所以堆显然不能Convert完成之后马上清理)。

实现convert_manager.c

这部分主要负责是维护一个链表,该链表中是各个格式转化模块的功能函数,并负责相关函数调用。这部分与之前的manager.c函数一样,修改仅限于名称,直接上代码。

#include <config.h>
#include <convert_manager.h>
#include <string.h>

static PT_VideoConvert g_ptVideoConvertHead = NULL;

int RegisterVideoConvert(PT_VideoConvert ptVideoConvert)
{
   
	PT_VideoConvert ptTmp;
	if (!g_ptVideoConvertHead)
	{
   
		g_ptVideoConvertHead   = ptVideoConvert;
		ptVideoConvert->ptNext = NULL;
	}
	else
	{
   
		ptTmp = g_ptVideoConvertHead;
		while (ptTmp->ptNext)
		{
   
			ptTmp = ptTmp->ptNext;
		}
		ptTmp->ptNext     = ptVideoConvert;
		ptVideoConvert->ptNext = NULL;
	}
	return 0;
}

void ShowVideoConvert(void)
{
   
	int i = 0;
	PT_VideoConvert ptTmp = g_ptVideoConvertHead;

	while (ptTmp)
	{
   
		printf("%02d %s\n", i++, ptTmp->name);
		ptTmp = ptTmp->ptNext;
	}
}

PT_VideoConvert GetVideoConvert(char *pcName)
{
   
	PT_VideoConvert ptTmp = g_ptVideoConvertHead;	
	while (ptTmp)
	{
   
		if (strcmp(ptTmp->name, pcName) == 0)
		{
   
			return ptTmp;
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值