视频画面切换,效率很低,原因何在?解决思路
发布时间:2011-06-27 19:26:50 文章来源:www.iduyao.cn 采编人员:星星草
视频画面切换,效率很低,原因何在?
我编了个程序,简单代码如下:
main()
{
....
DXUTSetCallbackD3D9DeviceAcceptable( IsDeviceAcceptable );
DXUTSetCallbackD3D9DeviceCreated( OnCreateDevice );
DXUTSetCallbackD3D9DeviceReset( OnResetDevice );
DXUTSetCallbackD3D9FrameRender( OnFrameRender );
DXUTSetCallbackD3D9DeviceLost( OnLostDevice );
DXUTSetCallbackD3D9DeviceDestroyed( OnDestroyDevice );
DXUTSetCallbackMsgProc( MsgProc );
DXUTSetCallbackKeyboard( KeyboardProc );
DXUTSetCallbackDeviceChanging( ModifyDeviceSettings );
DXUTSetCursorSettings( true, true );
DXUTInit( false, false );
...
}
实现了播放视频时可以按照几种方式来显示,比如3d视频文件,可以按照设置不同,让左右眼看的画面左右互换,或者将上下模式的画面变成左右模式,我是在OnFrameRender()中实现的,主要代码如下:
void CALLBACK CScreenShow::OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext )
{
IDirect3DSurface9 *pD3DBackBuffer;
RECT rc,drc,drc1;
HRESULT hr;
unsigned char *pImagebuffer=NULL,*pImagebuffer1=NULL;
D3DLOCKED_RECT LockedRect;
D3DLOCKED_RECT d3dlr;
D3DSURFACE_DESC *pDesc;
D3DSURFACE_DESC desc;
hr= pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pD3DBackBuffer);//20090613
if (D3D_OK!=hr)
{
return;
}
if (SUCCEEDED(hr=(pd3dDevice)->BeginScene()) )
{
switch(pthisContent->m_StereoType)//选择显示模式
{
case STEREO_MODE_NONE:
if(pthisContent->m_pRenderer->isLeftFrame==true)
{
pImagebuffer=mtBuf.pLBuffer;
}
else
{
pImagebuffer=mtBuf.pRBuffer;
}
drc.left=0;
drc.right= (pthisContent->m_DesSize.cx-1)*1;
drc.top=0;
drc.bottom=(pthisContent->m_DesSize.cy-1)*1;
if ((hr=D3DXLoadSurfaceFromMemory(
m_ScreenShow.HelpSurface,
NULL,
&drc, // CONST RECT* pDestRect,
pImagebuffer, // LPCVOID pSrcMemory,
D3DFMT_A8R8G8B8, // D3DFORMAT SrcFormat
mtBuf.scanline, // UINT SrcPitch,
NULL, // CONST PALETTEENTRY* pSrcPalette,
&(mtBuf.mRRect),//CONST RECT* pSrcRect,
D3DX_FILTER_LINEAR , // DWORD Filter,
0) )!= D3D_OK)
{
hr=S_OK;
}
break;
case STEREO_MODE_ALT:
if (m_ScreenShow.lrswitch)
{
pImagebuffer=mtBuf.pLBuffer;
pImagebuffer1=mtBuf.pRBuffer;
}
else
{
pImagebuffer=mtBuf.pRBuffer;
pImagebuffer1=mtBuf.pLBuffer;
}
drc.left=0;
drc.right= pthisContent->m_DesSize.cx/2-1;
drc.top=0;
drc.bottom=pthisContent->m_DesSize.cy-1;
drc1.left= pthisContent->m_DesSize.cx/2;
drc1.right= pthisContent->m_DesSize.cx-1;
drc1.top=0;
drc1.bottom=pthisContent->m_DesSize.cy-1;
if ((hr=D3DXLoadSurfaceFromMemory(
m_ScreenShow.HelpSurface,
NULL,
&drc,//&(m_LeftBuf.mRect), // CONST RECT* pDestRect,
pImagebuffer, // LPCVOID pSrcMemory,
D3DFMT_A8R8G8B8, // D3DFORMAT SrcFormat
mtBuf.scanline, // UINT SrcPitch,
NULL, // CONST PALETTEENTRY* pSrcPalette,
&(mtBuf.mLRect) ,// CONST RECT* pSrcRect,
D3DX_FILTER_LINEAR , // DWORD Filter,
0) )!= D3D_OK)
{
}
if ((hr=D3DXLoadSurfaceFromMemory(
m_ScreenShow.HelpSurface,
NULL,
&drc1, // CONST RECT* pDestRect,
pImagebuffer, // LPCVOID pSrcMemory,//20091116
D3DFMT_A8R8G8B8, // D3DFORMAT SrcFormat
mtBuf.scanline, // UINT SrcPitch,
NULL, // CONST PALETTEENTRY* pSrcPalette,
&(mtBuf.mRRect),
D3DX_FILTER_LINEAR , // DWORD Filter,
0) )!= D3D_OK)
{
hr=S_OK;
}
break;
}
hr=pd3dDevice->UpdateSurface(m_ScreenShow.HelpSurface,NULL,pD3DBackBuffer,NULL);//20090613
if(hr!=D3D_OK)
{
hr=S_OK;
}
(pd3dDevice)->EndScene();
}
pD3DBackBuffer->Release();
return;
}
可以通过界面上的按钮来改变pthisContent->m_StereoType,从而按不同模式显示视频。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
DSHOW push
推模式,ConnectDirect 的,为什么我一直反回错误
下级级用的是HAALI的一个东西,用CMemStream拉模式的时候是可以连接的
...
-
ffmpeg编码后视频速度不正确,质量也不好,求助,求助,求助,求助啊
对采集到得摄像头图像进行编码保存,发现得到的视频质量不好,而且速度不...
-
请问怎么在live555中接收jpeg
请问,我现在想接收一个服务器发送的jpeg 不知道怎么用live555做一个客户端, 接收它并显示。
请问应...
-
XP SP3 YUV420 的fiter依赖 在线等答案……
链接时媒体类型为WMMEDIASUBTYPE_I420
有的XP可以播放出来
有的就不行,请问不能播放...
-
如何获取通过麦克风来获取当前说话的音量?
使用Wave系统API采集音频输入的数据,当数据缓存区满了后,收到消息取得数据后,如何根据这里...
-
RFC3984 有没有完整的中文版本呢?
搜了几个 都是一半英文一半中文的。哎 郁闷!
------解决方案--------------------
英文的凑合...
-
介绍一个学习directshow和com、atl技术的网站
有一个学习directshow和com、atl技术的网站,还可以下视频教程,共享给大家: http://www...
-
攻击帖:jrtplib、live555是个垃圾,刚开始搞流媒体就用这玩意就是找s
不解释~
来丢我砖头吧~~
我分太多了用不完~ 支持的散分~~~
...
-
50分,寻找《Visual C++音频/视频处理技术及工程实践》的随书光盘?
急于使用其中的几个例程。若哪位好心人能够提供,非常感谢!!我的QQ:52...
-
h264的高宽比怎么获取?
我看标准里面只有样点的高宽比啊。
还有,bit rate可以读出来吗?
------解决方案--------------------
是要...