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段说是可选,实际是必选才行!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
97条回答
chunxx
1楼-- · 2019-12-21 19:20
stream控制是核心,没地方抄,只好原创。大框架也推翻重来了好几次,虽然最后的程序不多,可不容易!
主程序调用,只要

void main(void)
{
   ....
   ....

    UVC_streamStart();
        //
    while (1)
    {
        UVC_MovieEncoder();
     ....
    }
}
就可以了。
chunxx
2楼-- · 2019-12-21 20:21
匆忙贴出,要回去过年了,文字性的经验总结,有时间再做。这里涉及了USB的双缓冲,ISO IN端点,UVC类标准等等(JPEG编码是小事了),有很多是值得总结的。在做这块东西,或者有兴趣的朋友可email交流hcc21cn@163.com,有时实际没时间上ourdev了.
kneken
3楼-- · 2019-12-22 00:01
mark
licky
4楼-- · 2019-12-22 00:52
厉害,学习
loohoo0302
5楼-- · 2019-12-22 06:27
 精彩回答 2  元偷偷看……
rlogin
6楼-- · 2019-12-22 06:54
天哪,发现酷帖!

一周热门 更多>