вызываю функцию для показа диалогов свойств фильтров. Для видео кодеков диалоги нормально показываются, а для аудио нет - почему?
код был откуда то взят (скорее всего с этого сайта) и выглядит примерно так:
пробовал, не получается, но может быть надо совсем по другому делать? Диалоги аудио кодеков я хотел использовать для выбора параметров кодирования(степень сжатия например). Но посмотрев на штатную программу захвата для тюнера Gotview, можно сделать вывод, что это делается как то по другому:
выбор "Сжатия звука" - появляется диалог, в котором выбирается формат сжатия (PCM, MPEG Layer-3, IMA ADPCM, и т.п.) и атрибуты (например 56 кБит/с, 16.000Hz, Stereo 6КБ/с). Как это можно реализовать?
посмотрел на пример в SDK с использованием acmFormatChoose - сам пример не удалось скомпилировать, а запустив exe этого примера (в SDK присутствуют готовые файлы примеров) , в меню не обнаружил соответствующих вызовов (это пример AMCap). Попробовал взять соответствующие коды оттуда и добавил в свою программу. Почему то в диалоге, который отображается присутствует только формат PCM, а где же другие? И потом, непонятно как корректно пользоваться этой функцией, поскольку, судя по кодам, корректируются данные, относящиеся к устройству захвата, а не к кодеку, который сам посебе присутствует в графе - чего то я не понимаю.
так ничего и не прояснилось - мне необходимо в своей программе устанавливать параметры аудио кодека, например, если это MPEG Layer3 - устанавливать битрейт. Я предполагал, что это можно сделать, вызвав стандартный диалог свойств кодека. Этот вариант не получился - хотя с видео кодеками это нормально проходит. Подскажите, как быть?
Программа строит граф из TVTuner-а, Captur-а, видео и аудио кодеков и Writer-а (ну и плюс еще некоторые вспомогательные фильтры) - все элементы пройдены, остался один (?) непроходимый момент связанный с установкой параметров аудио компрессора.
наконец то удалось как то решить эту проблему - получить список форматов аудио кодека и установить один из них. Но вот вопрос: пока кодек не включен в граф, список форматов один, а когда граф построен, список сокращается (это все для кодека MPEG Layer3). Посмотрел как работают другие программы: iuVCR показывает все форматы, те которые у меня получаются при неподключенном кодеке и как будто нормально работает со всеми этими форматами. VirtualDUB показывает и сокращенный список и полный - там есть галочка "Show all formats", и эта галочка иногда доступна, иногда нет, зависит от того файла, который загружен. Если этот переключатель доступен и включив его, выбрать один из появившихся форматов, при попытке перекодирования возникает ошибка, т.е. получается, что выбранный формат не поддерживается. В общем чего то я сильно не понимаю. Объясните, пожалуйста, как все таки правильно с этим работать.
msd
Ну то, что форматы разные - это нормально. Потому что выходные форматы зависят от входного. У меня, например, в MP3 кодеке тоже не все форматы работают. Приходится несколько раз выбирать, прежде чем заработает. Поэтому я им не пользуюсь, только для экспериментов.
msd
Тут виноват не MP3 сам по себе, а конкретная реализация кодека. Может быть другая реализация будет лучше работать. Я пробовал пару штук, обе глючили, да ещё и мешали друг другу.
Поэтому я либо захватываю в PCM, если нужна дальнейшая обработка, либо в WMA (но тогда и видео в WMV).
У меня 2 вопроса:
1) Как в диалоге acmFormatChoose(fc) задаётся формат по умолчанию?
Я так понял за это отвечает fc.pwfx.wFormatTag :=$31; //устанавливает по дефолту GSM6.10
Что это за число и как оно привязано к формату?
2) Как, собственно, применить формат, полученный на выходе acmFormatChoose(fc) к аудио-фильтру
сжатия? Если я просто присоединяю фильтр сжатия, например MP3, то пишется в MP3 с дефолтными настройками.
Спасибо.
Once the desired codec is instantiated, we can obtain an IBaseFilter interface for filter configuration. Since each IBaseFilter have one or more Pin, we have to search the output Pin by the use of the IEnumPins interface and IPin::QueryDirection() calls.
With the output Pin, we can query the IAMStreamConfig interface to configure the following property :
Numbers of channels,
Samples per second,
Average byte per second,
Bits per sample.
Note : For some codecs (including MP3), the call to IAMStreamConfig::SetFormat() must be after the graph rendering.
Вобщем, IAMStreamConfig::SetFormat() то, что нужно:)