Здравствуйте, 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:
...
The time stamps on samples delivered to the file writer are byte offsets in the file. The input pin exposes the IStream interface and supports a subset of the interface. This enables the upstream filter to write data when the graph is stopped.
Dump Filter Sample:
...
This filter is a useful debugging tool. For example, you can verify, bit by bit, the results of a transform filter
Dump — просто сэмпл — он не обязан поддерживать все вожможные ситуации и форматы.
Т.к. вы занимаетесь DShow стоит просто запомнить, что avi-шки писать лучше всего именно File Writer-ом, т.к. индексы к avi файлу пишет муксер и Dump просто не позволит ему это сделать. (см.
выше)