草庐IT

【使用D3D11直接渲染YUV数据】

使用D3D11直接渲染YUV数据最初学习D3D11时,采取的是直接渲染RGB数据的方式,因为采集的时候采出来的是YUV420格式,需要利用libyuv库把YUVI420转成RGB格式。但是在实际项目中,这种转换会非常消耗CPU性能,因此需要寻求一种能够直接渲染YUV数据方式。目前D3D11直接渲染YUV的主流方式有两种,第一种是创建三个纹理,用着色器转成RGB数据渲染(这部分转换操作应该是在GPU上进行的);第二种是D3D11.1之后支持直接渲染YUV数据。这里采取的是第一种方式,废话不多说,直接上代码。boolD3D11Render::InitDirect3d(){ HRESULThr=S_

[Ubuntu]Scrcpy+Zeromq实现手机屏幕yuv数据传输,并通过OpenCV实现连续播放——(一)(图文+代码解析)

       第一篇主要讲解Scrcpy源码的编译以及yuv数据的提取等基础操作。        Scrcpy作为Android投屏神器,除了能进行低延迟的投屏之外,还能通过将server端从电脑传入移动设备实现电脑控制手机的有趣操作。本文将介绍如何通过Scrcpy获取手机的yuv数据。通过简单了解,接下来就一起看看如何实现吧。目录一、编译scrcpy源码二、通过scrcpy获取手机屏幕的yuv数据2.1Scrcpy组成(大体上有两部分组成)2.2利用了for循环的方式进行提取(容易理解,运行较慢。主要用于讲解),2.3内存对齐的知识点讲解2.4第二种是直接进行读取操作:一、编译scrcpy源

c - glPopMatrix() 大喊 "unsupported texture format in setup_hardware_state"

我正尝试在Linux专用视频播放器中进行一些优化以提高性能,因为播放MP4文件对CPU占用很大,因为视频帧是用YV12编码的并且OpenGL不提供显示此格式的native方式。现在有一个代码在CPU上运行,在将图像发送到GPU进行显示之前将YV12转换为RGB,这会占用100%的CPU处理。我目前正在研究如何解码YV12帧而无需编写着色器来执行YV12->RGB转换。据我所知,一种方法是通过GL_MESA_ycbcr_texture,我的系统显然支持它(由glxinfo报告)。在这个FedoraBox中,我有一个ATITechnologiesIncRV610视频设备[RadeonHD2

c - glPopMatrix() 大喊 "unsupported texture format in setup_hardware_state"

我正尝试在Linux专用视频播放器中进行一些优化以提高性能,因为播放MP4文件对CPU占用很大,因为视频帧是用YV12编码的并且OpenGL不提供显示此格式的native方式。现在有一个代码在CPU上运行,在将图像发送到GPU进行显示之前将YV12转换为RGB,这会占用100%的CPU处理。我目前正在研究如何解码YV12帧而无需编写着色器来执行YV12->RGB转换。据我所知,一种方法是通过GL_MESA_ycbcr_texture,我的系统显然支持它(由glxinfo报告)。在这个FedoraBox中,我有一个ATITechnologiesIncRV610视频设备[RadeonHD2

Qt音视频开发28-ffmpeg解码本地摄像头(yuv422转yuv420)

一、前言一开始用ffmpeg做的是视频流的解析,后面增加了本地视频文件的支持,到后面发现ffmpeg也是支持本地摄像头设备的,只要是原则上打通的比如win系统上相机程序、linux上茄子程序可以正常打开就表示打通,整个解码显示过程完全一样,就是打开的时候要传入设备信息,而且参数那边可以指定分辨率和帧率等,本地摄像机一般会支持多个分辨率,用户需要哪种分辨率都可以指定该分辨率进行采集。这里要说的一个小插曲就是在linux上测试这个功能的时候,发现编译期间就失败了,这就奇怪了,后面发现是静态库的原因,为了偷懒,一开始编译的ffmpeg静态库,当换成动态库的方式以后,一步跑通不要太完美,完美使用,所以

Qt音视频开发28-ffmpeg解码本地摄像头(yuv422转yuv420)

一、前言一开始用ffmpeg做的是视频流的解析,后面增加了本地视频文件的支持,到后面发现ffmpeg也是支持本地摄像头设备的,只要是原则上打通的比如win系统上相机程序、linux上茄子程序可以正常打开就表示打通,整个解码显示过程完全一样,就是打开的时候要传入设备信息,而且参数那边可以指定分辨率和帧率等,本地摄像机一般会支持多个分辨率,用户需要哪种分辨率都可以指定该分辨率进行采集。这里要说的一个小插曲就是在linux上测试这个功能的时候,发现编译期间就失败了,这就奇怪了,后面发现是静态库的原因,为了偷懒,一开始编译的ffmpeg静态库,当换成动态库的方式以后,一步跑通不要太完美,完美使用,所以

android - Camera2 API 中的 Camera.PreviewCallback 等效项

API21中的Camera2中的Camera.PreviewCallback是否有任何等效项,比映射到SurfaceTexture并拉取Bitmap更好?我需要能够将预览数据从相机中提取为YUV? 最佳答案 您可以从Google的Camera2Basic示例代码开始。您需要将ImageReader的表面作为目标添加到预览捕获请求中://setupaCaptureRequest.BuilderwiththeoutputSurfacemPreviewRequestBuilder=mCameraDevice.createCaptureRe

android - Camera2 API 中的 Camera.PreviewCallback 等效项

API21中的Camera2中的Camera.PreviewCallback是否有任何等效项,比映射到SurfaceTexture并拉取Bitmap更好?我需要能够将预览数据从相机中提取为YUV? 最佳答案 您可以从Google的Camera2Basic示例代码开始。您需要将ImageReader的表面作为目标添加到预览捕获请求中://setupaCaptureRequest.BuilderwiththeoutputSurfacemPreviewRequestBuilder=mCameraDevice.createCaptureRe

java - 将 YUV_420_888 中的图像从 Android 发送到 OpenCV Mat 中的 JNI 的最有效方法

我有一个android应用程序,我想在其中对来自androidCamera2API的实时图像运行一些OpenCV图像处理。目前,如果我不进行任何处理,我可以在OnImageAvailble函数中以30fps的速度接收常规1280x720帧的图像。现在,作为一个肮脏的黑客,我从ImageReader以JPEG格式请求图像,然后将位图传递给jni,这大大降低了性能。将YUV帧传递给cvMat对象中的jni的最有效方法是什么。另外,我想将此帧转换为RGB以进行进一步处理。我应该在Java端更改格式还是应该将Mat对象传递给jni并仅在此处转换颜色空间。 最佳答案

java - 将 YUV_420_888 中的图像从 Android 发送到 OpenCV Mat 中的 JNI 的最有效方法

我有一个android应用程序,我想在其中对来自androidCamera2API的实时图像运行一些OpenCV图像处理。目前,如果我不进行任何处理,我可以在OnImageAvailble函数中以30fps的速度接收常规1280x720帧的图像。现在,作为一个肮脏的黑客,我从ImageReader以JPEG格式请求图像,然后将位图传递给jni,这大大降低了性能。将YUV帧传递给cvMat对象中的jni的最有效方法是什么。另外,我想将此帧转换为RGB以进行进一步处理。我应该在Java端更改格式还是应该将Mat对象传递给jni并仅在此处转换颜色空间。 最佳答案