海康yv12转码与异步流处理


#include "opencv2/opencv.hpp"

//yv12 转码 到指定分辨率
unsigned char *  YV12RGBpixel(unsigned char * yv12,  int W, int H, int newW, int newH)
{   
	cv::Mat dst(H, W, CV_8UC3);//8UC3表示8bit uchar 无符号类型,3通道值
	cv::Mat src(H + H / 2, W, CV_8UC1, (uchar*)yv12);
	cv::cvtColor(src, dst, CV_YUV2BGR_YV12); //cv::imshow("bgr", dst); cv::waitKey(0);
	W = newW;
	H = newH;
	auto pRbuf = (unsigned char*)malloc(3 * W*H);
	cv::Mat resizeImg(cv::Size(W, H), CV_8UC3, pRbuf); 
	cv::resize(dst, resizeImg, resizeImg.size());
	return pRbuf;
} 


	enum  WHO
	{
		WHO_NULL = -1,
		WHO_read = 0,
		WHO_write = 1
	};
//结构体信息
	struct rgbBuff { 
		int W = 0;
		int H = 0;
		unsigned char* buff=NULL;
	};
	rgbBuff m_rgbBuff[2]; 

//异步--写
void writeBuff(unsigned char * pBuf, int bufflen, int W, int H)
{
	OutputDebugStringA("writeBuff\n");   
	if (m_rgbBuff[WHO_read].buff == NULL)
	{
		m_rgbBuff[WHO_read].W = m_rgbBuff[WHO_write].W;
		m_rgbBuff[WHO_read].H = m_rgbBuff[WHO_write].H;
		m_rgbBuff[WHO_read].buff = m_rgbBuff[WHO_write].buff;
		m_rgbBuff[WHO_write].buff = NULL;
	}
	//更新write buff
	if (m_rgbBuff[WHO_write].buff == NULL)
	{
		int newW = 640, newH = 480;
		m_rgbBuff[WHO_write].W = newW;
		m_rgbBuff[WHO_write].H = newH;
		m_rgbBuff[WHO_write].buff = YV12RGBpixel(pBuf, W, H, newW, newH);
	} 
}

//异步--读
void readBuff()
{ 
	OutputDebugStringA("readBuff\n");   
	if (m_rgbBuff[WHO_read].buff != NULL)
	{   
        //额外处理
        free(m_rgbBuff[WHO_read].buff)
		m_rgbBuff[WHO_read].buff = NULL;
	}   
}

思路:

writeBuff 对 m_rgbBuff  进行写操作,如果 WHO_write 作为 转码后的数据存储区, 在 readBuff操作 WHO_read 后,进行数据赋值,同时进入下一次解码操作。来不及处理的数据流将会被抛弃。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi是一种基于Object Pascal语言的集成开发环境(IDE),主要用于开发窗口应用程序和数据库操作。而海康是一家专门从事视频监控设备生产的公司,其产品广泛应用于各种场景,如城市交通管理、安防监控等。在Delphi中使用海康视频转码的话,可以通过调用海康的API来实现。 CSDN是中国最大的专业IT社区和服务平台,提供技术论坛、资源下载、技术博客等服务,其中也可以找到与Delphi和海康视频转码相关的资料和教程。在CSDN上,我们可以通过搜索关键词"Delphi 海康视频转码"来获取相关的文章和代码。 实现Delphi与海康视频转码的步骤大致如下: 1. 首先,需要从海康官方网站上下载并安装海康SDK,其中包含了与海康视频转码相关的开发包和文档; 2. 在Delphi中创建一个新的项目,并引入海康SDK中的相关库文件; 3. 编写Delphi代码,调用海康的API来实现视频转码的功能。具体的调用方法和参数可以查阅海康SDK的文档,通过API来操作视频转码; 4. 运行该Delphi项目,即可实现对海康视频的转码操作; 5. 在CSDN上搜索关键词"Delphi 海康视频转码",可以找到更多使用说明和示例代码,可以参考这些文章来开发自己的视频转码应用。 总的来说,通过Delphi与海康视频转码的结合,我们可以利用Delphi的开发优势和海康视频转码的功能来实现各种视频处理需求。而CSDN上也有大量的相关资源和社区讨论,可以帮助我们更好地了解和应用这些技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值