qtmobility/plugins/multimedia/directshow/player/directshowaudioendpointcontrol.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 11 06b8e2af4411
equal deleted inserted replaced
1:2b40d63a9c3d 4:90517678cc4f
    50     , m_service(service)
    50     , m_service(service)
    51     , m_bindContext(0)
    51     , m_bindContext(0)
    52     , m_deviceEnumerator(0)
    52     , m_deviceEnumerator(0)
    53 {
    53 {
    54     if (CreateBindCtx(0, &m_bindContext) == S_OK) {
    54     if (CreateBindCtx(0, &m_bindContext) == S_OK) {
    55         m_deviceEnumerator = com_new<ICreateDevEnum>(CLSID_SystemDeviceEnum);
    55         m_deviceEnumerator = com_new<ICreateDevEnum>(CLSID_SystemDeviceEnum, IID_ICreateDevEnum);
    56 
    56 
    57         updateEndpoints();
    57         updateEndpoints();
    58 
    58 
    59         setActiveEndpoint(m_defaultEndpoint);
    59         setActiveEndpoint(m_defaultEndpoint);
    60     }
    60     }
    77     return m_devices.keys();
    77     return m_devices.keys();
    78 }
    78 }
    79 
    79 
    80 QString DirectShowAudioEndpointControl::endpointDescription(const QString &name) const
    80 QString DirectShowAudioEndpointControl::endpointDescription(const QString &name) const
    81 {
    81 {
       
    82 #ifdef __IPropertyBag_INTERFACE_DEFINED__
       
    83     QString description;
       
    84 
       
    85     if (IMoniker *moniker = m_devices.value(name, 0)) {
       
    86         IPropertyBag *propertyBag = 0;
       
    87         if (SUCCEEDED(moniker->BindToStorage(
       
    88                 0, 0, IID_IPropertyBag, reinterpret_cast<void **>(&propertyBag)))) {
       
    89             VARIANT name;
       
    90             VariantInit(&name);
       
    91             if (SUCCEEDED(propertyBag->Read(L"FriendlyName", &name, 0)))
       
    92                 description = QString::fromWCharArray(name.bstrVal);
       
    93             VariantClear(&name);
       
    94             propertyBag->Release();
       
    95         }
       
    96     }
       
    97 
       
    98     return description;
       
    99 #else
    82     return name.section(QLatin1Char('\\'), -1);
   100     return name.section(QLatin1Char('\\'), -1);
       
   101 #endif
    83 }
   102 }
    84 
   103 
    85 QString DirectShowAudioEndpointControl::defaultEndpoint() const
   104 QString DirectShowAudioEndpointControl::defaultEndpoint() const
    86 {
   105 {
    87     return m_defaultEndpoint;
   106     return m_defaultEndpoint;
   101         IBaseFilter *filter = 0;
   120         IBaseFilter *filter = 0;
   102 
   121 
   103         if (moniker->BindToObject(
   122         if (moniker->BindToObject(
   104                 m_bindContext,
   123                 m_bindContext,
   105                 0,
   124                 0,
   106                 __uuidof(IBaseFilter),
   125                 IID_IBaseFilter,
   107                 reinterpret_cast<void **>(&filter)) == S_OK) {
   126                 reinterpret_cast<void **>(&filter)) == S_OK) {
   108             m_service->setAudioOutput(filter);
   127             m_service->setAudioOutput(filter);
   109 
   128 
   110             filter->Release();
   129             filter->Release();
   111         }
   130         }