Skip to content

GStreamer video probe#793

Open
ngcores wants to merge 4 commits into
YouROK:masterfrom
ngcores:master
Open

GStreamer video probe#793
ngcores wants to merge 4 commits into
YouROK:masterfrom
ngcores:master

Conversation

@ngcores

@ngcores ngcores commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Исправления GStreamer seek

  • Исправлен seek:

    • удаляются старые ASYNC_DONE/EOS;
    • после FLUSH-seek ожидается новый ASYNC_DONE;
    • контролируются ERROR, EOS и таймаут;
    • логика применяется при переиспользовании и пересоздании pipeline.
  • Отсутствие ASYNC_DONE больше не считается самостоятельной ошибкой:

    • после таймаута проверяется фактическое состояние pipeline;
    • работа продолжается при SUCCESS или NO_PREROLL;
    • реальные bus/state ошибки по-прежнему приводят к заморозке задачи.

Позиция после seek

  • Добавлен video start probe:

    • получает фактическую позицию из SEGMENT event или первого подходящего video buffer;
    • отбрасывает устаревшие timestamps старого seek;
    • синхронизирует позицию задачи и timeline Mp4BoxReader.
  • Добавлен segment clip probe для H.264/H.265 passthrough:

    • удаляет video buffers с PTS раньше границы нового сегмента;
    • предотвращает попадание кадров старой позиции в первый fMP4-сегмент.
  • Усилена обработка gst_element_query_position:

    • недоступная или отрицательная позиция не ломает seek;
    • используется запрошенная позиция как fallback;
    • одинаковая логика применяется при старте и переиспользовании pipeline;
    • добавлен debug-лог для fallback.

Освобождение ресурсов

  • Pad probes корректно удаляются:

    • перед повторным seek;
    • при остановке и заморозке pipeline;
    • на ошибочных путях запуска;
    • вместе с registry state и native pad reference.
  • При настоящей ошибке seek:

    • pipeline переводится в NULL;
    • освобождаются appsink, bus и pipeline;
    • удаляются probes и незавершённый сегмент;
    • освобождается Mp4BoxReader;
    • задача переводится в frozen-состояние для пересоздания pipeline при следующем запросе.
  • Bus watcher защищён поколением, поэтому сообщение от старого pipeline не может заморозить новый.

Тесты

  • Добавлены тесты:
    • успешного получения фактической позиции;
    • fallback при недоступной позиции;
    • fallback при отрицательной позиции;
    • продолжения работы без ASYNC_DONE, если pipeline исправен;
    • заморозки и освобождения ресурсов после ошибки seek;
    • обработки video start и segment clip probes;
    • удаления native pad probe и registry state;
    • ABI-структур GStreamer на Windows/Linux.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant