如何修改Asf Writer中的profile,以达到改变输出屏幕大小?
来源:互联网 发布:静态nat加端口号配置 编辑:程序博客网 时间:2024/04/27 22:31
贴上最近的源代码:(注意一下里面的PIN值)
ConfigAsfWriter (CComQIPtr<IWMProfile> profile,int width,int height,int nQuality)
{
HRESULT hr;
// CComQIPtr<IConfigAsfWriter> pConfig = m_pAsfWriter;
DWORD dwBitrate = nQuality;//m_myConfig.nQuality;//nQuality//92160;//921600;
CComQIPtr<IWMProfile> pProfile = profile;
//删除多余的其它流数据,否则会出错
DWORD nStreamCount;
hr = pProfile->GetStreamCount(&nStreamCount);
ASSERT (nStreamCount <= 2); //最多只能有两个接口,否则不是期望的profile
ERROR_BOX2(hr);
if (nStreamCount > 1)
{
hr = pProfile->RemoveStreamByNumber(1);
ERROR_BOX2(hr);
}
CComQIPtr<IWMStreamConfig> pStreamConfig;
hr = pProfile->GetStream(0, &pStreamConfig); //因为应该只有一个流,所以获取视频流的
ERROR_BOX2(hr);
/////设置视频流的属性
//CComQIPtr<IWMMediaProps> pMediaProps;
CComQIPtr<IWMVideoMediaProps> pMediaProps;
pMediaProps = pStreamConfig;
ASSERT (!!pMediaProps);
hr = pStreamConfig->SetBitrate(dwBitrate);
ERROR_BOX2(hr);
//WM_MEDIA_TYPE *pType = reinterpret_cast<WM_MEDIA_TYPE *>( &mt );
WM_MEDIA_TYPE *mediaType;
DWORD bufsize;
pMediaProps->GetMediaType(NULL,&bufsize);
BYTE *pBuf = new BYTE[bufsize];
mediaType = (WM_MEDIA_TYPE*) pBuf;
pMediaProps->GetMediaType(mediaType,&bufsize);
VIDEOINFOHEADER *pVih = reinterpret_cast<VIDEOINFOHEADER*>(mediaType->pbFormat);
//VIDEOINFOHEADER *pVih2 = reinterpret_cast<VIDEOINFOHEADER*>(pType->pbFormat);
//memcpy (pVih,pVih2,sizeof(VIDEOINFOHEADER));
pVih->bmiHeader.biWidth = width;//m_myConfig.videoWidth;//pVih2->bmiHeader.biWidth;
pVih->bmiHeader.biHeight = height;//m_myConfig.videoHeight;//pVih2->bmiHeader.biHeight;
pVih->bmiHeader.biSizeImage = GetBitmapSize(&pVih->bmiHeader);//pVih2->bmiHeader.biSizeImage;
mediaType->bFixedSizeSamples = 1;
mediaType->lSampleSize = pVih->bmiHeader.biSizeImage;
RECT src = {0,0,pVih->bmiHeader.biWidth,pVih->bmiHeader.biHeight};
pVih->rcSource = src;
pVih->rcTarget = src;
pVih->dwBitRate = dwBitrate;
hr = pMediaProps->SetMediaType (mediaType);
ERROR_BOX2(hr);
hr = pProfile->ReconfigStream (pStreamConfig);
ERROR_BOX2(hr);
// hr = pConfig->ConfigureFilterUsingProfile(pProfile);
// ERROR_BOX2(hr);
delete []pBuf;
// m_pProfile = pProfile;
return hr;
}
ConfigAsfWriter (CComQIPtr<IWMProfile> profile,int width,int height,int nQuality)
{
HRESULT hr;
// CComQIPtr<IConfigAsfWriter> pConfig = m_pAsfWriter;
DWORD dwBitrate = nQuality;//m_myConfig.nQuality;//nQuality//92160;//921600;
CComQIPtr<IWMProfile> pProfile = profile;
//删除多余的其它流数据,否则会出错
DWORD nStreamCount;
hr = pProfile->GetStreamCount(&nStreamCount);
ASSERT (nStreamCount <= 2); //最多只能有两个接口,否则不是期望的profile
ERROR_BOX2(hr);
if (nStreamCount > 1)
{
hr = pProfile->RemoveStreamByNumber(1);
ERROR_BOX2(hr);
}
CComQIPtr<IWMStreamConfig> pStreamConfig;
hr = pProfile->GetStream(0, &pStreamConfig); //因为应该只有一个流,所以获取视频流的
ERROR_BOX2(hr);
/////设置视频流的属性
//CComQIPtr<IWMMediaProps> pMediaProps;
CComQIPtr<IWMVideoMediaProps> pMediaProps;
pMediaProps = pStreamConfig;
ASSERT (!!pMediaProps);
hr = pStreamConfig->SetBitrate(dwBitrate);
ERROR_BOX2(hr);
//WM_MEDIA_TYPE *pType = reinterpret_cast<WM_MEDIA_TYPE *>( &mt );
WM_MEDIA_TYPE *mediaType;
DWORD bufsize;
pMediaProps->GetMediaType(NULL,&bufsize);
BYTE *pBuf = new BYTE[bufsize];
mediaType = (WM_MEDIA_TYPE*) pBuf;
pMediaProps->GetMediaType(mediaType,&bufsize);
VIDEOINFOHEADER *pVih = reinterpret_cast<VIDEOINFOHEADER*>(mediaType->pbFormat);
//VIDEOINFOHEADER *pVih2 = reinterpret_cast<VIDEOINFOHEADER*>(pType->pbFormat);
//memcpy (pVih,pVih2,sizeof(VIDEOINFOHEADER));
pVih->bmiHeader.biWidth = width;//m_myConfig.videoWidth;//pVih2->bmiHeader.biWidth;
pVih->bmiHeader.biHeight = height;//m_myConfig.videoHeight;//pVih2->bmiHeader.biHeight;
pVih->bmiHeader.biSizeImage = GetBitmapSize(&pVih->bmiHeader);//pVih2->bmiHeader.biSizeImage;
mediaType->bFixedSizeSamples = 1;
mediaType->lSampleSize = pVih->bmiHeader.biSizeImage;
RECT src = {0,0,pVih->bmiHeader.biWidth,pVih->bmiHeader.biHeight};
pVih->rcSource = src;
pVih->rcTarget = src;
pVih->dwBitRate = dwBitrate;
hr = pMediaProps->SetMediaType (mediaType);
ERROR_BOX2(hr);
hr = pProfile->ReconfigStream (pStreamConfig);
ERROR_BOX2(hr);
// hr = pConfig->ConfigureFilterUsingProfile(pProfile);
// ERROR_BOX2(hr);
delete []pBuf;
// m_pProfile = pProfile;
return hr;
}
- 如何修改Asf Writer中的profile,以达到改变输出屏幕大小?
- MongoDB---Profile修改大小
- MFC中的属性页如何改变大小?
- java 如何让程序窗口随屏幕大小改变
- 记录两个关于用asf writer修改wmv文件大小的文章
- 记录两个关于用asf writer修改wmv文件大小的文章 2010-12-17 17:43
- 修改php.ini以达到 屏蔽错误信息
- 修改php.ini以达到 屏蔽错误信息
- 根据屏幕大小改变div
- 如何配置ckeditor以达到所见即所得效果
- 如何改变数组大小?
- cocos2dx中的屏幕大小
- 如何改变输出?
- 按照屏幕比例改变窗口大小
- 手机中字体随屏幕大小改变
- cocos2d-JS 监听屏幕大小改变函数
- php:修改php.ini以达到屏蔽程序的错误信息
- ZZ:ASF/WMV Profile相关参数设置
- 成全一棵树
- 做你自己的上帝
- 微软:每个员工三台显示器!
- IT项目经理是否需要技术能力(转载)
- 枪支
- 如何修改Asf Writer中的profile,以达到改变输出屏幕大小?
- 您的妻子
- 感悟:心存感激更快乐
- Review on Expert J2EE 1
- windows运行命令详解
- Don't Use System.out.println
- about history object
- CVS中的一些概念及其实际使用
- 求助:如何管理大量的图片与视频文件?