2015-01-01 2 views
1

Я хочу манипулировать изображением, которое находится в пределах предопределенного набора времени воспроизведения (например, от метки 3 секунды до 6 секунд). Однако я не могу получить время воспроизведения в модуле видеофильтра. Структура picture_t содержит элемент «дата», который содержит дату отображения, но не временную метку, начинающуюся с нуля, когда началось воспроизведение. По-видимому, я не могу определить, какова текущая позиция воспроизведения, особенно после того, как пользователь выполняет операцию поиска с помощью строки поиска.Как получить текущее время воспроизведения в модуле видеофильма VLC

Итак, как определить текущую позицию воспроизведения в модуле «видеофильтр», который остается стабильным даже после операции поиска?

Любая помощь очень ценится!

Редактировать: Вот пример кода, который будет просто отбрасывать кадры от 60 секунд до 120 секунд. Если я ищу операцию, эти отметки в 60 и 120 секунд больше не действительны.

picture_t *Filter(filter_t *p_filter, picture_t *p_pic) 
{ 
    filter_sys_t *p_sys = p_filter->p_sys; 
    // save the start date 
    if (p_sys->start == -1) 
     p_sys->start = p_pic->date;  
    if (p_pic->date > p_sys->start + 60000000 && p_pic->date < p_sys->start + 120000000) 
    { 
     picture_Release(p_pic); 
     return NULL; 
    } 
    return p_pic; 
} 
+0

Покажите нам код, который вы получили до сих пор;) – Veve

+1

Вы можете увидеть пример кода выше, по крайней мере, сделать моя точка. ;) – Graviton

ответ

0

Я отправляю ответ на благо других.

В настоящее время это невозможно в VLC. Вместо этого это можно сделать с помощью модуля demuxer, потому что demuxer знает позицию воспроизведения воспроизводимой дорожки. Он также может связываться с любым другим модулем (например, с фильтром видео), используя шаблон Observer, реализованный в VLCcore. Следуйте за here для получения дополнительной информации о переменных объекта VLC.

Надеюсь, что это поможет!

0

У меня есть другое решение для вашего вопроса.

Но это не дает времени воспроизведения напрямую. Но он преобразует количество кадров во времени. Таким образом, вам не нужно импортировать какую-либо функцию.

В настоящее время я пытался это ниже реализации, которая работает:


filter_sys_t *p_sys = (filter_sys_t *)p_filter->p_sys; 
strm_time = 0.04 * (double)(p_sys->i_frames); 
// 0.04 implies the 25 frames per minute 

+1

Это не отвечает на вопрос. Если у вас другой вопрос, вы можете задать его, нажав «Задать вопрос». Вы также можете добавить щедрость, чтобы привлечь больше внимания к этому вопросу, как только у вас будет достаточно репутации. – zohar

Смежные вопросы