DirectShow: FileWriter vs Dump
От: sh093  
Дата: 11.03.03 18:22
Оценка:
Ситуация. В своей программе создаю граф, в котором читаются некомпрессированные видео и звук, сжимаются какими-то кодеками (неважно какими, много разных пробовал), отправляются в AVI Mux и затем в стандартный File Writer или Dump из примеров DXSDK.

video: [File Source]->[Splitter]->[Decoder]->[Codec]->[AVI Mux]->[Dump]
audio: [File Source]->[Parser]->[Codec]-------------->

С FileWriter все всегда нормально работает, записывается файл в котором действительно есть и видео и звук. С Dump'ом выполнение графа прерывается где-то на середине, при этом моя программа ловит от графа ошибку VFW_E_START_TIME_AFTER_END (The sample start time is after the sample end time). Что это может быть?

Что я пробовал:
— найти, какой фильтр генерирует ошибку — блин, безуспешно (как?)
— отследить, какие интерфейсы запрашиваются у Dump и реализовать их все так, как сделано в FileWriter — не помогло.
— graph->SetSyncSource(NULL)
По большому счету это все, остальное можно отнести к шаманству и пинанию колес.

Помогите плз, скоро седеть начну!
Re: DirectShow: FileWriter vs Dump
От: Sergey A. Sablin Россия http://www.elecard.com
Дата: 12.03.03 05:05
Оценка:
Здравствуйте, sh093, Вы писали:

S>Ситуация. В своей программе создаю граф, в котором читаются некомпрессированные видео и звук, сжимаются какими-то кодеками (неважно какими, много разных пробовал), отправляются в AVI Mux и затем в стандартный File Writer или Dump из примеров DXSDK.


S>video: [File Source]->[Splitter]->[Decoder]->[Codec]->[AVI Mux]->[Dump]

S>audio: [File Source]->[Parser]->[Codec]-------------->

S>С FileWriter все всегда нормально работает, записывается файл в котором действительно есть и видео и звук. С Dump'ом выполнение графа прерывается где-то на середине, при этом моя программа ловит от графа ошибку VFW_E_START_TIME_AFTER_END (The sample start time is after the sample end time). Что это может быть?


S>Что я пробовал:

S>- найти, какой фильтр генерирует ошибку — блин, безуспешно (как?)
S>- отследить, какие интерфейсы запрашиваются у Dump и реализовать их все так, как сделано в FileWriter — не помогло.
S>- graph->SetSyncSource(NULL)
S>По большому счету это все, остальное можно отнести к шаманству и пинанию колес.

S>Помогите плз, скоро седеть начну!



Смотрим DX help и видим:

File Writer Filter:
...




Dump Filter Sample:
...


Dump — просто сэмпл — он не обязан поддерживать все вожможные ситуации и форматы.
Т.к. вы занимаетесь DShow стоит просто запомнить, что avi-шки писать лучше всего именно File Writer-ом, т.к. индексы к avi файлу пишет муксер и Dump просто не позволит ему это сделать. (см. выше)
Сергей.
Re[2]: DirectShow: FileWriter vs Dump
От: __sh  
Дата: 12.03.03 08:16
Оценка:
Здравствуйте, Sergey A. Sablin, Вы писали:

SA>Dump — просто сэмпл — он не обязан поддерживать все вожможные ситуации и форматы.

SA>Т.к. вы занимаетесь DShow стоит просто запомнить, что avi-шки писать лучше всего именно File Writer-
SA>ом, т.к. индексы к avi файлу пишет муксер и Dump просто не позволит ему это сделать. (см. выше)

А какие ситуации и форматы? Задача dump — записать ПОТОК в файл. Не какой-то там формат, а просто байтовый поток. Формат как раз формирует AVI Mux. Заголовки записывает опять же AVI Mux при помощи интерфейса IStream у фильтра FileWriter.

Я говорю о другом. Выполнение графа, в котором FileWriter заменен на Dump прерывается на середине, на этапе записи самого потока, задолго до того, как AVI Mux записывает заголовки. Это очень легко проверить, достаточно добавить в Dump интерфейс IStream. Причем выполнение прерывается по идиотской причине: какой-то фильтр проверяет времена сэмпла и выкидывает ошибку.

По всей видимости ошибка возникает не в Dump (могу это утверждать с вероятностью 99.9%), а в AVI Mux и пока я не нахожу этому разумных объяснений. Как может file writer влиять на сэмплы, которые до него еще не дошли? Разве что как-то хитро настраивает AVI Mux под себя (недокументированные интерфейсы?).

Поэтому вопросы остаются прежние:

1. Как вычислить, в каком фильтре возникает ошибка? Выкидывать фильтры по очереди не получается, т.к. мы отлаживаем последний фильтр графа.

2. В каком направлении копать? Почему вообще у сэмпла может время начала вдруг стать больше время конца и исключительно если в графе FileWriter заменить на Dump?
Re[3]: DirectShow: FileWriter vs Dump
От: Sergey A. Sablin Россия http://www.elecard.com
Дата: 13.03.03 06:37
Оценка:
Здравствуйте, __sh, Вы писали:

S>Здравствуйте, Sergey A. Sablin, Вы писали:


SA>>Dump — просто сэмпл — он не обязан поддерживать все вожможные ситуации и форматы.

SA>>Т.к. вы занимаетесь DShow стоит просто запомнить, что avi-шки писать лучше всего именно File Writer-
SA>>ом, т.к. индексы к avi файлу пишет муксер и Dump просто не позволит ему это сделать. (см. выше)

S>А какие ситуации и форматы? Задача dump — записать ПОТОК в файл. Не какой-то там формат, а просто байтовый поток. Формат как раз формирует AVI Mux. Заголовки записывает опять же AVI Mux при помощи интерфейса IStream у фильтра FileWriter.


S>Я говорю о другом. Выполнение графа, в котором FileWriter заменен на Dump прерывается на середине, на этапе записи самого потока, задолго до того, как AVI Mux записывает заголовки. Это очень легко проверить, достаточно добавить в Dump интерфейс IStream. Причем выполнение прерывается по идиотской причине: какой-то фильтр проверяет времена сэмпла и выкидывает ошибку.


S>По всей видимости ошибка возникает не в Dump (могу это утверждать с вероятностью 99.9%), а в AVI Mux и пока я не нахожу этому разумных объяснений. Как может file writer влиять на сэмплы, которые до него еще не дошли? Разве что как-то хитро настраивает AVI Mux под себя (недокументированные интерфейсы?).


S>Поэтому вопросы остаются прежние:


S>1. Как вычислить, в каком фильтре возникает ошибка? Выкидывать фильтры по очереди не получается, т.к. мы отлаживаем последний фильтр графа.


S>2. В каком направлении копать? Почему вообще у сэмпла может время начала вдруг стать больше время конца и исключительно если в графе FileWriter заменить на Dump?


Кстати давно не пробовал в дамп писАть — загнал через свой беспотерьный енкодер, и что вы думаете? Все записалось без всяких ошибок. Правда не поднимаеться — голов-то нету.
Теперь стало еще интереснее — кто же валит граф? получается енкодер?
после обеда еще потестю и запостю...
Сергей.
Re[4]: DirectShow: FileWriter vs Dump
От: __sh  
Дата: 13.03.03 08:14
Оценка:
Кстати, я обнаружил, в чем была причина вылетания графа.
Все дело в том, что при использовании FileWriter энкодеры передают AVI Mux'еру сэмплы бОльшего размера. Я не стал разбираться почему, это не так важно.
При замене FileWriter'a на Dump сэмплы уменьшаются и всплывает глюк в одном из энкодеров, который заключается в том, что энкодер выдает два подряд сэмпла, у которых time stamps:
(a1,b1), (a2,b2) и a1 < a2 < b2 < b1.
Я думаю, глюк бы со временем проявился и с FileWriter'ом, на других примерах.

Сергей.
Re[5]: DirectShow: FileWriter vs Dump
От: Sergey A. Sablin Россия http://www.elecard.com
Дата: 13.03.03 08:29
Оценка:
Здравствуйте, __sh, Вы писали:

S>Кстати, я обнаружил, в чем была причина вылетания графа.

S>Все дело в том, что при использовании FileWriter энкодеры передают AVI Mux'еру сэмплы бОльшего размера. Я не стал разбираться почему, это не так важно.
Мой получается честный

S>При замене FileWriter'a на Dump сэмплы уменьшаются и всплывает глюк в одном из энкодеров, который заключается в том, что энкодер выдает два подряд сэмпла, у которых time stamps:

S>(a1,b1), (a2,b2) и a1 < a2 < b2 < b1.

S>Я думаю, глюк бы со временем проявился и с FileWriter'ом, на других примерах.

Пользую давольно давно — ничего подобного с FileWriter'ом еще не происходило... Время покажет.

S>Сергей.

Аналогично
Сергей.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.