Member 13775524 Ответов: 1

Меня расстраивает вопрос о падении частоты кадров в 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 кадров в секунду

1 Ответов

Рейтинг:
0

Gerry Schmitz

У вас есть время "преобразования" и время "визуализации".

А FPS-это функция общей загрузки процессора и "возможностей"GPU.

Затем есть "однопроходный" и "двухпроходный" рендеринг...

FPS-это не "наука", это уравновешивающий акт.