三个问题,只给100分而已。

无我无人 2002-04-09 07:08:59
最近我们基于DirectX8.1写程序时遇到了几个问题想请教您一下,希望您能给予我们帮助,在此非常的感谢。我们的问题具体如下:

1.在Microsoft DirectX8.1/DirectShow/DirectShow Editing Services的文档里,有这样的描述:

.Effect: For video, any 2-D one-input Microsoft? DirectX? Transform object. For audio, any DirectShow audio effect filter.
.Transition: For video, any 2-D two-input DirectX Transform object. Audio does not support transitions.

文档中对 DirectX Transform object没有进一步的解释。我们在编译和注册了DirectShow提供的EZRGB24 Filter后,在DES里不能使用。我们想知道怎么写一个文档中提到的 DirectX Transform object,类似于DES中提供的缺省Effect:CrEmboss。

2.DES的Xml2Dex对象在调用WriteXMLfile或调用WriteXML方法时,如果当前时间线上的对象拥有用户数据(即:曾经对该对象调用过SetUserData方法)会出现非法内存修改及非法的NTDLL.RTLFreeHeap调用。
例:
CoInitialize(NULL);
IAMTimeline * pTL;
IXml2Dex * pXML;
IAMTimelineObj* pGroupObj;
CoCreateInstance(CLSID_AMTimeline,NULL, CLSCTX_INPROC_SERVER,IID_IAMTimeline,(void**)&pTL);
pTL->CreateEmptyNode(&pGroupObj,TIMELINE_MAJOR_TYPE_GROUP );
IAMTimelineGroup * pGroup;
pGroupObj->QueryInterface(IID_IAMTimelineGroup,(void **)&pGroup);
CMediaType VideoGroupType;
VideoGroupType.SetType( &MEDIATYPE_Video );
pGroup->SetMediaType( &VideoGroupType );

pTL->AddGroup(pGroupObj);
CoCreateInstance(CLSID_Xml2Dex,NULL, CLSCTX_INPROC_SERVER,IID_IXml2Dex,(void**)&pXML);
BYTE buffer;
buffer = 2;

pGroupObj->SetUserData(&buffer,1);//如果该处进行了数据设置,将导致上述错误。

pXML->WriteXMLFile(pTL,L"w1.xtl");//出现错误!如下:
//HEAP[Dle.exe]: Heap block at 00144388 modified at
//00144394 pastrequested size of 4
//HEAP[Dle.exe]: Invalid Address specified to RtlFreeHeap
//( 130000, 144390 )
//该错误只能在单步跟踪调试时在OutPut窗口中被发现。

pTL->Release();
pXML->Release();
pGroupObj->Release();
pGroup->Release();
CoUninitialize();

3.我们在时间线的同一轨道上拥有两个Effect对象,它们具有相同的起始和终结时间,并且CLSID相同;当其中一个对象的RemoveAll或Remove方法被调用后致使另外一个Effect对象无法被GetEffect方法获取(GetEffect方法返回指针为空)。

for(int j=0;j<2;j++)
{
CComPtr<IAMTimelineObj>pDeleteObj;
hr=pEffectable->GetEffect(&pDeleteObj,j);
ATLASSERT(!FAILED(hr));
hr=pDeleteObj->Remove();//如果在第一次循环中,进行了该调用,第二次循环到
//hr=pEffectable->GetEffect(&pDeleteObj,j)返回空指针。
//如果第一循环不进行该调用,则第二次循环到
//hr=pEffectable->GetEffect(&pDeleteObj,j)时可以得到正
//确对象
ATLASSERT(!FAILED(hr));
}
...全文
30 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧