FMLE = Flash live media encoder 3.0
i have posted this question on Adobe Forum, but not sure if they have people on that forum with programming experience.
I am a developer writing a video capture and audio capture device. The devices already work in other encoders. The devices are written in directshow. I am integrating with FMLE and encountered this problem.
The audio device doesnt have a usable volume bar in FMLE. The FMLE error is "The selected audio device "censored (company secret)" doesn't allow setting volume intensity. Disabling the volume slider control."
my audio device implements these interfaces along with the standard directshow filter interfaces
- IBasicAudio
- IAMAudioInputMixer
I put tracepoints in queryinterface and found FMLE query's for (my comments in comment string)
- {IID_IUnknown}
- {IID_IPersistPropertyBag}
- {IID_IBaseFilter}
- {IID_IAMOpenProgress}
- {IID_IAMDeviceRemoval}
- {IID_IMediaFilter}
- {IID_IAMBufferNegotiation}
- {IID_IAMStreamConfig}
- {IID_IPin}
- {IID_IReferenceClock}
- {IID_IMediaSeeking}
- {IID_IMediaPosition}
- {IID_IVideoWindow} // WTF ?? query video window ?
- {IID_IBasicAudio}
- {2DD74950-A890-11D1-ABE8-00A0C905F375} // i think this is async stream,
What am i missing ? FMLE doesnt use IAMAudioInputMixer ? Anyone know the exact interface which FMLE uses for Volume intensity ? . .I assumed it was IBasicAudio, but it doesnt seem to call any methods in there.
Answer provided by Ram Gupta of adobe forum.
"FMLE does not query for CLSID_AudioInputMixerProperties interface. FMLE enumerates all the pin of audio source filter(using EnumPins) and then it extracts each pin info using QueryPinInfo Function.
FMLE searches for the audio filter Pin whose direction is PINDIR_INPUT(using QueryPinInfo) and then it queries for IAMAudioInputMixer interface to set the volume level.
Could you pls chk if the following functions are properly implemented -->get_enable: it should set its parameter value to true. -->put_MixLevel -->QueryPinInfo:"
This solution did work. My problem was that because i never declared an input pin (since i dont have any directshow related input).