Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Здравствуйте.
Необходимо открыть видео-файл и сделать несколько скриншотов.
Использую такой код:
Код:

  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 в 15:21.
BLACK_RAIN вне форума   Ответить с цитированием
Старый 27.02.2018, 08:11   #2
NetSpace
Профессионал
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Адрес: п.Путеец, Печорский р-н
Сообщений: 1,266
Репутация: 482
По умолчанию

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скриншоты directx Anton911 Мультимедиа в Delphi 0 26.09.2015 13: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 18:51


07:08.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru