home *** CD-ROM | disk | FTP | other *** search
/ The Net: Ultimate Internet Guide / WWLCD1.ISO / mac / SiteBldr / AMOVIE / SDK / _SETUP / COMMON.Z / sampios.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-29  |  5.3 KB  |  187 lines

  1. //==========================================================================;
  2. //
  3. //  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  4. //  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  5. //  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  6. //  PURPOSE.
  7. //
  8. //  Copyright (c) 1992 - 1996  Microsoft Corporation.  All Rights Reserved.
  9. //
  10. //--------------------------------------------------------------------------;
  11.  
  12. /*
  13.     See SampIOS.h for descriptions of these functions
  14.  
  15.     This file is built into SampIOS.lib, which may be linked into your
  16.     executables to supply the various output functions.
  17. */
  18.  
  19. #include <streams.h>
  20. #include <stdio.h>
  21. #include <iostream.h>
  22. #include "SampIOS.h"
  23.  
  24. ostream & operator <<( ostream & out, LPCWSTR pwStr )
  25. {
  26.     const int WideStrLen = lstrlenW(pwStr);
  27.     char *const buffer = new char[WideStrLen+1];
  28.     const int bytes_used =
  29.         WideCharToMultiByte ( CP_ACP, 0, pwStr, WideStrLen
  30.                             , buffer, WideStrLen+1, 0, 0);
  31.     ASSERT( bytes_used != FALSE );
  32.     buffer[bytes_used] = '\0';
  33.     out << buffer;
  34.     delete [] buffer;
  35.     return out;
  36. }
  37.  
  38. ostream & operator <<( ostream & out, const GUID & clsid )
  39. {
  40.     OLECHAR sz_clsid[CHARS_IN_GUID] = L"{Unknown}";
  41.     StringFromGUID2( clsid, sz_clsid, sizeof(sz_clsid)/sizeof(sz_clsid[0]) );
  42.     out << sz_clsid;
  43.     return out;
  44. }
  45.  
  46. ostream & operator <<( ostream & out, const IFilter *const pIFilter )
  47. {
  48.     HRESULT hr;
  49.     {
  50.         FILTER_INFO filter_info;
  51.         filter_info.pGraph = 0;
  52.         hr = const_cast<IFilter *>(pIFilter)->QueryFilterInfo( &filter_info );
  53.         ASSERT( SUCCEEDED(hr) );
  54.         out << '"' << filter_info.achName << '"';
  55.     if (filter_info.pGraph) {
  56.             filter_info.pGraph->Release();
  57.     }
  58.     }
  59.     {
  60.         CLSID clsid;
  61.         hr = const_cast<IFilter *>(pIFilter)->GetClassID( &clsid );
  62.         ASSERT( SUCCEEDED(hr) );
  63.         out << clsid;
  64.     }
  65.     return out;
  66. }
  67.  
  68. ostream & operator <<( ostream & out, const IEnumFilters *const pIEnumFilters )
  69. {
  70.     IFilter * pIFilter;
  71.     ULONG count;
  72.  
  73.     while ( SUCCEEDED(const_cast<IEnumFilters*>(pIEnumFilters)->Next( 1, &pIFilter, &count )) && (count > 0))
  74.     {
  75.         out << pIFilter << '\n';
  76.         pIFilter->Release();
  77.     }
  78.     return out;
  79. }
  80.  
  81. ostream & operator <<( ostream & out, const IPin *const pIPin )
  82. {
  83.     LPWSTR      pin_id;
  84.     PIN_INFO    pin_info;
  85.     const IPin *p_connected_to;
  86.     pin_info.pFilter = 0;
  87.  
  88.     const_cast<IPin*>(pIPin)->QueryPinInfo( &pin_info );
  89.     const_cast<IPin*>(pIPin)->QueryId( &pin_id );
  90.     out << pin_info.pFilter << ':' << pin_id << '(' << pin_info.achName << ')';
  91.     if (pin_info.pFilter) {
  92.         pin_info.pFilter->Release();
  93.     pin_info.pFilter = 0;
  94.     }
  95.     CoTaskMemFree( pin_id );
  96.  
  97.     const_cast<IPin*>(pIPin)->ConnectedTo( const_cast<IPin**>(&p_connected_to) );
  98.     if ( p_connected_to )
  99.     {
  100.         out << (pin_info.dir == PINDIR_OUTPUT ? "-->" : "<--");
  101.         const_cast<IPin*>(p_connected_to)->QueryPinInfo( &pin_info );
  102.         const_cast<IPin*>(p_connected_to)->QueryId( &pin_id );
  103.         out << pin_info.pFilter << ':' << pin_id << '(' << pin_info.achName << ')';
  104.         CoTaskMemFree( pin_id );
  105.         if (pin_info.pFilter) {
  106.             pin_info.pFilter->Release();
  107.         }
  108.         const_cast<IPin*>(p_connected_to)->Release();
  109.     }
  110.     return out;
  111. }
  112.  
  113.  
  114. ostream & operator <<( ostream & out, const IEnumPins *const pIEnumPins )
  115. {
  116.     IPin * pIPin;
  117.     ULONG count;
  118.  
  119.     while ( SUCCEEDED(const_cast<IEnumPins*>(pIEnumPins)->Next( 1, &pIPin, &count )) && (count > 0))
  120.     {
  121.         out << pIPin << '\n';
  122.         pIPin->Release();
  123.     }
  124.     return out;
  125. }
  126.  
  127. ostream & WriteAllPins( ostream & out, const IFilter *const piFilter )
  128. {
  129.     HRESULT hr;
  130.     IEnumPins * pIEnumPins;
  131.     hr = const_cast<IFilter*>(piFilter)->EnumPins( &pIEnumPins );
  132.     ASSERT( SUCCEEDED(hr) );
  133.     out << pIEnumPins << flush;
  134.     pIEnumPins->Release();
  135.     return out;
  136. }
  137.  
  138. ostream & operator <<( ostream & out, const IFilterGraph *const piFilterGraph )
  139. {
  140.     IEnumFilters * pIEnumFilters;
  141.     HRESULT hr = const_cast<IFilterGraph*>(piFilterGraph)->EnumFilters( &pIEnumFilters );
  142.     ASSERT( SUCCEEDED(hr) );
  143.  
  144.     IFilter * pIFilter;
  145.     ULONG count;
  146.  
  147.     while ( SUCCEEDED(const_cast<IEnumFilters*>(pIEnumFilters)->Next( 1, &pIFilter, &count )) && (count > 0))
  148.     {
  149.         out << pIFilter << '\n';
  150.         WriteAllPins( out, pIFilter );
  151.         pIFilter->Release();
  152.     }
  153.     pIEnumFilters->Release();
  154.  
  155.     return out << endl;
  156. }
  157.  
  158. extern "C" void DumpFilterInfo( const IFilter * pIFilter )
  159. {
  160.     cout << pIFilter << endl;
  161. }
  162.  
  163. extern "C" void DumpAllFilters( const IFilterGraph * piFilterGraph )
  164. {
  165.     HRESULT hr;
  166.     IEnumFilters * pIEnumFilters;
  167.     hr = const_cast<IFilterGraph*>(piFilterGraph)->EnumFilters( &pIEnumFilters );
  168.     ASSERT( SUCCEEDED(hr) );
  169.     cout << pIEnumFilters << flush;
  170.     pIEnumFilters->Release();
  171. }
  172.  
  173. extern "C" void DumpPinInfo( const IPin * pIPin )
  174. {
  175.     cout << pIPin << endl;
  176. }
  177.  
  178. extern "C" void DumpAllPins( const IFilter * piFilter )
  179. {
  180.     WriteAllPins( cout, piFilter );
  181. }
  182.  
  183. extern "C" void DumpFilterGraph( const IFilterGraph * piFilterGraph )
  184. {
  185.     cout << piFilterGraph << flush;
  186. }
  187.