Проблемы тестирования фильтра DirectShow в Skype

Это FillBuffer функция:

HRESULT CVCamStream::FillBuffer(IMediaSample *pms)
{
REFERENCE_TIME rtNow;
REFERENCE_TIME avgFrameTime = ((VIDEOINFOHEADER*)m_mt.pbFormat)->AvgTimePerFrame;

rtNow = m_rtLastTime;
m_rtLastTime += avgFrameTime;
pms->SetTime(&rtNow, &m_rtLastTime);
pms->SetSyncPoint(TRUE);

BYTE *pData;
pms->GetPointer(&pData);
long lDataLen = pms->GetSize();

ProcessFrame(hdc, &pData);

return NOERROR;
}

и вот что я делаю внутри ProcessFrame:

void ProcessFrame(HDC hdc, BYTE **lpbitmap)
{
BYTE *q = *lpbitmap;
const int32_t height = 640;
const int32_t width = 480;
for (int y = 0; y < height; y++)
{
uint8_t* p = bgra_image_data;
for (int x = 0; x < width; x++)
{
if (p[3] > 0) for (int i = 0; i < 3; i++) q[i] = p[i];

p += 4;
q += 3;
}
}
}

Подробно, я играю с байтами BRGA изображения с одинаковыми размерами.

Ну, используя graphedt, это работает как шарм!
Вместо этого, выбирая этот фильтр в качестве источника Skype, иногда он становится полностью черным, иногда он портит все — изображение не читается.

В любом случае через несколько секунд происходит сбой из-за нарушения прав записи.
Видите ли вы какие-либо доказательства ошибок в моем коде, которые графед может игнорировать?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]