Необходимо помочь разобраться в коде, суть которого вывод текста по вверх видео. Проблема в том, что видео проигрывается из памяти и подключение к ней фильтра CLSID_VideoMixingRenderer9, не дает результат, сама картинка черная, звук идет, такое ощущение что запускается отдельным потоком.
Код при котором наложение текста происходит верно, и все работает как надо, только видео проигрывается не из памяти, а из файла:
CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, MyGraphBuilder);
CoCreateInstance(CLSID_CaptureGraphBuilder2, nil, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, pCaptureGraphBuilder2);
pCaptureGraphBuilder2.SetFiltergraph(MyGraphBuilder);
CoCreateInstance(CLSID_VideoMixingRenderer9, nil, CLSCTX_INPROC, IID_IBaseFilter, FVideoRender);
MyGraphBuilder.QueryInterface(IID_IVideoWindow, pVideoWindow);
FVideoRender.QueryInterface(IID_IVMRFilterConfig9, FConfig);
FConfig.SetNumberOfStreams(1);
FVideoRender.QueryInterface(IID_IVMRMixerBitmap9, FBitmap);
MyGraphBuilder.AddFilter(FVideoRender, 'Video Mixing');
{ //////////////////// Заремарино
MyGraphBuilder.AddFilter(FileReader, 'Video Memory');
Pin:= FileReader.GetPin(0);
MyGraphBuilder.Render(Pin);
//////////////////////// }
MyGraphBuilder.RenderFile(StringToOleStr(PChar('d:\Termovolt7.avi')), '');
Если разремарить и убрать строку MyGraphBuilder.RenderFile(StringToOleStr(PChar('d:\Termovolt7.avi')), ''); то звук идет, но видео не проигрывается. Если заремарить еще строку MyGraphBuilder.AddFilter(FVideoRender, 'Video Mixing'); то видео проигрывается нормально, но не накладывается текст.
Опубликован 28.11.2014 в 16:32