Имя:
Пароль:
-- ИЛИ --
Войти, используя:

Форум   Общая тематика и компьютеры   Программирование

не показываются диалоги аудио кодеков

 
Пост #38227 от 27 ноября 2006, 16:54 

msd

вызываю функцию для показа диалогов свойств фильтров. Для видео кодеков диалоги нормально показываются, а для аудио нет - почему?
код был откуда то взят (скорее всего с этого сайта) и выглядит примерно так:

HRESULT ShowFilterDialog(HWND Owner, IUnknown* pFilter)
{
ISpecifyPropertyPages* pPP = NULL;
HRESULT HResult = pFilter->QueryInterface(IID_ISpecifyPropertyPages,
(void**)&pPP);
if (HResult == S_OK)
{
CAUUID auuid;
HResult = pPP->GetPages(&auuid);
pPP->Release();
if (HResult == S_OK)
{
WCHAR wFile[MAX_PATH];
wcscpy(wFile, L"свойства фильтра");

HResult = OleCreatePropertyFrame(Owner, 30, 30, wFile, 1, &pFilter,
auuid.cElems, auuid.pElems, 0, 0, 0);
}
CoTaskMemFree(auuid.pElems);
}
return HResult;
};
Отправить личное сообщениеПрофиль пользователяРоссия
Москва
Постов: 40
Нарушений: Нет
Пост #38231 от 27 ноября 2006, 17:44 

Vlafy

msd
А если так попробовать:

IAMVfwCompressDialogs *pVfWProp=NULL;
hr = pFilter->QueryInterface(IID_IAMVfwCompressDialogs, (void **)&pVfWProp);
if (hr==S_OK && pVfWProp) pVfWProp->ShowDialog(VfwCompressDialog_Config, Handle);
SAFE_RELEASE(pVfWProp);
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #38366 от 29 ноября 2006, 20:27 

msd

пробовал, не получается, но может быть надо совсем по другому делать? Диалоги аудио кодеков я хотел использовать для выбора параметров кодирования(степень сжатия например). Но посмотрев на штатную программу захвата для тюнера Gotview, можно сделать вывод, что это делается как то по другому:
выбор "Сжатия звука" - появляется диалог, в котором выбирается формат сжатия (PCM, MPEG Layer-3, IMA ADPCM, и т.п.) и атрибуты (например 56 кБит/с, 16.000Hz, Stereo 6КБ/с). Как это можно реализовать?
Отправить личное сообщениеПрофиль пользователяРоссия
Москва
Постов: 40
Нарушений: Нет
Пост #38367 от 29 ноября 2006, 20:43 

Sergey Andyk

acmFormatChoose
Отправить личное сообщениеПрофиль пользователяБлог пользователяWeb-сайт пользователяРоссия
Tomsk
Постов: 131
Нарушений: Нет
Пост #38469 от 1 декабря 2006, 14:01 

msd

посмотрел на пример в SDK с использованием acmFormatChoose - сам пример не удалось скомпилировать, а запустив exe этого примера (в SDK присутствуют готовые файлы примеров) , в меню не обнаружил соответствующих вызовов (это пример AMCap). Попробовал взять соответствующие коды оттуда и добавил в свою программу. Почему то в диалоге, который отображается присутствует только формат PCM, а где же другие? И потом, непонятно как корректно пользоваться этой функцией, поскольку, судя по кодам, корректируются данные, относящиеся к устройству захвата, а не к кодеку, который сам посебе присутствует в графе - чего то я не понимаю.
Отправить личное сообщениеПрофиль пользователяРоссия
Москва
Постов: 40
Нарушений: Нет
Пост #38776 от 8 декабря 2006, 11:30 

msd

так ничего и не прояснилось - мне необходимо в своей программе устанавливать параметры аудио кодека, например, если это MPEG Layer3 - устанавливать битрейт. Я предполагал, что это можно сделать, вызвав стандартный диалог свойств кодека. Этот вариант не получился - хотя с видео кодеками это нормально проходит. Подскажите, как быть?
Программа строит граф из TVTuner-а, Captur-а, видео и аудио кодеков и Writer-а (ну и плюс еще некоторые вспомогательные фильтры) - все элементы пройдены, остался один (?) непроходимый момент связанный с установкой параметров аудио компрессора.
Отправить личное сообщениеПрофиль пользователяРоссия
Москва
Постов: 40
Нарушений: Нет
Пост #39345 от 22 декабря 2006, 10:48 

msd

наконец то удалось как то решить эту проблему - получить список форматов аудио кодека и установить один из них. Но вот вопрос: пока кодек не включен в граф, список форматов один, а когда граф построен, список сокращается (это все для кодека MPEG Layer3). Посмотрел как работают другие программы: iuVCR показывает все форматы, те которые у меня получаются при неподключенном кодеке и как будто нормально работает со всеми этими форматами. VirtualDUB показывает и сокращенный список и полный - там есть галочка "Show all formats", и эта галочка иногда доступна, иногда нет, зависит от того файла, который загружен. Если этот переключатель доступен и включив его, выбрать один из появившихся форматов, при попытке перекодирования возникает ошибка, т.е. получается, что выбранный формат не поддерживается. В общем чего то я сильно не понимаю. Объясните, пожалуйста, как все таки правильно с этим работать.
Отправить личное сообщениеПрофиль пользователяРоссия
Москва
Постов: 40
Нарушений: Нет
Пост #39354 от 22 декабря 2006, 12:57 

Vlafy

msd
Ну то, что форматы разные - это нормально. Потому что выходные форматы зависят от входного. У меня, например, в MP3 кодеке тоже не все форматы работают. Приходится несколько раз выбирать, прежде чем заработает. Поэтому я им не пользуюсь, только для экспериментов.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #39358 от 22 декабря 2006, 13:25 

msd

а какой аудио кодек "правильно" выбирать, чтобы не было этих сложностей?
Отправить личное сообщениеПрофиль пользователяРоссия
Москва
Постов: 40
Нарушений: Нет
Пост #39359 от 22 декабря 2006, 14:35 

Vlafy

msd
Тут виноват не MP3 сам по себе, а конкретная реализация кодека. Может быть другая реализация будет лучше работать. Я пробовал пару штук, обе глючили, да ещё и мешали друг другу.
Поэтому я либо захватываю в PCM, если нужна дальнейшая обработка, либо в WMA (но тогда и видео в WMV).
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #59689 от 1 февраля 2009, 06:12 

Rainstuff

У меня 2 вопроса:
1) Как в диалоге acmFormatChoose(fc) задаётся формат по умолчанию?
Я так понял за это отвечает fc.pwfx.wFormatTag :=$31; //устанавливает по дефолту GSM6.10
Что это за число и как оно привязано к формату?
2) Как, собственно, применить формат, полученный на выходе acmFormatChoose(fc) к аудио-фильтру
сжатия? Если я просто присоединяю фильтр сжатия, например MP3, то пишется в MP3 с дефолтными настройками.
Спасибо.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяРоссия
Н.Новгород
Постов: 30
Нарушений: Нет
Пост #59730 от 3 февраля 2009, 18:10 

Rainstuff

По поводу второго вопроса , кажись, сам нашёл:

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() то, что нужно:)
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяРоссия
Н.Новгород
Постов: 30
Нарушений: Нет
Если Вы зарегистрированы, то для отправки сообщений, пожалуйста, авторизуйтесь.
-- ИЛИ --
Войдите, используя: Facebook Twitter Yandex Вконтакте Mail.ru ...
Страница создана за 0.043 секунды
Copyright © 1999-2012 PcTuner.Ru · Design by Alex Dovby