码迷,mamicode.com
首页 > 其他好文 > 详细

DirectShow设置采集帧率码率YUV<转>

时间:2018-05-19 15:51:03      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:conf   release   define   ace   idt   res   ext   efi   采集   

// 设置参数,p1=宽,p2=高,p3=帧率
AM_MEDIA_TYPE *p = NULL;
IAMStreamConfig *pSC = NULL;
pCGB2->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pVCap, 
    IID_IAMStreamConfig, (void **)&pSC);
pSC->GetFormat(&p);
VIDEOINFOHEADER *pHd = (VIDEOINFOHEADER *)p->pbFormat;
// 单位为100ns,所以每帧(10^7/p3)*100ns
pHd->AvgTimePerFrame = 10000000 / p3;
// I420格式
pHd->bmiHeader.biCompression = MAKEFOURCC(I, 4, 2, 0);
pHd->bmiHeader.biWidth = p1;
pHd->bmiHeader.biHeight = p2;
// 一个像素点12位
pHd->bmiHeader.biBitCount = 12;
// 图像大小
pHd->bmiHeader.biSizeImage = p1 * p2 * 3 / 2;
// 图像传输率,单位bps
pHd->dwBitRate = pHd->bmiHeader.biSizeImage * 8 * p3;
// defined in wmsdkidl.h
p->subtype = WMMEDIASUBTYPE_I420;
p->lSampleSize = pHd->bmiHeader.biSizeImage;
pSC->SetFormat(p);
// free p
FreeAM_MEDIA_TYPE(p);
pSC->Release();

上面设计的类型定义:

包含一下Windows Media Format 9.0 SDK中的头文件"wmsdkidl.h" 
问题应该就会被解决。在里面有I420的媒体类型GUID定义 

EXTERN_GUID(WMMEDIASUBTYPE_I420,  
0x30323449, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);  
EXTERN_GUID(WMMEDIASUBTYPE_IYUV,  
0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);

 当我用枚举设备的方式(DirectShow中枚举摄像头的采集分辨率这篇文中讲过)来查看有多少支持的帧率时,得到的分辨率有10帧、20帧、25帧和30帧。DirectShow中是以100纳秒为单位,也就是得到的实际值是1000000、500000、4000000和3333333。

原文:https://blog.csdn.net/thuyz/article/details/46762487

DirectShow设置采集帧率码率YUV<转>

标签:conf   release   define   ace   idt   res   ext   efi   采集   

原文地址:https://www.cnblogs.com/wainiwann/p/9060246.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!