Меня расстраивает вопрос о падении частоты кадров в directshow?
Я получаю видео с USB2.0 carame в directshow.Однако из-за его высокого разрешения скорость fram снижается после того,как видеоданные проходят фильтр преобразования.
камера поддерживает разрешение 1920*1080 30 кадров в секунду,тестируя время, затрачиваемое на преобразование фильтра,я знаю, что это стоит 15 мс.Почему частота кадров составляет всего 1000/(33,3+15)=20,7, а не 30.Похоже, что обработка данных и извлечение данных выполняются синхронно.Я хочу добиться того, чтобы фильтр извлекал данные во время преобразования фильтра, обрабатывающего видеоданные.
Я не уверен, что могу четко описать этот вопрос.Я очень благодарен вам за помощь!
Что я уже пробовал:
Я попытался использовать многопоточность, чтобы решить эту проблему, но потерпел неудачу.
[Редактировать код CHill60 - OP из комментария]
HRESULT CCsSobelV2::Transform(IMediaSample *pIn, IMediaSample *pOut) { /*while (!condition) { } */ HRESULT hr = Copy(pIn, pOut);//Copy the input buffer input to the output buffer, the execution time is approximately 2ms if (FAILED(hr)) return hr; return Transform(pOut);//Custom transformation of the data in the output buffer }приведенный выше код
Transform()
функция, которая была переопределена.Правда в том, что если Transform(Pout)
стоит 10 мс,частота кадров будет 1000/(33,3+10)кадров в секунду.PS:моя камера обеспечивает видео 1920*1080 со скоростью 30 кадров в секунду
CHill60
Мы не можем видеть ваш код, поэтому мы не можем действительно помочь
Member 13775524
HRESULT CCsSobelV2::Transform(IMediaSample *pIn, IMediaSample *pOut)
{
/*while (!условие)
{
} */
HRESULT hr = Copy(pIn, pOut);//将输入缓冲区输入拷贝到输出缓冲区,执行时间大约2ms
if (FAILED(hr))
вернуть час;
обратное преобразование(pOut);//对输出缓冲区的数据进行自定义变换
}
приведенный выше код-это функция Transform (), которая была переопределена.Правда в том,что если Transform(Pout) стоит 10 мс, то частота кадров будет 1000/(33,3+10)кадров в секунду.PS:моя камера обеспечивает видео 1920*1080 со скоростью 30 кадров в секунду