LINUX.ORG.RU

Задержка при вызове cv::VideoCapture::read()

 , ,


0

1

Написала (ну почти скопировала отсюда) видеоплеер. Сделала переход к следующему видео в плейлисте при завершении текущего.

Заметила, что есть какие-то задержки...

Видео закончилось, все застыло на 5-6 сек, пошло следующее.

Долго выполняется вот эта строчка, когда read возвращает false, т.е. когда видео закончилось:

if (!capture.read(frame))

То есть вот эта функция:

cv::VideoCapture::read(Mat &image)

Господа, подскажите, пожалуйста, как с этим бороться? Как найти кол-во кадров в видео, чтоб лишний раз read не вызывать - не нашла.

Всем заранее спасибо.

Видео закончилось, все застыло на 5-6 сек, пошло следующее.

Похоже на какую-нибудь переинициализацию, объет VideoCapture случаем не пересоздается?

yoghurt ★★★★★ ()

opencv работает через FFMPEG/ Т вой путь - посмотреть, как опции ffmpeg передать в opencv и далее найти опции, которые вернут количество кадров (ну или длительность в секундах).

aiqu6Ait ★★ ()

А моно там он продолжает искать кадры? Формат видео?

namezys ★★★★ ()

Написала

Заметила

0/10, try harder.

anonymous ()
Ответ на: комментарий от yoghurt

Нет, там просто цикл:

void Player::run()
{
    ...
    while(!pause)
    {
        // time1
        if (!capture.read(frame))
        {
            // time2
            pause = true;
            emit signalHappyEnd();
        }
        else
        {
          ....
        }
...

}

Засекала время перед строкой

if (!capture.read(frame))
и после нее - около 5 секунд, если попадаем в условие.

traktor ()
Ответ на: комментарий от namezys

avi, mp4 Получается он запрашивает в очередной раз кадр, пока кадры есть - все хорошо, когда кадры заканчиваются - этот запрос выполняется доооооолго.

traktor ()
Ответ на: комментарий от traktor

можно в strace посмотреть, где проходят эти 5 секунд

yoghurt ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.