[vlc-commits] [Git][videolan/vlc][master] 2 commits: bdagraph: use ComPtr with commong COM objects

Steve Lhomme (@robUx4) gitlab at videolan.org
Wed Jun 1 14:24:43 UTC 2022



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
e133a41a by Steve Lhomme at 2022-06-01T14:12:58+00:00
bdagraph: use ComPtr with commong COM objects

The other COM objects don't have their IID in mingw-w64 so we can't handle them
well with WRL.

- - - - -
0b0eebfe by Steve Lhomme at 2022-06-01T14:12:58+00:00
win32: use IID_PPV_ARGS instead of custom calls

This will avoid a mismatch of the UUID type.

- - - - -


6 changed files:

- modules/access/dshow/crossbar.cpp
- modules/access/dshow/dshow.cpp
- modules/access/dtv/bdagraph.cpp
- modules/access/dtv/bdagraph.hpp
- modules/gui/qt/maininterface/compositor_dcomp.cpp
- modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.cpp


Changes:

=====================================
modules/access/dshow/crossbar.cpp
=====================================
@@ -179,7 +179,7 @@ HRESULT FindCrossbarRoutes( vlc_object_t *p_this, access_sys_t *p_sys,
     }
 
     ComPtr<IAMCrossbar> pXbar;
-    if( FAILED(pinInfo.pFilter->QueryInterface(__uuidof(pXbar.Get()), &pXbar)) )
+    if( FAILED(pinInfo.pFilter->QueryInterface(IID_PPV_ARGS(&pXbar))) )
     {
         pinInfo.pFilter->Release();
         return S_FALSE;


=====================================
modules/access/dshow/dshow.cpp
=====================================
@@ -1259,7 +1259,7 @@ FindCaptureDevice( vlc_object_t *p_this, std::string *p_devicename,
     {
         /* Getting the property page to get the device name */
         ComPtr<IPropertyBag> p_bag;
-        hr = p_moniker->BindToStorage( 0, 0, __uuidof(p_bag.Get()), &p_bag );
+        hr = p_moniker->BindToStorage( 0, 0, IID_PPV_ARGS( &p_bag ) );
         if( SUCCEEDED(hr) )
         {
             VARIANT var;
@@ -1295,7 +1295,7 @@ FindCaptureDevice( vlc_object_t *p_this, std::string *p_devicename,
                 {
                     msg_Dbg( p_this, "asked for %s, binding to %s", p_devicename->c_str() , devname.c_str() ) ;
                     /* NULL possibly means we don't need BindMoniker BindCtx ?? */
-                    hr = p_moniker->BindToObject( NULL, 0, __uuidof(p_base_filter.Get()), &p_base_filter );
+                    hr = p_moniker->BindToObject( NULL, 0, IID_PPV_ARGS( &p_base_filter ) );
                     if( FAILED(hr) )
                     {
                         msg_Err( p_this, "couldn't bind moniker to filter "
@@ -1631,6 +1631,7 @@ static size_t EnumDeviceCaps( vlc_object_t *p_this, ComPtr<IBaseFilter> &p_filte
                     mt[mt_count++] = *p_mt;
 
                     /* Setup a few properties like the audio latency */
+                    // IID_IAMBufferNegotiation in not defined in the mingw header, so can't use __uuidof()
                     ComPtr<IAMBufferNegotiation> p_ambuf;
                     if( SUCCEEDED( p_output_pin->QueryInterface( IID_IAMBufferNegotiation, &p_ambuf ) ) )
                     {
@@ -2119,7 +2120,7 @@ static void ShowDeviceProperties( vlc_object_t *p_this,
 
         hr = p_graph->FindInterface( &PIN_CATEGORY_CAPTURE,
                                      &MEDIATYPE_Audio, p_device_filter.Get(),
-                                     __uuidof(p_SC.Get()), &p_SC );
+                                     IID_PPV_ARGS( &p_SC ) );
         if( SUCCEEDED(hr) )
         {
             ShowPropertyPage(p_SC);
@@ -2129,6 +2130,7 @@ static void ShowDeviceProperties( vlc_object_t *p_this,
          * TV Audio filter
          */
         ComPtr<IAMTVAudio> p_TVA;
+        // IID_IAMTVAudio in not defined in the mingw header, so can't use __uuidof()
         hr = p_graph->FindInterface( &PIN_CATEGORY_CAPTURE,
                                      &MEDIATYPE_Audio, p_device_filter.Get(),
                                      IID_IAMTVAudio, &p_TVA );
@@ -2149,19 +2151,19 @@ static void ShowDeviceProperties( vlc_object_t *p_this,
 
         hr = p_graph->FindInterface( &PIN_CATEGORY_CAPTURE,
                                      &MEDIATYPE_Interleaved, p_device_filter.Get(),
-                                     __uuidof(p_SC.Get()), &p_SC );
+                                     IID_PPV_ARGS( &p_SC ) );
         if( FAILED(hr) )
         {
             hr = p_graph->FindInterface( &PIN_CATEGORY_CAPTURE,
                                          &MEDIATYPE_Video, p_device_filter.Get(),
-                                         __uuidof(p_SC.Get()), &p_SC );
+                                         IID_PPV_ARGS( &p_SC ) );
         }
 
         if( FAILED(hr) )
         {
             hr = p_graph->FindInterface( &PIN_CATEGORY_CAPTURE,
                                          &MEDIATYPE_Stream, p_device_filter.Get(),
-                                         __uuidof(p_SC.Get()), &p_SC );
+                                         IID_PPV_ARGS( &p_SC ) );
         }
 
         if( SUCCEEDED(hr) )


=====================================
modules/access/dtv/bdagraph.cpp
=====================================
@@ -40,6 +40,8 @@
 #include "dtv.h"
 #undef DEBUG_MONIKER_NAME
 
+using Microsoft::WRL::ComPtr;
+
 static ModulationType dvb_parse_modulation (const char *mod)
 {
     if (!strcmp (mod, "16QAM"))   return BDA_MOD_16QAM;
@@ -396,8 +398,6 @@ BDAGraph::BDAGraph( vlc_object_t *p_this ):
     systems(0),
     d_graph_register( 0 )
 {
-    p_media_control = NULL;
-
     p_tuning_space = NULL;
 
     p_filter_graph = NULL;
@@ -1117,11 +1117,11 @@ int BDAGraph::SetDVBT2(long l_frequency, uint32_t fec,
     if( pinInput0)
     {
         msg_Dbg( p_access, "SetDVBT: pin Input0 found on tuner filter, trying to get IKsPropertySet interface for TBS tuner..." );
-        IKsPropertySet* p_ksPropertySet;
-        hr = pinInput0->QueryInterface(IID_IKsPropertySet, reinterpret_cast<void**>(&p_ksPropertySet));
+        ComPtr<IKsPropertySet> p_ksPropertySet;
+        hr = pinInput0->QueryInterface(IID_PPV_ARGS(&p_ksPropertySet));
         if( FAILED( hr ))
         {
-                msg_Dbg( p_access, "SetDVBT: Cannot query for IKsPropertySet (this can be normal if not TBS tuner)  : hr=0x%8lx", hr );
+            msg_Dbg( p_access, "SetDVBT: Cannot query for IKsPropertySet (this can be normal if not TBS tuner)  : hr=0x%8lx", hr );
         }
         else
         {
@@ -1136,7 +1136,6 @@ int BDAGraph::SetDVBT2(long l_frequency, uint32_t fec,
                                       &plp_info,
                                       sizeof( TBS_PLP_INFO ));
                 msg_Dbg( p_access, "SetDVBT: TBS tuner set PLP: %d", plp);
-                p_ksPropertySet->Release();
         }
         pinInput0->Release();
     }
@@ -2353,11 +2352,7 @@ HRESULT BDAGraph::Build()
     }
 
     /* The Media Control is used to Run and Stop the Graph */
-    if( p_media_control )
-        p_media_control->Release();
-    p_media_control = NULL;
-    hr = p_filter_graph->QueryInterface( IID_IMediaControl,
-        reinterpret_cast<void**>( &p_media_control ) );
+    hr = p_filter_graph->QueryInterface(IID_PPV_ARGS(&p_media_control));
     if( FAILED( hr ) )
     {
         msg_Warn( p_access, "Build: "\
@@ -2490,8 +2485,8 @@ HRESULT BDAGraph::ListFilters( REFCLSID this_clsid )
         }
 
         /* l.p_filter is Released at the top of the loop */
-        hr = l.p_moniker->BindToObject( l.p_bind_context, NULL, IID_IBaseFilter,
-            reinterpret_cast<void**>( &l.p_filter ) );
+        hr = l.p_moniker->BindToObject( l.p_bind_context, NULL,
+            IID_PPV_ARGS( &l.p_filter ) );
         if( FAILED( hr ) )
         {
             msg_Dbg( p_access, "ListFilters: "\
@@ -2529,8 +2524,8 @@ HRESULT BDAGraph::ListFilters( REFCLSID this_clsid )
         l.psz_downstream = strdup( "Downstream" );
 #endif
         /* l.p_property_bag is released at the top of the loop */
-        hr = l.p_moniker->BindToStorage( NULL, NULL, IID_IPropertyBag,
-            reinterpret_cast<void**>( &l.p_property_bag ) );
+        hr = l.p_moniker->BindToStorage( NULL, NULL,
+            IID_PPV_ARGS( &l.p_property_bag ) );
         if( FAILED( hr ) )
         {
             msg_Dbg( p_access, "ListFilters: "\
@@ -2682,8 +2677,8 @@ HRESULT BDAGraph::FindFilter( REFCLSID this_clsid, long* i_moniker_used,
 
         msg_Dbg( p_access, "FindFilter: try to create downstream filter");
         *p_p_downstream = NULL;
-        hr = l.p_moniker->BindToObject( l.p_bind_context, NULL, IID_IBaseFilter,
-            reinterpret_cast<void**>( p_p_downstream ) );
+        hr = l.p_moniker->BindToObject( l.p_bind_context, NULL,
+            IID_PPV_ARGS( p_p_downstream ) );
         if( FAILED( hr ) )
         {
             msg_Dbg( p_access, "FindFilter: "\
@@ -2725,7 +2720,7 @@ HRESULT BDAGraph::FindFilter( REFCLSID this_clsid, long* i_moniker_used,
         msg_Dbg( p_access, "FindFilter: "\
             "Moniker name is  %s, binding to storage",  l.psz_downstream );
         hr = l.p_moniker->BindToStorage( l.p_bind_context, NULL,
-            IID_IPropertyBag, reinterpret_cast<void**>( &l.p_property_bag ) );
+                IID_PPV_ARGS( &l.p_property_bag ) );
         if( FAILED( hr ) )
         {
             msg_Dbg( p_access, "FindFilter: "\
@@ -3226,17 +3221,16 @@ HRESULT BDAGraph::Destroy()
     }
 
 //    msg_Dbg( p_access, "Destroy: media control 2" );
-    if( p_media_control )
+    if( p_media_control.Get() )
     {
         msg_Dbg( p_access, "Destroy: release media control" );
-        mem_ref = p_media_control->Release();
+        mem_ref = p_media_control.Reset();
         if( mem_ref != 0 )
         {
             msg_Dbg( p_access, "Destroy: "\
                 "Media control mem_ref: mem_ref=%ld", mem_ref );
         }
         msg_Dbg( p_access, "Destroy: force media control to NULL" );
-        p_media_control = NULL;
     }
 
     d_graph_register = 0;


=====================================
modules/access/dtv/bdagraph.hpp
=====================================
@@ -38,6 +38,8 @@
 #include "bdadefs.h"
 #include <stdexcept>
 
+#include <wrl/client.h>
+
 
 // TBS tuner extension headers
 
@@ -137,7 +139,7 @@ private:
 
     BDAOutput       output;
 
-    IMediaControl*  p_media_control;
+    Microsoft::WRL::ComPtr<IMediaControl> p_media_control;
     IGraphBuilder*  p_filter_graph;
     ITuningSpace*               p_tuning_space;
     ITuneRequest*               p_tune_request;


=====================================
modules/gui/qt/maininterface/compositor_dcomp.cpp
=====================================
@@ -238,7 +238,7 @@ bool CompositorDirectComposition::init()
     m_d3d11Device.As(&dxgiDevice);
 
     // Create the DirectComposition device object.
-    hr = myDCompositionCreateDevice(dxgiDevice.Get(), __uuidof(IDCompositionDevice), &m_dcompDevice);
+    hr = myDCompositionCreateDevice(dxgiDevice.Get(), IID_PPV_ARGS(&m_dcompDevice));
     if (FAILED(hr))
         return false;
 


=====================================
modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.cpp
=====================================
@@ -224,8 +224,7 @@ try
     ComPtr<IDCompositionDevice> dcompDevice1;
     HR(myDCompositionCreateDevice3(
                 dxgiDevice.Get(),
-                __uuidof(IDCompositionDevice),
-                &dcompDevice1), "create composition device");
+                IID_PPV_ARGS(&dcompDevice1)), "create composition device");
 
     HR(dcompDevice1.As(&m_dcompDevice), "dcompdevice not an IDCompositionDevice3");
 



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/9845fe4a2f543457dc183eb9af838da874974981...0b0eebfefdc99ed1597217532ababdd5c7dbf8d2

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/9845fe4a2f543457dc183eb9af838da874974981...0b0eebfefdc99ed1597217532ababdd5c7dbf8d2
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list