Я разработал приложение для захвата видео, в котором частота процессора составляет 624 МГц (ARM920T-PAX310), а объем оперативной памяти составляет 72 МБ. Захваченное видео занимает 1 минуту, но для сохранения видеофайла требуется почти 10 минут. Я установил точку останова и обнаружил, что это заняло много времени.
//------------------- set filename
HRESULT hResult;
CComPtr<IFileSinkFilter> pFileSinkFilter;
m_pMediaControl->Stop();
m_pMediaControl->Run();
CHK(m_pASFMultiplexer->QueryInterface(&pFileSinkFilter)); CHK(pFileSinkFilter->SetFileName(L"\\windows\\sample.asf",NULL));// pFileSinkFilter.Release();
//------------------start record
LONGLONG dwStart = 0, dwEnd = 0;
WORD wStartCookie = 1, wEndCookie = 2;
HRESULT hResult = 0;
if( m_pCaptureGraphBuilder == NULL )
{
return FALSE;
}
//
dwStart=0;
dwEnd=MAXLONGLONG;
hResult = m_pCaptureGraphBuilder->ControlStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, m_pVideoCaptureFilter, &dwStart, &dwEnd, wStartCookie, wEndCookie );
Sleep(60000);//1 minute
//------------------stop record
HRESULT hResult = S_OK;
LONGLONG dwStart = 0, dwEnd = 0;
WORD wStartCookie = 1, wEndCookie = 2;
LONG lEventCode = 0;
LONG lParam1 = 0;
LONG lParam2 = 0;
if( m_pCaptureGraphBuilder == NULL )
{
return FALSE;
}
//
dwStart = 0;
hResult = m_pMediaSeeking->GetCurrentPosition( &dwEnd );
hResult = m_pCaptureGraphBuilder->ControlStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, m_pVideoCaptureFilter, &dwStart, &dwEnd, wStartCookie, wEndCookie );
//
while (true)
{
m_pMediaEvent->GetEvent( &lEventCode, &lParam1, &lParam2, INFINITE );
m_pMediaEvent->FreeEventParams( lEventCode, lParam1, lParam2 );
if( lEventCode == EC_STREAM_CONTROL_STOPPED ) {
TRACE(L"Record stop\n");
break;
}
Sleep(100);
NKDbgPrintfW(L"lEventCode = %d dwEnd = %d\n",lEventCode,dwEnd);
}
Я обнаружил, что размер файла увеличивается с начала записи. Почему для «остановки записи» требуется много времени Что мне делать в «остановке записи» ???
Задача ещё не решена.
Других решений пока нет …