Я весь в растерянности и нуждаюсь в помощи: я чем дальше, тем меньше соображаю, как работает директшоу
У меня следующая задача: я (грубо говоря) получаю набор картинок, из которых надо сделать видео, и записываю звук, который потом надо подклеить в видео; видео — .avi
Для видео я сделал фильтр (push, правильно?.. тупо по образцу из здк), который берет картинку, делает из нее RGB32 и разные другие телодвижения и отдает ее в семпле (тип семпла я благополучно правильно настроил), в FillBuffer надо установить время семппла: старт = номер кадра * длительность кадра, стоп = старт + длительность кадра
Все как будто бы правильно?
Для звука я согласовываю тип, который нужен компрессору звука, после чего в FillBuffer если надо ресемплю звук и отдаю его семплом следующему фильтру; тут я не знаю как делать правильно, отдаю по 1/4 секунды да и все (там не точно 1/4, если декодируется мр3 например, то там будет слегка больше ведь, если я ориентируюсь по кол-ву декодированных звуковых семплов), для установки времени медиа-семпла я вычисляю продолжительность (samplerate то я знаю) пакета
ЧТо тут может быть неправильно?.. у меня сложности разные:
1) как вставить звук в видео не с самого начала файла, а скажем со сдвигом в 40 сек? как будто бы логично отмечать семплы звука "правильным" временем, а муксер разберется — но нет, звук всегда идет с начала файла (по крайней мере тестил с PCM компрессором.. может это компрессор меняет метки времени как-то дальше — потому что в старых проектах видео с мр3 звуком вроде работало правильно со сдвигом..или в Win7 дело?..)
2) вставляю компрессор PCM — файл создается и все вроде нормально; вставляю компрессор ADPCM (суть в том, чтобы можно было использовать любой из компрессоров, установленных в системе) — после того как звук заканчивается (фильтр-источник звука возвращает s_false) через несколько кадров, выданных источником видео возникает ошибка (80040228 кажется) — "время окончания семпла меньше времени начала" — но такого быть не может: фильтр со звуком больше не работает, фильтр с видео не может выдать время окончания больше времени начала просто потому, что время окончания = время начала + продолжительность (а она не может стать < 0)
Другие компрессоры звука дурят еще как-то, то файл получается в 2 раза длиннее чем должен бы быть, а при проигрывании все "замерзает" или плеер падает..
Шо характерно, с видео вроде проблем нету, а звук дурит.. где-то я неправ, а где — натыкайте носом что-ли..