Axextend.Idl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:160k
源码类别:

模拟服务器

开发平台:

C/C++

  1.         //Get the pan for this channel
  2.         HRESULT get_Pan (
  3.                     [out] double *pPan);
  4. // Boosts the bass of low volume signals before they are recorded
  5. // to compensate for the fact that your ear has trouble hearing quiet
  6. // bass sounds
  7.         HRESULT put_Loudness (
  8.     [in] BOOL fLoudness);// TRUE=on FALSE=off
  9.         HRESULT get_Loudness (
  10.     [out] BOOL *pfLoudness);
  11. // boosts or cuts the treble of the signal before it's recorded by
  12. // a certain amount of dB
  13.         HRESULT put_Treble (
  14.                     [in] double Treble); // gain in dB (-ve = attenuate)
  15.         //Get the treble EQ for this channel
  16.         HRESULT get_Treble (
  17.                     [out] double *pTreble);
  18. // This is the maximum value allowed in put_Treble.  ie 6.0 means
  19. // any value between -6.0 and 6.0 is allowed
  20.         HRESULT get_TrebleRange (
  21.                     [out] double *pRange); // largest value allowed
  22. // boosts or cuts the bass of the signal before it's recorded by
  23. // a certain amount of dB
  24.         HRESULT put_Bass (
  25.                     [in] double Bass); // gain in dB (-ve = attenuate)
  26.         // Get the bass EQ for this channel
  27.         HRESULT get_Bass (
  28.                     [out] double *pBass);
  29. // This is the maximum value allowed in put_Bass.  ie 6.0 means
  30. // any value between -6.0 and 6.0 is allowed
  31.         HRESULT get_BassRange (
  32.                     [out] double *pRange); // largest value allowed
  33.     }
  34.     //---------------------------------------------------------------------
  35.     // IAMBufferNegotiation interface
  36.     //
  37.     // Tells a pin what kinds of buffers to use when connected
  38.     //---------------------------------------------------------------------
  39.     // This interface can be implemented by any pin that will connect to
  40.     // another pin using IMemInputPin.  All capture filters should support
  41.     // this interface.
  42.     // SuggestAllocatorProperties is a way for an application to get
  43.     // in on the buffer negotiation process for a pin.  This pin will use
  44.     // the numbers given to it by the application as its request to the
  45.     // allocator.  An application can use a negative number for any element
  46.     // in the ALLOCATOR_PROPERTIES to mean "don't care".  An application must
  47.     // call this function before the pin is connected, or it will be too late
  48.     // To ensure that an application gets what it wants, it would be wise to
  49.     // call this method on both pins being connected together, so the other
  50.     // pin doesn't overrule the application's request.
  51.     // GetAllocatorProperties can only be called after a pin is connected and
  52.     // it returns the properties of the current allocator being used
  53.     [
  54. object,
  55.         uuid(56ED71A0-AF5F-11D0-B3F0-00AA003761C5),
  56.         pointer_default(unique)
  57.     ]
  58.     interface IAMBufferNegotiation : IUnknown
  59.     {
  60.         HRESULT SuggestAllocatorProperties (
  61.     [in] const ALLOCATOR_PROPERTIES *pprop);
  62.         HRESULT GetAllocatorProperties (
  63.     [out] ALLOCATOR_PROPERTIES *pprop);
  64.     }
  65.     //---------------------------------------------------------------------
  66.     // AnalogVideoStandard enum
  67.     //---------------------------------------------------------------------
  68.     typedef enum tagAnalogVideoStandard
  69.     {
  70.         AnalogVideo_None     = 0x00000000,  // This is a digital sensor
  71.         AnalogVideo_NTSC_M   = 0x00000001,  //        75 IRE Setup
  72.         AnalogVideo_NTSC_M_J = 0x00000002,  // Japan,  0 IRE Setup
  73.         AnalogVideo_NTSC_433 = 0x00000004,
  74.         AnalogVideo_PAL_B    = 0x00000010,
  75.         AnalogVideo_PAL_D    = 0x00000020,
  76.         AnalogVideo_PAL_G    = 0x00000040,
  77.         AnalogVideo_PAL_H    = 0x00000080,
  78.         AnalogVideo_PAL_I    = 0x00000100,
  79.         AnalogVideo_PAL_M    = 0x00000200,
  80.         AnalogVideo_PAL_N    = 0x00000400,
  81.         AnalogVideo_PAL_60   = 0x00000800,
  82.         AnalogVideo_SECAM_B  = 0x00001000,
  83.         AnalogVideo_SECAM_D  = 0x00002000,
  84.         AnalogVideo_SECAM_G  = 0x00004000,
  85.         AnalogVideo_SECAM_H  = 0x00008000,
  86.         AnalogVideo_SECAM_K  = 0x00010000,
  87.         AnalogVideo_SECAM_K1 = 0x00020000,
  88.         AnalogVideo_SECAM_L  = 0x00040000,
  89.         AnalogVideo_SECAM_L1 = 0x00080000,
  90.         AnalogVideo_PAL_N_COMBO             // Argentina
  91.                              = 0x00100000
  92.     } AnalogVideoStandard;
  93.     cpp_quote("#define AnalogVideo_NTSC_Mask  0x00000007")
  94.     cpp_quote("#define AnalogVideo_PAL_Mask   0x00100FF0")
  95.     cpp_quote("#define AnalogVideo_SECAM_Mask 0x000FF000")
  96.     //---------------------------------------------------------------------
  97.     // TunerInputType enum
  98.     //---------------------------------------------------------------------
  99.     typedef enum tagTunerInputType
  100.     {
  101.         TunerInputCable,
  102.         TunerInputAntenna
  103.     } TunerInputType;
  104.     //---------------------------------------------------------------------
  105.     // VideoCopyProtectionType enum
  106.     //---------------------------------------------------------------------
  107.     typedef enum
  108.     {
  109.         VideoCopyProtectionMacrovisionBasic,
  110.         VideoCopyProtectionMacrovisionCBI
  111.     } VideoCopyProtectionType;
  112.     //---------------------------------------------------------------------
  113.     // PhysicalConnectorType enum
  114.     //---------------------------------------------------------------------
  115.     typedef enum tagPhysicalConnectorType
  116.     {
  117.         PhysConn_Video_Tuner = 1,
  118.         PhysConn_Video_Composite,
  119.         PhysConn_Video_SVideo,
  120.         PhysConn_Video_RGB,
  121.         PhysConn_Video_YRYBY,
  122.         PhysConn_Video_SerialDigital,
  123.         PhysConn_Video_ParallelDigital,
  124.         PhysConn_Video_SCSI,
  125.         PhysConn_Video_AUX,
  126.         PhysConn_Video_1394,
  127.         PhysConn_Video_USB,
  128.         PhysConn_Video_VideoDecoder,
  129.         PhysConn_Video_VideoEncoder,
  130.         PhysConn_Video_SCART,
  131.         PhysConn_Video_Black,
  132.         PhysConn_Audio_Tuner = 0x1000,
  133.         PhysConn_Audio_Line,
  134.         PhysConn_Audio_Mic,
  135.         PhysConn_Audio_AESDigital,
  136.         PhysConn_Audio_SPDIFDigital,
  137.         PhysConn_Audio_SCSI,
  138.         PhysConn_Audio_AUX,
  139.         PhysConn_Audio_1394,
  140.         PhysConn_Audio_USB,
  141.         PhysConn_Audio_AudioDecoder,
  142.     } PhysicalConnectorType;
  143.     //---------------------------------------------------------------------
  144.     // IAMAnalogVideoDecoder interface
  145.     //---------------------------------------------------------------------
  146.     [
  147. object,
  148.         uuid(C6E13350-30AC-11d0-A18C-00A0C9118956),
  149. pointer_default(unique)
  150.     ]
  151.     interface IAMAnalogVideoDecoder : IUnknown
  152.     {
  153.          //Gets the supported analog video standards (NTSC/M, PAL/B, SECAM/K1...
  154.         HRESULT get_AvailableTVFormats(
  155.                     [out] long *lAnalogVideoStandard
  156.                     );
  157.         //Sets or gets the current analog video standard (NTSC/M, PAL/B, SECAM/K1, ...
  158.         HRESULT put_TVFormat(
  159.                     [in] long lAnalogVideoStandard
  160.                     );
  161.         // Sets or gets the current analog video standard (NTSC/M, PAL/B, SECAM/K1, ...
  162.         HRESULT get_TVFormat(
  163.                     [out] long * plAnalogVideoStandard
  164.                     );
  165.         // True if horizontal sync is locked
  166.         HRESULT get_HorizontalLocked (
  167.                     [out] long * plLocked);
  168.         // True if connected to a VCR (changes PLL timing)
  169.         HRESULT put_VCRHorizontalLocking (
  170.                     [in] long lVCRHorizontalLocking);
  171.         HRESULT get_VCRHorizontalLocking (
  172.                     [out] long * plVCRHorizontalLocking);
  173.         // Returns the number of lines in the video signal")]
  174.         HRESULT get_NumberOfLines (
  175.                     [out] long *plNumberOfLines);
  176.         // Enables or disables the output bus
  177.         HRESULT put_OutputEnable (
  178.                     [in] long lOutputEnable);
  179.         HRESULT get_OutputEnable (
  180.                     [out] long *plOutputEnable);
  181.     }
  182.     //---------------------------------------------------------------------
  183.     // VideoProcAmp Property enum
  184.     //---------------------------------------------------------------------
  185.     typedef enum tagVideoProcAmpProperty
  186.     {
  187.         VideoProcAmp_Brightness,
  188.         VideoProcAmp_Contrast,
  189.         VideoProcAmp_Hue,
  190.         VideoProcAmp_Saturation,
  191.         VideoProcAmp_Sharpness,
  192.         VideoProcAmp_Gamma,
  193.         VideoProcAmp_ColorEnable,
  194.         VideoProcAmp_WhiteBalance,
  195.         VideoProcAmp_BacklightCompensation,
  196.         VideoProcAmp_Gain
  197.     } VideoProcAmpProperty;
  198.     //---------------------------------------------------------------------
  199.     // VideoProcAmp Flags enum
  200.     //---------------------------------------------------------------------
  201.     typedef enum tagVideoProcAmpFlags
  202.     {
  203.         VideoProcAmp_Flags_Auto   = 0x0001,
  204.         VideoProcAmp_Flags_Manual = 0x0002
  205.     } VideoProcAmpFlags;
  206.     //---------------------------------------------------------------------
  207.     // IAMVideoProcAmp interface
  208.     //
  209.     // Adjusts video quality in either the analog or digital domain.
  210.     //
  211.     //---------------------------------------------------------------------
  212.     [
  213. object,
  214.         uuid(C6E13360-30AC-11d0-A18C-00A0C9118956),
  215. pointer_default(unique)
  216.     ]
  217.     interface IAMVideoProcAmp : IUnknown
  218.     {
  219.         // Returns min, max, step size, and default values
  220.         HRESULT GetRange(
  221.     [in] long Property,         // Which property to query
  222.     [out] long * pMin,          // Range minimum
  223.     [out] long * pMax,          // Range maxumum
  224.     [out] long * pSteppingDelta,// Step size
  225.     [out] long * pDefault,      // Default value
  226.     [out] long * pCapsFlags     // VideoProcAmpFlags
  227.         );
  228.         // Set a VideoProcAmp property
  229.         HRESULT Set(
  230.     [in]  long Property,        // VideoProcAmpProperty
  231.     [in]  long lValue,          // Value to set
  232.     [in]  long Flags            // VideoProcAmp_Flags_*
  233.         );
  234.         // Get a VideoProcAmp property
  235.         HRESULT Get(
  236.     [in]  long Property,        // VideoProcAmpProperty
  237.     [out] long * lValue,        // Current value
  238.     [out] long * Flags          // VideoProcAmp_Flags_*
  239.         );
  240.     }
  241.     //---------------------------------------------------------------------
  242.     // CameraControl Property enum
  243.     //---------------------------------------------------------------------
  244.     typedef enum tagCameraControlProperty
  245.     {
  246.         CameraControl_Pan,
  247.         CameraControl_Tilt,
  248.         CameraControl_Roll,
  249.         CameraControl_Zoom,
  250.         CameraControl_Exposure,
  251.         CameraControl_Iris,
  252.         CameraControl_Focus
  253.     } CameraControlProperty;
  254.     //---------------------------------------------------------------------
  255.     // CameraControl Flags enum
  256.     //---------------------------------------------------------------------
  257.     typedef enum tagCameraControlFlags
  258.     {
  259.         CameraControl_Flags_Auto     = 0x0001,
  260.         CameraControl_Flags_Manual   = 0x0002
  261.     } CameraControlFlags;
  262.     //---------------------------------------------------------------------
  263.     // IAMCameraControl interface
  264.     //
  265.     // Control of local or remote cameras
  266.     //---------------------------------------------------------------------
  267.     [
  268. object,
  269.         uuid(C6E13370-30AC-11d0-A18C-00A0C9118956),
  270. pointer_default(unique)
  271.     ]
  272.     interface IAMCameraControl : IUnknown
  273.     {
  274.         // Returns min, max, step size, and default values
  275.         HRESULT GetRange(
  276.     [in] long Property,         // Which property to query
  277.     [out] long * pMin,          // Range minimum
  278.     [out] long * pMax,          // Range maxumum
  279.     [out] long * pSteppingDelta,// Step size
  280.     [out] long * pDefault,      // Default value
  281.     [out] long * pCapsFlags     // CamaeraControlFlags
  282.         );
  283.         // Set a CameraControl property
  284.         HRESULT Set(
  285.     [in]  long Property,        // CameraControlProperty
  286.     [in]  long lValue,          // Value to set
  287.     [in]  long Flags            // CameraControl_Flags_*
  288.         );
  289.         // Get a CameraControl property
  290.         HRESULT Get(
  291.     [in]  long Property,        // CameraControlProperty
  292.     [out] long * lValue,        // Current value
  293.     [out] long * Flags          // CameraControl_Flags_*
  294.         );
  295.     }
  296.     //---------------------------------------------------------------------
  297.     // VideoControl Flags enum
  298.     //---------------------------------------------------------------------
  299.     typedef enum tagVideoControlFlags
  300.     {
  301.         VideoControlFlag_FlipHorizontal        = 0x0001,
  302.         VideoControlFlag_FlipVertical          = 0x0002,
  303.         VideoControlFlag_ExternalTriggerEnable = 0x0004,
  304.         VideoControlFlag_Trigger               = 0x0008
  305.     } VideoControlFlags;
  306.     //---------------------------------------------------------------------
  307.     // IAMVideoControl interface
  308.     //
  309.     // Control of horizontal & vertical flip, external trigger,
  310.     // and listing available frame rates
  311.     //---------------------------------------------------------------------
  312.     [
  313. object,
  314.         uuid(6a2e0670-28e4-11d0-a18c-00a0c9118956),
  315. pointer_default(unique)
  316.     ]
  317.     interface IAMVideoControl : IUnknown
  318.     {
  319.         // What can the underlying hardware do?
  320.         HRESULT GetCaps(
  321.             [in]  IPin * pPin,          // the pin to query or control
  322.     [out] long * pCapsFlags     // VideoControlFlag_*
  323.         );
  324.         // Set the mode of operation
  325.         HRESULT SetMode(
  326.             [in]  IPin * pPin,          // the pin to query or control
  327.     [in]  long Mode             // VideoControlFlag_*
  328.         );
  329.         // Get the mode of operation
  330.         HRESULT GetMode(
  331.             [in]  IPin * pPin,          // the pin to query or control
  332.     [out] long * Mode           // VideoControlFlag_*
  333.         );
  334.         // Get actual frame rate info for USB and 1394
  335.         // This is only available when streaming
  336.         HRESULT GetCurrentActualFrameRate(
  337.             [in]  IPin * pPin,                  // the pin to query or control
  338.     [out] LONGLONG * ActualFrameRate    // 100 nS units
  339.         );
  340.         // Get max available frame rate info for USB and 1394
  341.         // Returns the max frame rate currently available based on bus bandwidth usage
  342.         HRESULT GetMaxAvailableFrameRate(
  343.             [in]  IPin * pPin,          // the pin to query or control
  344.         [in]  long iIndex,          // 0 to IAMStreamConfig->GetNumberOfCapabilities-1
  345.             [in]  SIZE Dimensions,      // width and height
  346.     [out] LONGLONG * MaxAvailableFrameRate  // 100 nS units
  347.         );
  348.         // Get List of available frame rates
  349.         HRESULT GetFrameRateList(
  350.             [in]  IPin * pPin,           // the pin to query or control
  351.         [in]  long iIndex,           // 0 to IAMStreamConfig->GetNumberOfCapabilities-1
  352.             [in]  SIZE Dimensions,       // width and height
  353.     [out] long * ListSize,       // Number of elements in the list
  354.     [out] LONGLONG ** FrameRates // Array of framerates in 100 nS units
  355.                                          // or NULL to just get ListSize
  356.         );
  357.     }
  358.     //---------------------------------------------------------------------
  359.     // IAMCrossbar interface
  360.     //
  361.     // Controls a routing matrix for analog or digital video or audio
  362.     //---------------------------------------------------------------------
  363.     [
  364. object,
  365.         uuid(C6E13380-30AC-11d0-A18C-00A0C9118956),
  366. pointer_default(unique)
  367.     ]
  368.     interface IAMCrossbar : IUnknown
  369.     {
  370.         // How many pins are there?
  371.         HRESULT get_PinCounts(
  372.                 [out] long * OutputPinCount,        // count of output pins
  373.                 [out] long * InputPinCount);        // count of input pins
  374.         // True if routing is possible
  375.         HRESULT CanRoute (
  376.                 [in]  long OutputPinIndex,          // the output pin
  377.                 [in]  long InputPinIndex);          // the input pin
  378.         // Routes an input pin to an output pin
  379.         HRESULT Route (
  380.                 [in]  long OutputPinIndex,          // the output pin
  381.                 [in]  long InputPinIndex);          // the input pin
  382.         // Returns the input pin connected to a given output pin
  383.         HRESULT get_IsRoutedTo (
  384.                 [in]  long OutputPinIndex,          // the output pin
  385.                 [out] long * InputPinIndex);        // the connected input pin
  386.         // Returns a pin which is related to a given pin
  387.         // (ie. this audio pin is related to a video pin)
  388.         HRESULT get_CrossbarPinInfo (
  389.                 [in] BOOL IsInputPin,               // TRUE for input pins
  390.                 [in] long PinIndex,                 // a pin
  391.                 [out] long * PinIndexRelated,       // Index of related pin
  392.                 [out] long * PhysicalType);         // Physical type of pin
  393.     }
  394. //---------------------------------------------------------------------
  395. // IAMTuner interface
  396. //
  397. // base tuner device
  398. //---------------------------------------------------------------------
  399. // predefined subchannel values
  400. typedef enum tagAMTunerSubChannel
  401. {
  402. AMTUNER_SUBCHAN_NO_TUNE     = -2,   // don't tune
  403. AMTUNER_SUBCHAN_DEFAULT     = -1    // use default sub chan
  404. } AMTunerSubChannel;
  405. // predefined signal strength values
  406. typedef enum tagAMTunerSignalStrength
  407. {
  408. AMTUNER_HASNOSIGNALSTRENGTH = -1,   // cannot indicate signal strength
  409. AMTUNER_NOSIGNAL            = 0,    // no signal available
  410. AMTUNER_SIGNALPRESENT       = 1     // signal present
  411. } AMTunerSignalStrength;
  412.     // specifies the mode of operation of the tuner
  413. typedef enum tagAMTunerModeType
  414. {
  415. AMTUNER_MODE_DEFAULT    = 0x0000,   // default tuner mode
  416. AMTUNER_MODE_TV         = 0x0001,   // tv
  417. AMTUNER_MODE_FM_RADIO   = 0x0002,   // fm radio
  418. AMTUNER_MODE_AM_RADIO   = 0x0004,   // am radio
  419. AMTUNER_MODE_DSS        = 0x0008,   // dss
  420. } AMTunerModeType;
  421. // Events reported by IAMTunerNotification
  422. typedef enum tagAMTunerEventType{
  423. AMTUNER_EVENT_CHANGED   = 0x0001,   // status changed
  424. } AMTunerEventType;
  425.     interface IAMTunerNotification;
  426. [
  427. object,
  428. uuid(211A8761-03AC-11d1-8D13-00AA00BD8339),
  429. pointer_default(unique)
  430. ]
  431. interface IAMTuner : IUnknown
  432. {
  433. // Sets and gets the Channel
  434. HRESULT put_Channel(
  435. [in] long lChannel,
  436. [in] long lVideoSubChannel,
  437. [in] long lAudioSubChannel
  438. );
  439. HRESULT get_Channel(
  440. [out] long *plChannel,
  441. [out] long *plVideoSubChannel,
  442. [out] long *plAudioSubChannel
  443. );
  444. // Gets the minimum and maximum channel available
  445. HRESULT ChannelMinMax(
  446. [out] long *lChannelMin,
  447. [out] long *lChannelMax
  448. );
  449. // CountryCode is the same as the international
  450. // long distance telephone dialing prefix
  451. HRESULT put_CountryCode(
  452. [in] long lCountryCode
  453. );
  454. HRESULT get_CountryCode(
  455. [out] long *plCountryCode
  456. );
  457. HRESULT put_TuningSpace(
  458. [in] long lTuningSpace
  459. );
  460. HRESULT get_TuningSpace(
  461. [out] long *plTuningSpace
  462. );
  463. [local] HRESULT Logon(
  464. [in] HANDLE hCurrentUser
  465.             );
  466. HRESULT Logout();
  467. // Signal status for current channel
  468. // signal strength == TUNER_NOSIGNAL, or strength value
  469. HRESULT SignalPresent(
  470. [out] long * plSignalStrength // AMTunerSignalStrength
  471. );
  472. // allow multifunction tuner to be switch between modes
  473. HRESULT put_Mode(
  474. [in] AMTunerModeType lMode // AMTunerModeType
  475. );
  476. HRESULT get_Mode(
  477. [out] AMTunerModeType *plMode // AMTunerModeType
  478. );
  479. // retrieve a bitmask of the possible modes
  480. HRESULT GetAvailableModes(
  481. [out] long *plModes // AMTunerModeType
  482. );
  483. // allow IAMTuner clients to receive event notification
  484. HRESULT RegisterNotificationCallBack(
  485. [in] IAMTunerNotification *pNotify,
  486. [in] long lEvents       // bitmask from AMTunerEventType enumeration
  487. );
  488. HRESULT UnRegisterNotificationCallBack(
  489.                         [in] IAMTunerNotification *pNotify
  490. );
  491. }
  492. //---------------------------------------------------------------------
  493. // IAMTunerNotification interface
  494. //
  495. // Provided to IAMTuner if notification callbacks are desired
  496. //---------------------------------------------------------------------
  497. [
  498. object,
  499. uuid(211A8760-03AC-11d1-8D13-00AA00BD8339),
  500. pointer_default(unique)
  501. ]
  502. interface IAMTunerNotification : IUnknown
  503. {
  504. HRESULT OnEvent([in] AMTunerEventType Event);
  505. }
  506. //---------------------------------------------------------------------
  507. // IAMTVTuner interface
  508. //
  509. // Controls an analog TV tuner device
  510. //---------------------------------------------------------------------
  511. [
  512. object,
  513. uuid(211A8766-03AC-11d1-8D13-00AA00BD8339),
  514. pointer_default(unique)
  515. ]
  516. interface IAMTVTuner : IAMTuner
  517. {
  518. // Gets the supported analog video standards (NTSC/M, PAL/B, SECAM/K1, ...
  519. HRESULT get_AvailableTVFormats(
  520. [out] long *lAnalogVideoStandard
  521. );
  522. // Gets the current analog video standard (NTSC/M, PAL/B, SECAM/K1, ...)
  523. HRESULT get_TVFormat(
  524. [out] long * plAnalogVideoStandard
  525. );
  526. // Scans for a signal on a given channel
  527. // NOTE: this is equivalent to put_Channel(), SignalStrength()
  528. HRESULT AutoTune(
  529. [in] long lChannel,
  530. [out] long * plFoundSignal
  531. );
  532. // Saves the fine tuning information for all channels")]
  533. HRESULT StoreAutoTune();
  534. // The number of TV sources plugged into the tuner
  535. HRESULT get_NumInputConnections(
  536. [out] long * plNumInputConnections
  537. );
  538. // Sets or gets the tuner input type (Cable or Antenna)
  539. HRESULT put_InputType(
  540. [in] long lIndex,
  541. [in] TunerInputType InputType
  542. );
  543. HRESULT get_InputType(
  544. [in] long lIndex,
  545. [out] TunerInputType * pInputType
  546. );
  547. // Sets or gets the tuner input
  548. HRESULT put_ConnectInput(
  549. [in] long lIndex
  550. );
  551. HRESULT get_ConnectInput(
  552. [out] long *plIndex
  553. );
  554. // Gets the video and audio carrier frequencies
  555. HRESULT get_VideoFrequency(
  556. [out] long *lFreq
  557. );
  558. HRESULT get_AudioFrequency(
  559. [out] long *lFreq
  560. );
  561. }
  562. //---------------------------------------------------------------------
  563. // IBPCSatelliteTuner interface
  564. //
  565. // An interface supporting Satellite tuning-related functions
  566. //---------------------------------------------------------------------
  567. [
  568. object,
  569. local,
  570. uuid(211A8765-03AC-11d1-8D13-00AA00BD8339),
  571. pointer_default(unique)
  572. ]
  573. interface IBPCSatelliteTuner : IAMTuner
  574. {
  575. HRESULT get_DefaultSubChannelTypes(
  576. [out] long *plDefaultVideoType, // Provider-specific service type
  577. [out] long *plDefaultAudioType  // Provider-specific service type
  578. );
  579. HRESULT put_DefaultSubChannelTypes(
  580. [in] long lDefaultVideoType,    // Provider-specific service type
  581. [in] long lDefaultAudioType     // Provider-specific service type
  582. );
  583. HRESULT IsTapingPermitted();        // S_OK yes, S_FALSE no
  584. }
  585. //---------------------------------------------------------------------
  586. // IAMTVAudio interface
  587. //
  588. // TV Audio control
  589. //---------------------------------------------------------------------
  590. typedef enum tagTVAudioMode
  591. {
  592. AMTVAUDIO_MODE_MONO     = 0x0001,       // Mono               
  593. AMTVAUDIO_MODE_STEREO       = 0x0002,       // Stereo
  594. AMTVAUDIO_MODE_LANG_A       = 0x0010,       // Primary language
  595. AMTVAUDIO_MODE_LANG_B       = 0x0020,       // 2nd avail language
  596. AMTVAUDIO_MODE_LANG_C       = 0x0040,       // 3rd avail language
  597. } TVAudioMode;
  598. // Events reported by IAMTVAudioNotification
  599. typedef enum tagAMTVAudioEventType
  600. {
  601. AMTVAUDIO_EVENT_CHANGED     = 0x0001,       // mode changed
  602. } AMTVAudioEventType;
  603.     interface IAMTVAudioNotification;
  604. [
  605. object,
  606. local,
  607. uuid(83EC1C30-23D1-11d1-99E6-00A0C9560266),
  608. pointer_default(unique)
  609. ]
  610. interface IAMTVAudio : IUnknown
  611. {
  612. // retrieve a bitmask of the formats available in the hardware
  613. HRESULT GetHardwareSupportedTVAudioModes(
  614. [out] long *plModes // TVAudioMode
  615. );
  616. // retrieve a bitmask of the possible modes
  617. HRESULT GetAvailableTVAudioModes(
  618. [out] long *plModes // TVAudioMode
  619. );
  620. HRESULT get_TVAudioMode(
  621. [out] long *plMode              // TVAudioMode
  622. );
  623. HRESULT put_TVAudioMode(
  624. [in] long lMode // TVAudioMode
  625. );
  626. // allow IAMTVAudio clients to receive event notification
  627. HRESULT RegisterNotificationCallBack(
  628. [in] IAMTunerNotification *pNotify,
  629. [in] long lEvents       // bitmask from AMTVAudioEventType enumeration
  630. );
  631. HRESULT UnRegisterNotificationCallBack(
  632. IAMTunerNotification *pNotify
  633. );
  634. }
  635. //---------------------------------------------------------------------
  636. // IAMTVAudioNotification interface
  637. //
  638. // Provided to IAMTVAudio clients if notification callbacks are desired
  639. //---------------------------------------------------------------------
  640. [
  641. object,
  642. local,
  643. uuid(83EC1C33-23D1-11d1-99E6-00A0C9560266),
  644. pointer_default(unique)
  645. ]
  646. interface IAMTVAudioNotification : IUnknown
  647. {
  648. HRESULT OnEvent([in] AMTVAudioEventType Event);
  649. }
  650.     //---------------------------------------------------------------------
  651.     // IAMAnalogVideoEncoder interface
  652.     //---------------------------------------------------------------------
  653.     [
  654.    object,
  655.         uuid(C6E133B0-30AC-11d0-A18C-00A0C9118956),
  656. pointer_default(unique)
  657.     ]
  658.     interface IAMAnalogVideoEncoder : IUnknown
  659.     {
  660.         // Gets the supported analog video standards (NTSC/M, PAL/B, SECAM/K1, ...)
  661.         HRESULT get_AvailableTVFormats(
  662.                     [out] long *lAnalogVideoStandard
  663.                     );
  664.         // Sets or gets the current analog video standard (NTSC/M, PAL/B, SECAM/K1, ...)
  665.         HRESULT put_TVFormat(
  666.                     [in] long lAnalogVideoStandard
  667.                     );
  668.         HRESULT get_TVFormat(
  669.                     [out] long * plAnalogVideoStandard
  670.                     );
  671.         // Sets or gets the copy protection
  672.         HRESULT put_CopyProtection (
  673.                     [in]  long lVideoCopyProtection); // VideoCopyProtectionType
  674.         HRESULT get_CopyProtection (
  675.                     [out] long *lVideoCopyProtection); // VideoCopyProtectionType
  676.         // Enables and disables close captioning
  677.         HRESULT put_CCEnable (
  678.                     [in] long lCCEnable);
  679.         HRESULT get_CCEnable (
  680.                     [out] long *lCCEnable);
  681.     }
  682.     // used by IKsPropertySet set AMPROPSETID_Pin
  683.     typedef enum {
  684. AMPROPERTY_PIN_CATEGORY,
  685.         AMPROPERTY_PIN_MEDIUM
  686.     } AMPROPERTY_PIN;
  687.     //---------------------------------------------------------------------
  688.     // IKsPropertySet interface
  689.     //
  690.     // Sets or gets a property identified by a property set GUID and a
  691.     // property ID.
  692.     //
  693.     // Return codes for all 3 methods:
  694.     //    E_PROP_SET_UNSUPPORTED  the property set is not supported
  695.     //    E_PROP_ID_UNSUPPORTED   the property ID is not supported
  696.     //                                for the specified property set
  697.     //---------------------------------------------------------------------
  698. cpp_quote("#ifndef _IKsPropertySet_")
  699. cpp_quote("#define _IKsPropertySet_")
  700.     //---------------------------------------------------------------------
  701.     // #defines for IKsPropertySet::QuerySupported return result in pTypeSupport
  702.     //---------------------------------------------------------------------
  703. cpp_quote("#define KSPROPERTY_SUPPORT_GET  1")
  704. cpp_quote("#define KSPROPERTY_SUPPORT_SET  2")
  705.     [
  706. object,
  707.         uuid(31EFAC30-515C-11d0-A9AA-00AA0061BE93),
  708. pointer_default(unique)
  709.     ]
  710.     interface IKsPropertySet : IUnknown
  711.     {
  712.         [local] HRESULT Set(
  713.                     [in]    REFGUID     guidPropSet,
  714.                     [in]    DWORD       dwPropID,
  715.                     [in, size_is(cbInstanceData)] LPVOID pInstanceData,
  716.                     [in]    DWORD     cbInstanceData,
  717.                     [in, size_is(cbPropData)] LPVOID pPropData,
  718.                     [in]    DWORD     cbPropData);
  719.         [call_as(Set)] HRESULT RemoteSet(
  720.                     [in]    REFGUID     guidPropSet,
  721.                     [in]    DWORD       dwPropID,
  722.                     [in, size_is(cbInstanceData)] byte * pInstanceData,
  723.                     [in]    DWORD     cbInstanceData,
  724.                     [in, size_is(cbPropData)] byte * pPropData,
  725.                     [in]    DWORD     cbPropData);
  726.         // To get a property, the caller allocates a buffer which the called
  727.         // function fills in.  To determine necessary buffer size, call Get with
  728.         // pPropData=NULL and cbPropData=0.
  729.         [local] HRESULT Get(
  730.                     [in]    REFGUID     guidPropSet,
  731.                     [in]    DWORD       dwPropID,
  732.                     [in, size_is(cbInstanceData)] LPVOID pInstanceData,
  733.                     [in]    DWORD     cbInstanceData,
  734.                     [out, size_is(cbPropData)] LPVOID pPropData,
  735.                     [in]    DWORD     cbPropData,
  736.                     [out]   DWORD *     pcbReturned);
  737.         [call_as(Get)] HRESULT RemoteGet(
  738.                     [in]    REFGUID     guidPropSet,
  739.                     [in]    DWORD       dwPropID,
  740.                     [in, size_is(cbInstanceData)] byte * pInstanceData,
  741.                     [in]    DWORD     cbInstanceData,
  742.                     [out, size_is(cbPropData)] byte * pPropData,
  743.                     [in]    DWORD     cbPropData,
  744.                     [out]   DWORD *     pcbReturned);
  745.         // QuerySupported must either return E_NOTIMPL or correctly indicate
  746.         // if getting or setting the property set and property is supported.
  747.         // S_OK indicates the property set and property ID combination is
  748.         HRESULT QuerySupported(
  749.                     [in]    REFGUID     guidPropSet,
  750.                     [in]    DWORD       dwPropID,
  751.                     [out]   DWORD       *pTypeSupport);
  752.     }
  753. cpp_quote("#endif // _IKsPropertySet_")
  754. [
  755. object,
  756. uuid(6025A880-C0D5-11d0-BD4E-00A0C911CE86),
  757. pointer_default(unique)
  758. ]
  759. interface IMediaPropertyBag : IPropertyBag
  760. {
  761.     import "ocidl.idl";
  762.     typedef IMediaPropertyBag *LPMEDIAPROPERTYBAG;
  763.     // return the i'th element in the property bag
  764.     HRESULT EnumProperty(
  765.         [in]  ULONG iProperty,
  766.         [in, out] VARIANT * pvarPropertyName,
  767.         [in, out] VARIANT * pvarPropertyValue
  768.         );
  769. }
  770. [
  771. object,
  772. uuid(5738E040-B67F-11d0-BD4D-00A0C911CE86),
  773. pointer_default(unique)
  774. ]
  775. interface IPersistMediaPropertyBag : IPersist
  776. {
  777.     import "ocidl.idl";
  778.     import "unknwn.idl";
  779.     HRESULT InitNew(
  780.         void
  781.         );
  782.     HRESULT Load(
  783.         [in] IMediaPropertyBag * pPropBag,
  784.         [in] IErrorLog * pErrorLog
  785.         );
  786.     HRESULT Save(
  787.         [in] IMediaPropertyBag * pPropBag,
  788.         [in] BOOL fClearDirty,
  789.         [in] BOOL fSaveAllProperties
  790.         );
  791.     typedef IPersistMediaPropertyBag * LPPERSISTMEDIAPROPERTYBAG;
  792. }
  793.    //---------------------------------------------------------------------
  794.    //
  795.    // Defines IAMPhysicalPinInfo Interface
  796.    //
  797.    // Returns an enum and string that describes an input pin's physical type.
  798.    //
  799.    // Implement if: you have physical input pins such as video or audio (like
  800.    // on a video capture card or a VCR)
  801.    //
  802.    // Use if: you want to communicate to a user available physical input pins
  803.    // and allow them to select the active one if there is more than one
  804.    //---------------------------------------------------------------------
  805. [
  806. object,
  807.      uuid(F938C991-3029-11cf-8C44-00AA006B6814),
  808.      pointer_default(unique)
  809.  ]
  810. interface IAMPhysicalPinInfo : IUnknown {
  811. // Returns VFW_E_NO_ACCEPTABLE_TYPES if not a physical pin
  812. HRESULT GetPhysicalType(
  813. [out] long *pType, // the enum representing the Physical Type
  814. [out] LPOLESTR *ppszType // a friendly name
  815. );
  816. }
  817. typedef IAMPhysicalPinInfo *PAMPHYSICALPININFO;
  818.    //---------------------------------------------------------------------
  819.    // Defines IAMExtDevice Interface
  820.    //
  821.    // Base interface for external professional devices
  822.    //
  823.    // Implement if: the filter controls an external device such as a VCR,
  824.    // timecode reader/generator, etc.  The intent is to build a object from
  825.    // this implementation plus another that specifically describes the device,
  826.    // such as IAMExtTransport.
  827.    //
  828.    // Use if: you want to control and external device such as a VCR
  829.    //
  830.    // See edevdefs.h for the enumerated parameter list
  831.    //---------------------------------------------------------------------
  832.  [
  833. object,
  834.      uuid(B5730A90-1A2C-11cf-8C23-00AA006B6814),
  835. pointer_default(unique)
  836.  ]
  837.  interface IAMExtDevice : IUnknown
  838.  {
  839. // General device capabilities property.  See edevdefs.h for supported
  840. // values
  841. HRESULT GetCapability(
  842.       [in] long Capability, // identify the property
  843. [out] long *pValue, // return value
  844. [out] double *pdblValue // return value
  845.   );
  846. // Get external device identification string.  Usually the model #
  847. // of the device
  848. HRESULT get_ExternalDeviceID(
  849. [out] LPOLESTR *ppszData // ID string
  850. );
  851. HRESULT get_ExternalDeviceVersion(
  852. [out] LPOLESTR *ppszData // revision string
  853. );
  854. // Controls the external device's power mode
  855. HRESULT put_DevicePower([in] long PowerMode
  856. );
  857. HRESULT get_DevicePower([out] long *pPowerMode
  858. );
  859. // Some devices need to be reset in some way, i.e., rewinding a VCR
  860. // to the beginning of the tape and resetting the counter to zero.
  861. HRESULT Calibrate(
  862. [in] HEVENT hEvent,
  863. [in] long Mode,
  864. [out] long *pStatus // OATRUE is active, OAFALSE is inactive
  865. );
  866. // Selects the device's communications port, i.e.,COM1, IEEE1394, etc.
  867. // See edevdefs.h for enums
  868. HRESULT put_DevicePort([in] long DevicePort
  869. );
  870. HRESULT get_DevicePort([out] long *pDevicePort
  871. );
  872. }
  873. typedef IAMExtDevice *PEXTDEVICE;
  874.    //---------------------------------------------------------------------
  875.    // Defines IAMExtTransport Interface
  876.    //
  877.    // Contains properties and methods that control behavior of an external
  878.    // transport device such as a VTR
  879.    //
  880.    // Implement if: you control such a device.  Intended to be agregated
  881.    // with IAMExtDevice.
  882.    //
  883.    // Use if: you want to control such a device
  884.    //
  885.    // See edevdefs.h for the parameter lists
  886.    //---------------------------------------------------------------------
  887. [
  888. object,
  889.      uuid(A03CD5F0-3045-11cf-8C44-00AA006B6814),
  890.      pointer_default(unique)
  891.  ]
  892. interface IAMExtTransport : IUnknown {
  893. // General transport capabilities property.  See edevdefs.h for enums
  894. HRESULT GetCapability(
  895.       [in] long Capability, // identify the property
  896. [out] long *pValue, // return value
  897. [out] double *pdblValue // return value
  898.   );
  899. // For disc-based devices: spinning, or not spinning.
  900. // For tape-based device: threaded, unthreaded or ejected
  901. HRESULT put_MediaState([in] long State
  902. );
  903. HRESULT get_MediaState([out] long *pState // see edevdefs.h
  904. );
  905. // Determines state of unit's front panel
  906. HRESULT put_LocalControl([in] long State
  907. );
  908. HRESULT get_LocalControl([out] long *pState // OATRUE or OAFALSE
  909. );
  910. // Transport status such as Play, Stop, etc.  More extensive
  911. // than AM states.
  912. HRESULT GetStatus(
  913. [in] long StatusItem, // see edevdefs.h
  914. [out] long *pValue
  915. );
  916. // Parameters such as recording speed, servo reference, ballistics, etc.
  917. HRESULT GetTransportBasicParameters(
  918. [in] long Param,
  919. [out] long *pValue,
  920. [out] LPOLESTR *ppszData
  921. );
  922. HRESULT SetTransportBasicParameters(
  923. [in] long Param,
  924. [in] long Value,
  925. [in] LPCOLESTR pszData
  926. );
  927. // Parameters such as video output mode
  928. HRESULT GetTransportVideoParameters(
  929. [in] long Param,
  930. [out] long *pValue
  931. );
  932. HRESULT SetTransportVideoParameters(
  933. [in] long Param,
  934. [in] long Value
  935. );
  936. // Parameters such as audio channel enable
  937. HRESULT GetTransportAudioParameters(
  938. [in] long Param,
  939. [out] long *pValue
  940. );
  941. HRESULT SetTransportAudioParameters(
  942. [in] long Param,
  943. [in] long Value
  944. );
  945. // Mode is  the movement of the transport, i.e., Play, Stop,
  946. // Record, Edit, etc.
  947. HRESULT put_Mode([in] long Mode
  948. );
  949. HRESULT get_Mode([out] long *pMode
  950. );
  951. // Rate is for variable speed control of the the device.  This
  952. // can be linked to IMediaControl::Rate() in the implementation
  953. // if desired.
  954. HRESULT put_Rate([in] double dblRate
  955. );
  956. HRESULT get_Rate([out] double *pdblRate
  957. );
  958. // This is a lengthy method, that is, it is in effect until canceled or complete and
  959. // requires housekeeping by the filter.  It puts transport in play mode and maintains
  960. // fixed relationship between master time reference and transport position.
  961. HRESULT GetChase(
  962. [out] long *pEnabled, // OATRUE | OAFALSE
  963. [out] long *pOffset, // offset in current time format
  964. [out] HEVENT *phEvent // completion notification
  965. );
  966. HRESULT SetChase(
  967. [in] long Enable, // OATRUE | OAFALSE
  968. [in] long Offset, // offset in current time format
  969. [in] HEVENT hEvent // completion notification
  970. );
  971. // Also a lengthy method: temporarily change transport speed (for synchronizing).
  972. HRESULT GetBump(
  973. [out] long *pSpeed,
  974. [out] long *pDuration // in current time format
  975. );
  976. HRESULT SetBump(
  977. [in] long Speed,
  978. [in] long Duration // in current time format
  979. );
  980. // Enable/Disable transport anti-headclog control.
  981. HRESULT get_AntiClogControl([out] long *pEnabled // OATRUE | OAFALSE
  982. );
  983. HRESULT put_AntiClogControl([in] long Enable // OATRUE | OAFALSE
  984. );
  985. // The following group of properties describes edit events.  An edit event can be a
  986. // standard insert or assemble edit or a memorized position called a bookmark.
  987. // A NOTE ABOUT EVENTS: as with all lengthy commands, event objects must be created to
  988. // signal completion or error.
  989. // Intended usage: an edit event is prepared for use by:
  990. // 1. Registering an edit property set and getting an EditID
  991. // 2. Setting the necessary edit properties
  992. // 3. Setting the edit property set active
  993. // Please see edevdefs.h for properties and values
  994. // The reference clock's advance is the mechanism that puts an edit in motion (see
  995. // ED_EDIT_REC_INPOINT).
  996. // Property set methods
  997. HRESULT GetEditPropertySet(
  998. [in] long EditID,
  999. [out] long *pState // ED_SET_ACTIVE | ED_SET_INACTIVE | ED_SET_INVALID
  1000. // | ED_SET_EXECUTING
  1001. );
  1002. HRESULT SetEditPropertySet(
  1003. [in, out] long *pEditID,
  1004. [in] long State // ED_SET_REGISTER | ED_SET_DELETE | ED_SET_ACTIVE |
  1005. ); // ED_SET_INACTIVE
  1006. // the following properties define an edit event such as a bookmark, seek point, or
  1007. //  actual edit
  1008. HRESULT GetEditProperty(
  1009. [in] long EditID,
  1010. [in] long Param,
  1011. [out] long *pValue
  1012. );
  1013. HRESULT SetEditProperty(
  1014. [in] long EditID,
  1015. [in] long Param,
  1016. [in] long Value
  1017. );
  1018. // Activates a capable transport's edit control (typically used for "on the fly" editing).
  1019. HRESULT get_EditStart([out] long *pValue // OATRUE or OAFALSE
  1020. );
  1021. HRESULT put_EditStart([in] long Value // OATRUE or OAFALSE
  1022. );
  1023. }
  1024. typedef IAMExtTransport *PIAMEXTTRANSPORT;
  1025.    //---------------------------------------------------------------------
  1026.    // Defines IAMTimecodeReader Interface
  1027.    //
  1028.    // Contains properties and methods that define behavior of a
  1029.    // SMPTE/MIDI Timecode Reader.  It is expected that this interface
  1030.    // will be combined (aggregated) with IAMExtTransport to "build" a pro
  1031.    // VCR.
  1032.    //
  1033.    // Implement if: you control such a device
  1034.    //
  1035.    // Use if: you want to control such a device
  1036.    //
  1037.    // See edevdefs.h for the parameter lists
  1038.    //=====================================================================
  1039. // timecode structures
  1040. cpp_quote("#if 0")
  1041. cpp_quote("/* the following is what MIDL knows how to remote */")
  1042. typedef struct tagTIMECODE {
  1043. WORD wFrameRate; // will be replaced by AM defs, but see ED_FORMAT_SMPTE for now
  1044. WORD wFrameFract; // fractional frame.  full scale is always 0x1000
  1045. DWORD dwFrames;
  1046. }TIMECODE;
  1047. cpp_quote("#else /* 0 */")
  1048. cpp_quote("#ifndef TIMECODE_DEFINED")
  1049. cpp_quote("#define TIMECODE_DEFINED")
  1050. cpp_quote("typedef union _timecode {")
  1051. cpp_quote("   struct {")
  1052. cpp_quote("  WORD   wFrameRate;")
  1053. cpp_quote("  WORD   wFrameFract;")
  1054. cpp_quote("  DWORD  dwFrames;")
  1055. cpp_quote("  };")
  1056. cpp_quote("   DWORDLONG  qw;")
  1057. cpp_quote("   } TIMECODE;")
  1058. cpp_quote("")
  1059. cpp_quote("#endif /* TIMECODE_DEFINED */")
  1060. cpp_quote("#endif /* 0 */")
  1061. typedef TIMECODE *PTIMECODE;
  1062. typedef struct tagTIMECODE_SAMPLE {
  1063. LONGLONG qwTick; // ActiveMovie 100ns timestamp
  1064. TIMECODE timecode; // timecode
  1065. DWORD dwUser; // timecode user data (aka user bits)
  1066. DWORD dwFlags;    // timecode flags - see below
  1067. } TIMECODE_SAMPLE;
  1068. typedef TIMECODE_SAMPLE *PTIMECODE_SAMPLE;
  1069. [
  1070. object,
  1071.      uuid(9B496CE1-811B-11cf-8C77-00AA006B6814),
  1072.      pointer_default(unique)
  1073. ]
  1074. interface IAMTimecodeReader : IUnknown
  1075. {
  1076. // Timecode Reader Mode - gets/sets the following properties
  1077. // ED_TCR_SOURCE - timecode gen (readback), LTC, VITC, or Control Track
  1078. HRESULT GetTCRMode(
  1079. [in] long Param,
  1080. [out] long *pValue);
  1081. HRESULT SetTCRMode(
  1082. [in] long Param,
  1083. [in] long Value);
  1084. // Select which line of the vertical interval timecode will be read from (if VITC).
  1085. // To read VITC on specific multiple lines, the caller would make successive calls to
  1086. // put_VITCLine(), once for each line desired.
  1087. HRESULT put_VITCLine(
  1088. [in] long Line ); // valid lines are 11-20, 0 means autoselect,
  1089. // hi bit set means add to list of lines (for
  1090. // readers that test across multiple lines)
  1091. HRESULT get_VITCLine(
  1092. [out] long *pLine ); // hi bit set means multiple lines are used,
  1093. // and successive calls will cycle through the
  1094. // line numbers (like an enumerator, only simpler)
  1095. // GetTimecode can be used to obtain the most recent timecode value available in the
  1096. // stream. The client can use this to monitor the timecode, parse duplicates and
  1097. // discontinuities. The source filter supplying the timecode or possibly a down stream
  1098. // filter might want to parse for discontinuities or errors since you have to look at
  1099. // every sample to do this properly.
  1100. //
  1101. HRESULT GetTimecode(
  1102.       [out] PTIMECODE_SAMPLE pTimecodeSample) ;
  1103. }
  1104. typedef IAMTimecodeReader *PIAMTIMECODEREADER;
  1105.    //---------------------------------------------------------------------
  1106.    //=====================================================================
  1107.    // Defines IAMTimecodeGenerator Interface
  1108.    //
  1109.    // Contains properties and methods that define behavior of an external
  1110.    // SMPTE/MIDI Timecode Generator.  It is expected that this interface
  1111.    // will be combined (aggregated) with IAMExtTransport to "build" a pro
  1112.    // VCR.
  1113.    //
  1114.    // Implement if: you control such a device
  1115.    //
  1116.    // Use if: you want to control such a device
  1117.    //
  1118.    // See edevdefs.h for the parameter lists
  1119.     //---------------------------------------------------------------------
  1120. [
  1121. object,
  1122.      uuid(9B496CE0-811B-11cf-8C77-00AA006B6814),
  1123.      pointer_default(unique)
  1124.  ]
  1125. interface IAMTimecodeGenerator : IUnknown {
  1126. // Timecode Generator Mode - gets/sets the following properties (see
  1127. // vcrdefss.h for detailed values):
  1128. // ED_TCG_TIMECODE_TYPE - LTC, VITC, or MIDI
  1129. // ED_TCG_FRAMERATE - 24, 25, 30 drop or 30 nondrop
  1130. // ED_TCG_SYNC_SOURCE - what is driving the bitclock
  1131. // ED_TCG_REFERENCE_SOURCE - what is driving the count value
  1132. HRESULT GetTCGMode(
  1133. [in] long Param,
  1134. [out] long *pValue);
  1135. HRESULT SetTCGMode(
  1136. [in] long Param,
  1137. [in] long Value);
  1138. // Select into which line(s) of the vertical interval timecode will be inserted (if VITC).
  1139. // Hi bit set means add this line to any previously set lines.
  1140. // To generate VITC on specific multiple lines, the caller would make successive calls to
  1141. // put_VITCLine(), once for each line desired.
  1142. HRESULT put_VITCLine(
  1143. [in] long Line // valid lines are 11-20, 0 means autoselect(this setting
  1144. ); // is for TC readers that decode from multiple lines)
  1145. HRESULT get_VITCLine(
  1146. [out] long *pLine
  1147. );
  1148. // Sets timecode and/or userbit value.  If generator is running, takes effect
  1149. // immediately.  If caller wants to set only timecode, set userbit value to -1L (and
  1150. // same for setting userbits only)
  1151. //
  1152. HRESULT SetTimecode(
  1153.       [in] PTIMECODE_SAMPLE pTimecodeSample) ;
  1154. // GetTimecode can be used to obtain the most recent timecode value available in the
  1155. // stream. The client can use this to monitor the timecode and verify the generator is
  1156. // working properly
  1157. //
  1158. HRESULT GetTimecode(
  1159.       [out] PTIMECODE_SAMPLE pTimecodeSample) ;
  1160. }
  1161. typedef IAMTimecodeGenerator *PIAMTIMECODEGENERATOR;
  1162.     //---------------------------------------------------------------------
  1163.    // Defines IAMTimecodeDisplay Interface
  1164.    //
  1165.    // Contains properties and methods that define behavior of an external
  1166.    // SMPTE/MIDI Timecode Display device (aka "character generator" for
  1167.    // making "burn-ins" or "window dubs"). It is expected that this interface
  1168.    // will be combined (aggregated) with IAMExtTransport and the timecode
  1169.    // interfaces to "build" a pro VCR.
  1170.    //
  1171.    // Implement if: you control such a device
  1172.    //
  1173.    // Use if: you want to control such a device
  1174.    //
  1175.    // See edevdefs.h for the parameter lists
  1176.     //---------------------------------------------------------------------
  1177. [
  1178. object,
  1179.      uuid(9B496CE2-811B-11cf-8C77-00AA006B6814),
  1180.      pointer_default(unique)
  1181.  ]
  1182. interface IAMTimecodeDisplay : IUnknown
  1183. {
  1184. // Enable/disable external device's timecode reader's character generator output.  Some
  1185. // readers have this feature - this is not intended for rendering inside the PC!
  1186. HRESULT GetTCDisplayEnable(
  1187. [out] long *pState); // OATRUE | OAFALSE
  1188. HRESULT SetTCDisplayEnable(
  1189. [in] long State); // OATRUE | OAFALSE
  1190. // Timecode reader's character generator output
  1191. //  characteristics (size, position, intensity, etc.).
  1192. HRESULT GetTCDisplay(
  1193. [in] long Param,
  1194. [out] long *pValue);
  1195. HRESULT SetTCDisplay(
  1196. [in] long Param,
  1197. [in] long Value);
  1198. /* Allowable params and values (see edevdefs.h for details):
  1199. ED_TCD_SOURCE
  1200. ED_TCR | ED_TCG
  1201. ED_TCD_SIZE
  1202. ED_SMALL | ED_MED | ED_LARGE
  1203. ED_TCD_POSITION
  1204. ED_TOP | ED_MIDDLE | ED_BOTTOM or'd  with
  1205. ED_LEFT | ED_CENTER | ED_RIGHT
  1206. ED_TCD_INTENSITY
  1207. ED_HIGH | ED_LOW
  1208. ED_TCD_TRANSPARENCY // set from 0 to 4, 0 being completely opaque
  1209. ED_TCD_INVERT // white on black or black on white
  1210. OATRUE | OAFALSE
  1211. ED_TCD_BORDER // white border for black chars, black border for white letters
  1212. OATRUE | OAFALSE
  1213. */
  1214. }
  1215. typedef IAMTimecodeDisplay *PIAMTIMECODEDISPLAY;
  1216. [
  1217.     object,
  1218.     uuid(c6545bf0-e76b-11d0-bd52-00a0c911ce86),
  1219.     pointer_default(unique)
  1220. ]
  1221. interface IAMDevMemoryAllocator : IUnknown
  1222. {
  1223.     HRESULT GetInfo(
  1224.         [out] DWORD *pdwcbTotalFree,
  1225.         [out] DWORD *pdwcbLargestFree,
  1226.         [out] DWORD *pdwcbTotalMemory,
  1227.         [out] DWORD *pdwcbMinimumChunk);
  1228.     HRESULT CheckMemory(
  1229.         [in] const BYTE *pBuffer);
  1230.     HRESULT Alloc(
  1231.         [out] BYTE **ppBuffer,
  1232.         [in, out] DWORD *pdwcbBuffer);
  1233.     HRESULT Free(
  1234.         [in] BYTE *pBuffer);
  1235.     HRESULT GetDevMemoryObject(
  1236.         [out] IUnknown **ppUnkInnner,
  1237.         [in] IUnknown *pUnkOuter);
  1238. }
  1239. typedef IAMDevMemoryAllocator *PAMDEVMEMORYALLOCATOR;
  1240. [
  1241.     object,
  1242.     uuid(c6545bf1-e76b-11d0-bd52-00a0c911ce86),
  1243.     pointer_default(unique)
  1244. ]
  1245. interface IAMDevMemoryControl : IUnknown
  1246. {
  1247.     HRESULT QueryWriteSync();
  1248.     HRESULT WriteSync();
  1249.     HRESULT GetDevId(
  1250.         [out] DWORD *pdwDevId);
  1251. }
  1252. typedef IAMDevMemoryControl *PAMDEVMEMORYCONTROL;
  1253. //  Flags for IAMStreamSelection::Info
  1254. enum _AMSTREAMSELECTINFOFLAGS {
  1255.     AMSTREAMSELECTINFO_ENABLED   = 0x01,  // Enable - off for disable
  1256.     AMSTREAMSELECTINFO_EXCLUSIVE = 0x02   // Turns off the others in the group
  1257.                                           // when enabling this one
  1258. };
  1259. //  Flags for IAMStreamSelection::Enable
  1260. enum _AMSTREAMSELECTENABLEFLAGS {
  1261.     //  Currently valid values are :
  1262.     //  0 - disable all streams in the group containing this stream
  1263.     //  ..._ENABLE - enable only this stream with in the given group
  1264.     //               and disable all others
  1265.     //  ..._ENABLEALL - send out all streams
  1266.     AMSTREAMSELECTENABLE_ENABLE    = 0x01,  // Enable
  1267.     AMSTREAMSELECTENABLE_ENABLEALL = 0x02   // Enable all streams in the group
  1268.                                             // containing this stream
  1269. };
  1270. //  Control which logical streams are played and find out information about
  1271. //  them
  1272. //  Normally supported by a filter
  1273. [
  1274.     object,
  1275.     uuid(c1960960-17f5-11d1-abe1-00a0c905f375),
  1276.     pointer_default(unique)
  1277. ]
  1278. interface IAMStreamSelect : IUnknown
  1279. {
  1280.     //  Returns total count of streams
  1281.     HRESULT Count(
  1282.         [out] DWORD *pcStreams);      // Count of logical streams
  1283.     //  Return info for a given stream - S_FALSE if iIndex out of range
  1284.     //  The first steam in each group is the default
  1285.     HRESULT Info(
  1286.         [in] long lIndex,              // 0-based index
  1287.         [out] AM_MEDIA_TYPE **ppmt,   // Media type - optional
  1288.                                       // Use DeleteMediaType to free
  1289.         [out] DWORD *pdwFlags,        // flags - optional
  1290.         [out] LCID  *plcid,           // LCID (returns 0 if none) - optional
  1291.         [out] DWORD *pdwGroup,        // Logical group - optional
  1292.         [out] WCHAR **ppszName,       // Name - optional - free with CoTaskMemFree
  1293.                                       // optional
  1294.         [out] IUnknown **ppObject,    // Associated object - optional
  1295.                                       // Object may change if Enable is
  1296.                                       // called on this interface
  1297.                                       // - returns NULL if no associated object
  1298.                                       // Returns pin or filter for DShow
  1299.         [out] IUnknown **ppUnk);      // Stream specific interface
  1300.     //  Enable or disable a given stream
  1301.     HRESULT Enable(
  1302.         [in]  long lIndex,
  1303.         [in]  DWORD dwFlags);
  1304. }
  1305. typedef IAMStreamSelect *PAMSTREAMSELECT;
  1306. enum _AMRESCTL_RESERVEFLAGS
  1307. {
  1308.     AMRESCTL_RESERVEFLAGS_RESERVE     = 0x00,  // Increment reserve count
  1309.     AMRESCTL_RESERVEFLAGS_UNRESERVE   = 0x01   // Decrement reserve count
  1310. };
  1311. //  Reserve resources now so that playback can be subsequently
  1312. //  guaranteed
  1313. //
  1314. //  Normally supported by a filter
  1315. //
  1316. [
  1317.     object,
  1318.     uuid(8389d2d0-77d7-11d1-abe6-00a0c905f375),
  1319.     pointer_default(unique),
  1320.     local
  1321. ]
  1322. interface IAMResourceControl : IUnknown
  1323. {
  1324.     //  The reserve count is incremented/decremented if and only if
  1325.     //  S_OK is returned
  1326.     //  Unreserve once for every Reserve call
  1327.     HRESULT Reserve(
  1328.         [in] DWORD dwFlags,          //  From _AMRESCTL_RESERVEFLAGS enum
  1329.         [in] PVOID pvReserved        //  Must be NULL
  1330.     );
  1331. }
  1332. //  Set clock adjustments - supported by some clocks
  1333. [
  1334.     object,
  1335.     uuid(4d5466b0-a49c-11d1-abe8-00a0c905f375),
  1336.     pointer_default(unique),
  1337.     local
  1338. ]
  1339. interface IAMClockAdjust : IUnknown
  1340. {
  1341.     //  Set the following delta to clock times
  1342.     //  The clock will add adjust its times by the given delta
  1343.     HRESULT SetClockDelta(
  1344.         [in] REFERENCE_TIME rtDelta
  1345.     );
  1346. };
  1347. //  Filter miscellaneous status flags
  1348. enum _AM_FILTER_MISC_FLAGS {
  1349.     AM_FILTER_MISC_FLAGS_IS_RENDERER = 0x00000001, /* Will deliver EC_COMPLETE
  1350.                                                      at end of media */
  1351.     AM_FILTER_MISC_FLAGS_IS_SOURCE   = 0x00000002  /*  Filter sources data */
  1352. };
  1353. [
  1354.     object,
  1355.     uuid(2dd74950-a890-11d1-abe8-00a0c905f375),
  1356.     pointer_default(unique),
  1357.     local
  1358. ]
  1359. interface IAMFilterMiscFlags : IUnknown
  1360. {
  1361.     //  Get miscellaneous property flags
  1362.     ULONG GetMiscFlags(void);
  1363. };
  1364. // Video Image drawing interface
  1365. [
  1366.     object,
  1367.     local,
  1368.     uuid(48efb120-ab49-11d2-aed2-00a0c995e8d5),
  1369.     pointer_default(unique),
  1370. ]
  1371. interface IDrawVideoImage : IUnknown
  1372. {
  1373.     HRESULT DrawVideoImageBegin();
  1374.     HRESULT DrawVideoImageEnd();
  1375.     HRESULT DrawVideoImageDraw(
  1376.         [in] HDC hdc,
  1377.         [in] LPRECT lprcSrc,
  1378.         [in] LPRECT lprcDst
  1379.     );
  1380. }
  1381. //
  1382. // Video Image decimation interface
  1383. //
  1384. // The aim of this interface is to enable a video renderer filter to
  1385. // control the decimation properties of a video decoder connected to
  1386. // the video renderer
  1387. //
  1388. // This interface should only be supported by decoders that are capable of
  1389. // decimating their output image by an arbitary amount.
  1390. //
  1391. //
  1392. [
  1393.     object,
  1394.     local,
  1395.     uuid(2e5ea3e0-e924-11d2-b6da-00a0c995e8df),
  1396.     pointer_default(unique),
  1397. ]
  1398. interface IDecimateVideoImage : IUnknown
  1399. {
  1400.     //
  1401.     // Informs the decoder that it should decimate its output
  1402.     // image to the specified width and height.  If the decoder can
  1403.     // decimate to this size it should return S_OK.
  1404.     // If the decoder can't perform the requested decimation
  1405.     // or wants to stop performing the decimation that it is
  1406.     // currently doing it should return E_FAIL.
  1407.     //
  1408.     HRESULT SetDecimationImageSize(
  1409.         [in] long lWidth,
  1410.         [in] long lHeight);
  1411.     //
  1412.     // Informs the decoder that it should stop decimating its output image
  1413.     // and resume normal output.
  1414.     //
  1415.     HRESULT ResetDecimationImageSize();
  1416. }
  1417. typedef enum _DECIMATION_USAGE {
  1418.     DECIMATION_LEGACY,              // decimate at ovly then video port then crop
  1419.     DECIMATION_USE_DECODER_ONLY,    // decimate image at the decoder only
  1420.     DECIMATION_USE_VIDEOPORT_ONLY,  // decimate at the video port only
  1421.     DECIMATION_USE_OVERLAY_ONLY,    // decimate at the overlay only
  1422.     DECIMATION_DEFAULT              // decimate at decoder then ovly the vide port then crop
  1423. } DECIMATION_USAGE;
  1424. [
  1425.     object,
  1426.     local,
  1427.     uuid(60d32930-13da-11d3-9ec6-c4fcaef5c7be),
  1428.     pointer_default(unique),
  1429. ]
  1430. interface IAMVideoDecimationProperties: IUnknown
  1431. {
  1432.     //
  1433.     // Queries the current usage of the above IDecimateVideoImage
  1434.     // interface.
  1435.     //
  1436.     HRESULT QueryDecimationUsage(
  1437.         [out] DECIMATION_USAGE* lpUsage);       // from DECIMATION_USAGE enum
  1438.     //
  1439.     // Sets the current usage of the above IDecimateVideoImage
  1440.     // interface.
  1441.     //
  1442.     HRESULT SetDecimationUsage(
  1443.         [in] DECIMATION_USAGE Usage);           // from DECIMATION_USAGE enum
  1444. }
  1445. //---------------------------------------------------------------------
  1446. //
  1447. // IVideoFrameStep interface
  1448. //
  1449. //---------------------------------------------------------------------
  1450. [
  1451.     object,
  1452.     uuid(e46a9787-2b71-444d-a4b5-1fab7b708d6a),
  1453.     pointer_default(unique),
  1454. ]
  1455. interface IVideoFrameStep : IUnknown
  1456. {
  1457.     //
  1458.     //  Stop(), Pause(), Run() all cancel Step as does any seeking
  1459.     //  request.
  1460.     //
  1461.     //  The Step() and CancelStep() methods of this interface
  1462.     //  Cancel any previous step.
  1463.     //
  1464.     //  When stepping is complete EC_STEP_COMPLETE is signalled.
  1465.     //
  1466.     //  When the filter graph gets EC_STEP_COMPLETE it automatically
  1467.     //  sets the filter graph into paused state and forwards the
  1468.     //  notification to the application
  1469.     //
  1470.     //  Returns S_OK if stepping initiated.
  1471.     //
  1472.     //  dwFrames
  1473.     //    1 means step 1 frame forward
  1474.     //    0 is invalid
  1475.     //    n (n > 1) means skip n - 1 frames and show the nth
  1476.     //
  1477.     //  pStepObject
  1478.     //    NULL - default step object (filter) picked
  1479.     //    non-NULL - use this object for stepping
  1480.     //
  1481.     HRESULT Step(DWORD dwFrames, [unique] IUnknown *pStepObject);
  1482.     //  Can step?
  1483.     //  Returns S_OK if it can, S_FALSE if it can't or error code.
  1484.     //  bMultiple - if TRUE return whether can step n > 1
  1485.     HRESULT CanStep(long bMultiple, [unique] IUnknown *pStepObject);
  1486.     //  Cancel stepping
  1487.     HRESULT CancelStep();
  1488. }
  1489. //---------------------------------------------------------------------
  1490. //
  1491. // IAMPushSource interface
  1492. //
  1493. // Provides a means for source filters to describe information about the
  1494. // data that they source, such as whether the data is live or not, and
  1495. // what type of clock was used for timestamps. This information may be
  1496. // needed by other clocks in the graph in order to provide accurate
  1497. // synchronization. Also provides a way to specify an offset value for
  1498. // the filter to use when timestamping the streams it sources. Provides
  1499. // support for the IAMLatency interface as well.
  1500. //
  1501. //---------------------------------------------------------------------
  1502. enum _AM_PUSHSOURCE_FLAGS {
  1503.     //
  1504.     // The default assumption is that the data is from a live source,
  1505.     // time stamped with the graph clock, and the source does not
  1506.     // attempt to rate match the data it delivers.
  1507.     // The following flags can be used to override this assumption.
  1508.     //
  1509.     // capability flags
  1510.     AM_PUSHSOURCECAPS_INTERNAL_RM        = 0x00000001,  // source provides internal support for rate matching
  1511.     AM_PUSHSOURCECAPS_NOT_LIVE           = 0x00000002,  // don't treat source data as live
  1512.     AM_PUSHSOURCECAPS_PRIVATE_CLOCK      = 0x00000004,  // source data timestamped with clock not
  1513.                                                         // exposed to the graph
  1514.     // request flags, set by user via SetPushSourceFlags method
  1515.     AM_PUSHSOURCEREQS_USE_STREAM_CLOCK   = 0x00010000   // source was requested to timestamp
  1516.                                                         // using a clock that isn't the graph clock
  1517. };
  1518. //
  1519. // Used to set a source filter to run in a "live" mode.
  1520. //
  1521. [
  1522. object,
  1523.     uuid(F185FE76-E64E-11d2-B76E-00C04FB6BD3D),
  1524.     pointer_default(unique)
  1525. ]
  1526. interface IAMPushSource : IAMLatency
  1527. {
  1528.     // used to discover push source's capabilities.
  1529.     // may be any combination of the AM_PUSHSOURCE_FLAGS flags.
  1530.     HRESULT GetPushSourceFlags (
  1531.     [out] ULONG *pFlags
  1532.     );
  1533.     // used to set request flags for a push source.
  1534.     // may be a combination of the AM_PUSHSOURCE_REQS_xxx flags.
  1535.     HRESULT SetPushSourceFlags (
  1536.     [in]  ULONG Flags
  1537.     );
  1538.     // specify an offset for push source time stamps
  1539.     HRESULT SetStreamOffset (
  1540.         [in]  REFERENCE_TIME  rtOffset
  1541.     );
  1542.     // retrieve the offset this push source is using
  1543.     HRESULT GetStreamOffset (
  1544.         [out] REFERENCE_TIME  *prtOffset
  1545.     );
  1546.     // retrieve the maximum stream offset this push source thinks it can support
  1547.     HRESULT GetMaxStreamOffset (
  1548.         [out] REFERENCE_TIME  *prtMaxOffset
  1549.     );
  1550.     // allows the filter graph to tell a push source the maximum latency allowed on the graph
  1551.     // this allows pins like the video capture preview pin to be more efficient with the amount
  1552.     // of buffering required to support the maximum graph latency
  1553.     HRESULT SetMaxStreamOffset (
  1554.         [in] REFERENCE_TIME  rtMaxOffset
  1555.     );
  1556. };
  1557. // ------------------------------------------------------------------------
  1558. //
  1559. // IAMDeviceRemoval interface
  1560. //
  1561. // Implemented by filters to request and receive WM_DEVICECHANGE
  1562. // notifications
  1563. //
  1564. // ------------------------------------------------------------------------
  1565. [
  1566.         object,
  1567.         uuid(f90a6130-b658-11d2-ae49-0000f8754b99),
  1568.         pointer_default(unique)
  1569. ]
  1570. interface IAMDeviceRemoval : IUnknown
  1571. {
  1572.     HRESULT DeviceInfo(
  1573.         [out] CLSID *pclsidInterfaceClass,
  1574.         [out] WCHAR **pwszSymbolicLink);
  1575.     HRESULT Reassociate();
  1576.     HRESULT Disassociate();
  1577. }
  1578. //
  1579. // for DV
  1580. //
  1581. typedef struct {
  1582. //for 1st 5/6 DIF seq.
  1583. DWORD dwDVAAuxSrc;
  1584. DWORD dwDVAAuxCtl;
  1585. //for 2nd  5/6 DIF seq.
  1586. DWORD dwDVAAuxSrc1;
  1587. DWORD dwDVAAuxCtl1;
  1588. //for video information
  1589. DWORD dwDVVAuxSrc;
  1590. DWORD dwDVVAuxCtl;
  1591. DWORD dwDVReserved[2];
  1592. } DVINFO, *PDVINFO;
  1593. // ------------------------------------------------------------------------
  1594. //
  1595. // IDVEnc interface
  1596. //
  1597. // Implemented by DV encoder filters to set Encoder format
  1598. //
  1599. // ------------------------------------------------------------------------
  1600. enum _DVENCODERRESOLUTION { //resolution
  1601. DVENCODERRESOLUTION_720x480     =   2012,
  1602. DVENCODERRESOLUTION_360x240     =   2013,
  1603. DVENCODERRESOLUTION_180x120     =   2014,
  1604. DVENCODERRESOLUTION_88x60       =   2015
  1605. };
  1606. enum _DVENCODERVIDEOFORMAT { //PAL/ntsc
  1607. DVENCODERVIDEOFORMAT_NTSC = 2000,
  1608. DVENCODERVIDEOFORMAT_PAL = 2001
  1609. };
  1610. enum _DVENCODERFORMAT { // dvsd/dvhd/dvsl
  1611. DVENCODERFORMAT_DVSD = 2007,
  1612. DVENCODERFORMAT_DVHD = 2008,
  1613. DVENCODERFORMAT_DVSL = 2009
  1614. };
  1615. [
  1616.         object,
  1617.         uuid(d18e17a0-aacb-11d0-afb0-00aa00b67a42),
  1618.         pointer_default(unique)
  1619. ]
  1620. interface IDVEnc : IUnknown
  1621. {
  1622. HRESULT get_IFormatResolution (
  1623.     [out] int *VideoFormat, //pal or ntsc
  1624.         [out] int *DVFormat,     //dvsd dvhd dvsl
  1625.     [out] int *Resolution,     //720, 360, 180,88
  1626.     [in]  BYTE fDVInfo,     //TRUE: DVINFO structure exist, FALSE: Do not care DVINFO
  1627.     [out] DVINFO *sDVInfo     //NULL if fDVInfo=FALSE,
  1628.     );
  1629.    HRESULT put_IFormatResolution (
  1630.         [in] int VideoFormat,
  1631.     [in] int DVFormat,
  1632.     [in] int Resolution,
  1633.     [in] BYTE fDVInfo,     //TRUE: DVINFO structure exist, FALSE: Do not care DVINFO
  1634.     [in] DVINFO *sDVInfo     //NULL if fDVInfo=FALSE,
  1635.     );
  1636. }
  1637. // ------------------------------------------------------------------------
  1638. //
  1639. // IDVDec interface
  1640. //
  1641. // Implemented by DV decoder filters to set decoder size
  1642. //
  1643. // ------------------------------------------------------------------------
  1644. enum _DVDECODERRESOLUTION {
  1645. DVDECODERRESOLUTION_720x480     =   1000,
  1646. DVDECODERRESOLUTION_360x240     =   1001,
  1647. DVDECODERRESOLUTION_180x120     =   1002,
  1648. DVDECODERRESOLUTION_88x60       =   1003
  1649. };
  1650. enum _DVRESOLUTION {
  1651. DVRESOLUTION_FULL = 1000,  
  1652. DVRESOLUTION_HALF = 1001,
  1653. DVRESOLUTION_QUARTER = 1002,
  1654. DVRESOLUTION_DC = 1003
  1655. };
  1656. [
  1657.         object,
  1658.         uuid(b8e8bd60-0bfe-11d0-af91-00aa00b67a42),
  1659.         pointer_default(unique)
  1660. ]
  1661. interface IIPDVDec : IUnknown
  1662. {
  1663. HRESULT get_IPDisplay (
  1664.             [out] int *displayPix     // The display pixels arrage
  1665.                  );
  1666. HRESULT put_IPDisplay (
  1667.              [in] int displayPix         // Change to this display pixel arrage
  1668.                  ) ;
  1669. }
  1670. // ------------------------------------------------------------------------
  1671. //
  1672. // IDVSplitter interface
  1673. //
  1674. // Implemented by DV splitter filters
  1675. //
  1676. // ------------------------------------------------------------------------
  1677. [
  1678.     object,
  1679.     uuid(92a3a302-da7c-4a1f-ba7e-1802bb5d2d02)
  1680. ]
  1681. interface IDVSplitter : IUnknown
  1682. {
  1683.     HRESULT DiscardAlternateVideoFrames(
  1684.             [in] int nDiscard
  1685.                  ) ;
  1686. }
  1687. //  Audio Renderer statistics params for IAMAudioRendererStats interface
  1688. enum _AM_AUDIO_RENDERER_STAT_PARAM {
  1689.     AM_AUDREND_STAT_PARAM_BREAK_COUNT = 1,     // audio breaks
  1690.     AM_AUDREND_STAT_PARAM_SLAVE_MODE,          // current slave mode, see AM_AUDREND_SLAVE_MODEs
  1691.     AM_AUDREND_STAT_PARAM_SILENCE_DUR,         // silence inserted due to gaps (ms)
  1692.     AM_AUDREND_STAT_PARAM_LAST_BUFFER_DUR,     // duration of the last buffer received
  1693.     AM_AUDREND_STAT_PARAM_DISCONTINUITIES,     // discontinuities seen since running
  1694.     AM_AUDREND_STAT_PARAM_SLAVE_RATE,          // what rate are we currently slaving at? S_FALSE if not slaving
  1695.     AM_AUDREND_STAT_PARAM_SLAVE_DROPWRITE_DUR, // for waveOut slaving - data dropped or added to stay in-sync
  1696.                                                //       dwParam1 - dropped duration(ms)
  1697.                                                //       dwParam2 - paused duration(ms)
  1698.     AM_AUDREND_STAT_PARAM_SLAVE_HIGHLOWERROR,  // highest & lowest clock differences seen
  1699.                                                //       dwParam1 - high err
  1700.                                                //       dwParam2 - low err
  1701.     AM_AUDREND_STAT_PARAM_SLAVE_LASTHIGHLOWERROR, // last high and low errs seen
  1702.                                                //       dwParam1 - last high err
  1703.                                                //       dwParam2 - last low err
  1704.     AM_AUDREND_STAT_PARAM_SLAVE_ACCUMERROR,    // error between master/slave clocks
  1705.     AM_AUDREND_STAT_PARAM_BUFFERFULLNESS,      // percent audio buffer fullness
  1706.     AM_AUDREND_STAT_PARAM_JITTER               // input buffer jitter
  1707. };
  1708. //---------------------------------------------------------------------
  1709. //
  1710. // IAMAudioRendererStats interface
  1711. //
  1712. // Interface to get at statistical information that is optionally stored
  1713. // in an audio renderer filter. Supported on the filter interface (although
  1714. // this might be better for ksproxy if we define it as a pin interface?)
  1715. //
  1716. //---------------------------------------------------------------------
  1717. [
  1718. object,
  1719.     uuid(22320CB2-D41A-11d2-BF7C-D7CB9DF0BF93),
  1720.     pointer_default(unique)
  1721. ]
  1722. interface IAMAudioRendererStats : IUnknown
  1723. {
  1724.     // Get value corresponding to the passed in parameter id
  1725.     HRESULT GetStatParam(
  1726.         [in]   DWORD     dwParam,
  1727.         [out]  DWORD     *pdwParam1,
  1728.         [out]  DWORD     *pdwParam2
  1729.     );
  1730. }
  1731. //---------------------------------------------------------------------
  1732. //
  1733. // IAMLatency interface
  1734. //
  1735. // Allows a filter to report the expected latency associated with a data
  1736. // stream flowing from its input to output pin. Supported on output pins.
  1737. //
  1738. //---------------------------------------------------------------------
  1739. [
  1740. object,
  1741.     uuid(62EA93BA-EC62-11d2-B770-00C04FB6BD3D),
  1742.     pointer_default(unique)
  1743. ]
  1744. interface IAMLatency : IUnknown
  1745. {
  1746.     HRESULT GetLatency(
  1747.         [in]   REFERENCE_TIME  *prtLatency
  1748.     );
  1749. }
  1750. enum _AM_INTF_SEARCH_FLAGS {
  1751.     AM_INTF_SEARCH_INPUT_PIN  = 0x00000001,   // search input pins
  1752.     AM_INTF_SEARCH_OUTPUT_PIN = 0x00000002,   // search output pins
  1753.     AM_INTF_SEARCH_FILTER     = 0x00000004    // search filters
  1754. };
  1755. //---------------------------------------------------------------------
  1756. //
  1757. // IAMGraphStreams interface
  1758. //
  1759. // Interface used to control or search over connected streams of data
  1760. // flow within a filter graph.
  1761. //
  1762. //---------------------------------------------------------------------
  1763. [
  1764. object,
  1765.     uuid(632105FA-072E-11d3-8AF9-00C04FB6BD3D),
  1766.     pointer_default(unique)
  1767. ]
  1768. interface IAMGraphStreams : IUnknown
  1769. {
  1770.     // Search upstream from the current pin, for the specified interface.
  1771.     // dwFlags can be any combination of the AM_INTF_SEARCH_FLAGS, and allows
  1772.     // control over what objects to search. A value of 0 means to search all.
  1773.     HRESULT FindUpstreamInterface(
  1774.         [in]                IPin *pPin,
  1775.         [in]                REFIID riid,
  1776.         [out, iid_is(riid)] void **ppvInterface,
  1777.         [in]                DWORD dwFlags );
  1778.     // Enable or disable the graph's setting of a timestamp offset
  1779.     // on push sources.
  1780.     HRESULT SyncUsingStreamOffset( [in] BOOL bUseStreamOffset );
  1781.     // allow an app to set the maximum offset used on push source filters
  1782.     HRESULT SetMaxGraphLatency( [in] REFERENCE_TIME rtMaxGraphLatency );
  1783. }
  1784. //
  1785. // IAMOverlayFX
  1786. //
  1787. // This interface is exposed by the overlay mixer filter and allows
  1788. // an application to apply various "effects" to the overlay surface
  1789. // used by the overlay mixer.
  1790. //
  1791. // The effects that can be applied are described by the AMOVERLAYFX
  1792. // enumeration.
  1793. //
  1794. enum AMOVERLAYFX {
  1795.     // Normal (ie. top down, left to right) video
  1796.     AMOVERFX_NOFX =             0x00000000,
  1797.     // Mirror the overlay across the vertical axis
  1798.     AMOVERFX_MIRRORLEFTRIGHT =  0x00000002,
  1799.      // Mirror the overlay across the horizontal axis
  1800.     AMOVERFX_MIRRORUPDOWN =     0x00000004,
  1801.     // Deinterlace the overlay, if possible
  1802.     AMOVERFX_DEINTERLACE =      0x00000008
  1803. };
  1804. [
  1805. object,
  1806.     uuid(62fae250-7e65-4460-bfc9-6398b322073c),
  1807.     pointer_default(unique)
  1808. ]
  1809. interface IAMOverlayFX : IUnknown
  1810. {
  1811.     // Use this method to determine what overlay effects are currently available
  1812.     // for the overlay surface used by the overlay mixer filter.
  1813.     //
  1814.     HRESULT QueryOverlayFXCaps(
  1815.      [out] DWORD *lpdwOverlayFXCaps
  1816.      );
  1817.     // Use this method to apply a new overlay effect to the overlay surface
  1818.     // used by the overlay mixer filter.  This method can be called while the
  1819.     // filter graph is running, the effect is applied immediately
  1820.     //
  1821.     HRESULT SetOverlayFX(
  1822.      [in] DWORD dwOverlayFX
  1823.      );
  1824.     // Use this method to determine what effect (if any) is currently being
  1825.     // applied to the overlay surface by the overlay mixer filter.
  1826.     //
  1827.     HRESULT GetOverlayFX(
  1828.      [out] DWORD *lpdwOverlayFX
  1829.      );
  1830. }
  1831. // IAMOpenProgress interface provides information about current progress through
  1832. // a download
  1833. // NOTE: The following cpp_quote is there to make sure that we do not break the whistler build when this file is
  1834. // updated in Whistler as they are using a private copy of op.h which is removed as a result of moving the IAMOpenProgress
  1835. // interface into axextend.idl. Html+time has a private copy of op.h in \index1srcnewntinetcoremshtmlsrctimeincludeop.h
  1836. // which needs to be removed when integrating into Whistler to avoid any future build breaks.
  1837. cpp_quote("#define __OP_H__")
  1838. [
  1839. object,
  1840. uuid(8E1C39A1-DE53-11cf-AA63-0080C744528D),
  1841. pointer_default(unique)
  1842. ]
  1843. interface IAMOpenProgress : IUnknown
  1844. {
  1845. // QueryProgress can be used to query the source filter which supports this interface
  1846. // for progress information during a renderfile operation.
  1847.     HRESULT QueryProgress(
  1848.       [out] LONGLONG* pllTotal,
  1849.           [out] LONGLONG* pllCurrent
  1850.          );
  1851. // AbortOperation can be used to request an abort of RenderFile operation
  1852. // causing it to stop downloading. This methods instructs the exporter of
  1853. // the IAMOpenProgress interface to hold up their internal abort flag until
  1854. // further notice.
  1855.     HRESULT AbortOperation(
  1856. );
  1857. }
  1858. /*++
  1859.     IMpeg2Demultiplexer
  1860.     
  1861.     This interface is implemented by the MPEG-2 Demultiplexer filter, 
  1862.     irrespective of program vs. transport stream splitting functionality.
  1863. --*/
  1864. [
  1865.     object,
  1866.     local,
  1867.     uuid (436eee9c-264f-4242-90e1-4e330c107512),
  1868.     pointer_default(unique)
  1869. ]
  1870. interface IMpeg2Demultiplexer : IUnknown
  1871. {
  1872.     /*++
  1873.         ------------------------------------------------------------------------
  1874.         purpose:    Creates an output pin of the specified media type.
  1875.         
  1876.         pMediaType      media type specifier for the new pin
  1877.         pszPinName      pin name; cannot be a duplicate of an existing pin
  1878.         ppIPin          IPin interface pointer to the newly created pin
  1879.     --*/
  1880.     HRESULT
  1881.     CreateOutputPin (
  1882.         [in]    AM_MEDIA_TYPE * pMediaType,
  1883.         [in]    LPWSTR          pszPinName,
  1884.         [out]   IPin **         ppIPin
  1885.         ) ;
  1886.         
  1887.     /*++
  1888.         ------------------------------------------------------------------------
  1889.         purpose:    Updates the media type of the specified output pin.  If no
  1890.                       connection exists, the media type is updated always.  If
  1891.                       the pin is connected, the success/failure of the call will
  1892.                       depend on downstream input pin's accetance/rejection of
  1893.                       the specified media type, and subsequent success/failure
  1894.                       of a reconnect.
  1895.         
  1896.         pszPinName      pin name
  1897.         pMediaType      new media type specifier
  1898.     --*/
  1899.     HRESULT
  1900.     SetOutputPinMediaType (
  1901.         [in]    LPWSTR          pszPinName,
  1902.         [in]    AM_MEDIA_TYPE * pMediaType
  1903.         ) ;
  1904.         
  1905.     /*++
  1906.         ------------------------------------------------------------------------
  1907.         purpose:    Deletes the specified output pin.
  1908.         
  1909.         pszPinName      pin name
  1910.     --*/
  1911.     HRESULT
  1912.     DeleteOutputPin (
  1913.         [in]    LPWSTR  pszPinName
  1914.         ) ;
  1915. } ;
  1916. //---------------------------------------------------------------------
  1917. // IEnumStreamIdMap interface
  1918. //---------------------------------------------------------------------
  1919. cpp_quote("#define MPEG2_PROGRAM_STREAM_MAP                 0x00000000")
  1920. cpp_quote("#define MPEG2_PROGRAM_ELEMENTARY_STREAM          0x00000001")
  1921. cpp_quote("#define MPEG2_PROGRAM_DIRECTORY_PES_PACKET       0x00000002")
  1922. cpp_quote("#define MPEG2_PROGRAM_PACK_HEADER                0x00000003")
  1923. cpp_quote("#define MPEG2_PROGRAM_PES_STREAM                 0x00000004")
  1924. cpp_quote("#define MPEG2_PROGRAM_SYSTEM_HEADER              0x00000005")
  1925. cpp_quote("#define SUBSTREAM_FILTER_VAL_NONE                0x10000000")
  1926. typedef struct {
  1927.     ULONG   stream_id ;                     //  mpeg-2 stream_id
  1928.     DWORD   dwMediaSampleContent ;          //  #define'd above
  1929.     ULONG   ulSubstreamFilterValue ;        //  filtering value
  1930.     int     iDataOffset ;                   //  offset to elementary stream
  1931. } STREAM_ID_MAP ;
  1932. /*++
  1933.     Enumerates the StreamIds mapped on a pin
  1934. --*/
  1935. [
  1936.     object,
  1937.     local,
  1938.     uuid (945C1566-6202-46fc-96C7-D87F289C6534),
  1939.     pointer_default(unique)
  1940. ]
  1941. interface IEnumStreamIdMap : IUnknown
  1942. {
  1943.     HRESULT
  1944.     Next (
  1945.         [in]                            ULONG           cRequest,
  1946.         [in, out, size_is (cRequest)]   STREAM_ID_MAP * pStreamIdMap,
  1947.         [out]                           ULONG *         pcReceived
  1948.         ) ;
  1949.     HRESULT
  1950.     Skip (
  1951.         [in]    ULONG   cRecords
  1952.         ) ;
  1953.     HRESULT
  1954.     Reset (
  1955.         ) ;
  1956.     HRESULT
  1957.     Clone (
  1958.         [out]   IEnumStreamIdMap **  ppIEnumStreamIdMap
  1959.         ) ;
  1960. } ;
  1961. /*++
  1962.     Implemented on the output pin.
  1963.     
  1964.     Provides the ability to map/unmap a stream_id to/from an output pin.
  1965. --*/
  1966. [
  1967.     object,
  1968.     local,
  1969.     uuid (D0E04C47-25B8-4369-925A-362A01D95444),
  1970.     pointer_default(unique)
  1971. ]
  1972. interface IMPEG2StreamIdMap : IUnknown
  1973. {
  1974.     HRESULT
  1975.     MapStreamId (
  1976.         [in]    ULONG   ulStreamId,                 //  mpeg-2 stream_id
  1977.         [in]    DWORD   MediaSampleContent,         //  #define'd above IEnumStreamIdMap
  1978.         [in]    ULONG   ulSubstreamFilterValue,     //  filter value
  1979.         [in]    int     iDataOffset                 //  elementary stream offset
  1980.         ) ;
  1981.     HRESULT
  1982.     UnmapStreamId (
  1983.         [in]    ULONG   culStreamId,                //  number of stream_id's in pulStreamId
  1984.         [in]    ULONG * pulStreamId                 //  array of stream_id's to unmap
  1985.         ) ;
  1986.     HRESULT
  1987.     EnumStreamIdMap (
  1988.         [out]   IEnumStreamIdMap ** ppIEnumStreamIdMap
  1989.         ) ;
  1990. } ;