STM32实现USB Video Class开始干活了

2019-12-19 18:08发布

终于出来图像,虽然图像混乱,问题还很多,但它干活了!发贴自我庆贺!

(原文件名:Capture.jpg)

真实意义的USB摄像头,OV7670拍摄图像,STM32 JPEG编码。用USB虚拟串口传到PC端显示早就OK,移植到USB Video Class就是不工作!
描述符和流控制耗了N多天,找不到什么问题,UVCView分析通过,Bushound也看到完整的JPEG数据,甚至用自己写的DirectX接口Video Capture程序调试,都能发现有逐帧的数据上来,可是显示就是黑屏一个。
无计加无聊之下去翻看JPEG的编码,对照JPEG文件。JPEG Encoder是自己写的,为了节省Bytes,有些可选段没加上。乱调整一下,把省略了的APP0段加上,突然发现有图像出来了!他NN的熊。
回头一想也好理解,JPEG标准中APP0段是可选的,没有它单独的图像也能显示;视频流模式,USB Video Class设备把数据流丢给DirectX Render,后者要从每帧图像中找APP0段中的JFIF标记,或者,在数据流出错后,新的帧到来,找到JFIF标记就丢给JPEG解码器。没有JFIF标记,初始化(用上次的标记?)错,或者中间数据流出错,DirectX Render就直接罢工!显示黑屏。这个APP0段说是可选,实际是必选才行!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。