Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2018, 14:16   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию Сделать скриншоты из видео в цикле

Здравствуйте.
Необходимо открыть видео-файл и сделать несколько скриншотов.
Использую такой код:
Код:
  step := TrackDuration / (COUNT_X * COUNT_Y);
  _pos := 0;
  while _pos < TrackDuration do
  begin
    TrackPosition := _pos;
   {
     ...делаем скриншот через SampleGrabber...
   }
    _pos := _pos + step;
  end;
Проблема в том, что если не делать паузу между перемоткой и созданием скриншота, то SampleGrabber выдает предыдущий кадр, на который был перемотан IMediaPosition. То есть, кадр из предыдущей итерации.
Чтобы это работало правильно, нужно делать большую задержку (не менее 300мс для 704х576). Причём, чем больше разрешение кадра видео, тем длительнее нужна задержка.
Как избавиться от необходимости делать задержку?

Последний раз редактировалось BLACK_RAIN; 26.02.2018 в 14:21.
BLACK_RAIN вне форума Ответить с цитированием
Старый 27.02.2018, 07:11   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,789
По умолчанию

тогда надо брать кадр прямо из видео....
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 27.02.2018, 09:09   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
тогда надо брать кадр прямо из видео....
А как?
BLACK_RAIN вне форума Ответить с цитированием
Старый 27.02.2018, 15:46   #4
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Мне не нужно совсем без задержки. Пусть задержка будет, но минимальная.
Вся проблемма в том, что программа (или винда?) не дожидается полного выполнения IMediaPosition.put_CurrentPosition( ) и идет дальше. В следствии этого, новый кадр не успевает попасть в буфер SampleGrabber'а.
Можно как-то заставить систему ждать нужное время? Или узнать это время, чтобы не делать слишком длинную задержку.
BLACK_RAIN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скриншоты directx Anton911 Мультимедиа в Delphi 0 26.09.2015 12:16
Скриншоты Nastya1998 Помощь студентам 36 24.07.2014 14:56
скриншоты kinwood Помощь студентам 0 20.12.2012 03:40
паскаль сделать в цикле 909 Помощь студентам 1 04.12.2012 23:05
Builder. Как в цикле сделать все кнопки неактивными? TwiX C++ Builder 4 25.12.2009 17:51