Информация об изменениях

Сообщение Re[9]: Относительно твоих вопросов в рассылке gstreamer'а от 10.08.2023 15:48

Изменено 10.08.2023 15:51 Conductor

Re[9]: Относительно твоих вопросов в рассылке gstreamer'а
Здравствуйте, Sharov, Вы писали:

S>>>Вот если Paused, то не виснет. Правда пишет после

S>>>

S>>>** WARNING **: 13:07:57.677: Changing the `location' property on filesrc when a file is open is not supported.

S>>>и по сути работает с одним файлом (самым первым), т.е. читать будет только из него.
C>>Ну вот, а теперь, дождавшись того, что он перешёл в Paused, если его в Null перевести, зависнет?

S>Тоже самое. Собственно, если автомат состояний у них так и работает -- в Null через Paused,

S>соотв. что так что так результат одинаков. Виснет на SetState(Null).
Сдаётся мне, что в paused пайплайн у тебя так и не переходит. ::gst_element_set_state(m_pipeline, GST_STATE_PAUSED) возвращает GST_STATE_CHANGE_ASYNC, в отличии от GST_STATE_NULL, установка которого GST_STATE_CHANGE_ASYNC никогда не возвращает. И, предполагаю, что если ты после установки Paused запросишь state, то у тебя и на этом вызове повиснет, потому что в шарповом свойстве на get скорее всего используется что-то вроде ::gst_element_get_state(m_pipeline, &state, &pending, GST_CLOCK_TIME_NONE).
Автомат автоматом, но ведь по логам что получается: элементы паплайна переходят в новое состояние, но пока всё не встало кто-то еще работает и в результате заканчиваются буфера. Почему, собственно, я и подумал, что если у тебя он Paused успешно перейдёт, то и в Null потом сможет перейти.
Попробовал я под виндой — то же самое, не виснет. С разными файлами по разрешению и форматам, с задержками и без.
Отличия: 1. использование в плюсовом коде (фактически, сишном), не думаю, что это принципиально; 2. версия 1.20.6, а не 1.22, как у тебя, здесь сказать ничего не могу, т.к. не смотрел, чего они там при переходе к 1.22 понаизменяли.

S>Выше код приложил. Может что-то не так с параметрами appsink?

Можно, конечно, попробовать с appSink["sync"] = true, но боюсь, что не поможет.
Re[9]: Относительно твоих вопросов в рассылке gstreamer'а
Здравствуйте, Sharov, Вы писали:

S>>>Вот если Paused, то не виснет. Правда пишет после

S>>>

S>>>** WARNING **: 13:07:57.677: Changing the `location' property on filesrc when a file is open is not supported.

S>>>и по сути работает с одним файлом (самым первым), т.е. читать будет только из него.
C>>Ну вот, а теперь, дождавшись того, что он перешёл в Paused, если его в Null перевести, зависнет?

S>Тоже самое. Собственно, если автомат состояний у них так и работает -- в Null через Paused,

S>соотв. что так что так результат одинаков. Виснет на SetState(Null).
Сдаётся мне, что в paused пайплайн у тебя так и не переходит. ::gst_element_set_state(m_pipeline, GST_STATE_PAUSED) возвращает GST_STATE_CHANGE_ASYNC, в отличии от GST_STATE_NULL, установка которого GST_STATE_CHANGE_ASYNC никогда не возвращает. И, предполагаю, что если ты после установки Paused запросишь state, то у тебя и на этом вызове повиснет, потому что в шарповом свойстве на get скорее всего используется что-то вроде ::gst_element_get_state(m_pipeline, &state, &pending, GST_CLOCK_TIME_NONE).
Автомат автоматом, но ведь по логам что получается: элементы паплайна переходят в новое состояние, но пока всё не встало кто-то еще работает и в результате заканчиваются буфера. Почему, собственно, я и подумал, что если у тебя он Paused успешно перейдёт, то и в Null потом сможет перейти.
Попробовал я под виндой — то же самое, не виснет. С разными файлами по разрешению и форматам, с задержками и без.
Отличия: 1. использование в плюсовом коде (фактически, сишном), не думаю, что это принципиально; 2. версия 1.20.6 (mingw), а не 1.22, как у тебя, здесь сказать ничего не могу, т.к. не смотрел, чего они там при переходе к 1.22 понаизменяли.

S>Выше код приложил. Может что-то не так с параметрами appsink?

Можно, конечно, попробовать с appSink["sync"] = true, но боюсь, что не поможет.