Index of /xtras/directshow_xtra/win

Icon  Name                      Last modified      Size  Description
[PARENTDIR] Parent Directory - [DIR] demos/ 2017-07-16 02:29 - [DIR] screenshots/ 2011-12-24 21:15 - [DIR] tools/ 2017-02-08 20:17 - [   ] directshow_xtra_v0.41.zip 2018-02-02 13:40 469K [TXT] readme.txt 2018-01-20 09:06 30K [   ] vcredist_x86.exe 2016-07-25 19:24 4.8M
-- xtra DirectShow
-- v0.41 (c) 2018 Valentin Schmidt

Contents
  1.) Interface
  2.) Method Overview
  3.) Methods in Detail
  4.) Special Filters
  5.) Filterlist-Parameter
  6.) Some useful CLSIDs
  7.) DirectShow Events


1.) Interface
=============

-- CONSTRUCTOR
new object me, *props

-- BASIC CONTROL
ds_open object me, object props
ds_play object me
ds_pause object me
ds_stop object me
ds_close object me

-- STEP
ds_step_forward object me, *frames
ds_step_backwards object me, *frames

-- GET/SET PARAMETER
ds_get_param object me, string param
ds_set_param object me, object props
ds_filter_dialog object me, object props
ds_filter_config object me, object props
ds_filter_get_param object me, object props
ds_filter_add object me, object props
ds_filter_connect object me, object connections

-- TV TUNER
ds_tuner_get_channel object me
ds_tuner_set_channel object me, integer channel

-- GET INFO
ds_get_media_info object me
ds_get_metadata object me
ds_get_status object me
ds_get_filters object me
ds_grab_image object me, *props
ds_get_stream_count object me, string splitterGUID
ds_get_stream_info object me, string splitterGUID, integer index
ds_set_stream_enabled object me, string splitterGUID, integer index

-- GRAPH
ds_show_graph object me, *testFlag, dllFile
ds_save_graph object me, object props

-- UTILITIES
ds_get_regfilters object me, *filterType
ds_register_filter object me, *filterFile
ds_unregister_filter object me, *filterFile
ds_error_info object me, integer errorNumber
ds_setcurrentdir object me, string dir

-- SPECIAL FILTERS
ds_dump_set_callback object me, symbol callbackHandler, *callbackTarget
ds_dump_start object me, *bufferSize
ds_dump_stop object me
ds_audiosource_start object me, *bufferSize
ds_audiosource_stop object me
ds_audiosource_set_sound object me, object soundByteArray
ds_videosource_start object me, integer width, integer height, integer fps
ds_videosource_stop object me
ds_videosource_set_image object me, object image

-- SUBTITLES (based on DirectVobSub/VSFilter)
ds_subtitles_load object me, string subtitleFile
ds_subtitles_get_filename object me
ds_subtitles_hide object me, integer hideFlag
ds_subtitles_set_position object me, integer overrideFlag, integer x, integer y
ds_subtitles_set_style object me, string fontface, object color, integer shadowFlag, integer outlineFlag, integer height, integer width, integer weight, *charSet

-- REGISTRY (HKEY_CURRENT_USER only, and currently only supporting value types REG_DWORD and REG_SZ)
ds_reg_write object me, string subkey, string name, any integerOrStringValue
ds_reg_read object me, string subkey, string name -- returns integer, string or VOID

ds_getWaveOutVolume object me
ds_setWaveOutVolume object me, integer volume
ds_getMasterVolume object me
ds_setMasterVolume object me, integer volume
ds_setMasterMute object me, integer muteFlag

-- ACM
ds_getAcmCodecFormats object me, object props
ds_setAcmCodecFormat object me, object props, integer formatIndex

-- LAV
ds_getLavAudioFormatConfig object me, integer aCodec
ds_setLavAudioFormatConfig object me, integer aCodec, integer enabledFlag

ds_getLavVideoFormatConfig object me, integer vCodec
ds_setLavVideoFormatConfig object me, integer vCodec, integer enabledFlag

ds_setLavAudioRuntimeConfig object me, integer enabledFlag
ds_setLavVideoRuntimeConfig object me, integer enabledFlag
	

2.) Method Overview
===================

-- CONSTRUCTOR
new object me, *props

-- BASIC CONTROL
ds_open object me, object props
ds_play object me
ds_pause object me
ds_stop object me
ds_close object me

-- STEP
ds_step_forward object me, *frames
ds_step_backwards object me, *frames

-- GET/SET PARAMETER
ds_get_param object me, string param
ds_set_param object me, object props
ds_filter_dialog object me, object props

ds_filter_config object me, object props
ds_filter_get_param object me, object props

ds_tuner_get_channel object me
ds_tuner_set_channel object me, integer channel

-- GET INFO
ds_get_media_info object me
ds_get_status object me
ds_get_filters object me
ds_grab_image object me, *props

-- to be called only *after* a file was sucessfully loaded
ds_get_stream_count object me, string splitterGUID
ds_get_stream_info object me, string splitterGUID, integer index
ds_set_stream_enabled object me, string splitterGUID, integer index

-- GRAPH
ds_show_graph object me, *
ds_save_graph object me, object props

-- UTILITIES
ds_get_regfilters object me, *filterType
ds_register_filter object me, *filterFile
ds_unregister_filter object me, *filterFile
ds_error_info object me, integer errorNumber
ds_setcurrentdir object me, string dir

-- SPECIAL FILTERS
ds_dump_set_callback object me, symbol callbackHandler, *callbackTarget
ds_dump_start object me, *bufferSize
ds_dump_stop object me
ds_audiosource_start object me, *bufferSize
ds_audiosource_stop object me
ds_audiosource_set_sound object me, object soundByteArray
ds_videosource_start object me, integer width, integer height, integer fps
ds_videosource_stop object me
ds_videosource_set_image object me, object image

-- SUBTITLES (based on DirectVobSub/VSFilter)
ds_subtitles_load object me, string subtitleFile
ds_subtitles_get_filename object me
ds_subtitles_hide object me, integer hideFlag
ds_subtitles_set_position object me, integer overrideFlag, integer x, integer y
ds_subtitles_set_style object me, string fontface, object color, integer shadowFlag, integer outlineFlag, integer height, integer width, integer weight, *intCharSet

-- REGISTRY (HKEY_CURRENT_USER only, and currently only supporting value types REG_DWORD and REG_SZ)
ds_reg_write object me, string subkey, string name, any integerOrStringValue
ds_reg_read object me, string subkey, string name -- returns integer, string or VOID


3.) Methods in Detail
=====================

Notes:
* = optional parameters
HRESULT = integer (see https://en.wikipedia.org/wiki/HRESULT)


--**************************************
-- INITIALIZE
--**************************************

----------------------------------------
new (*propList props) -> instance
----------------------------------------

Arguments:
- props: all (meaningful) params of ds_set_param()

Returns: instance


--**************************************
-- BASIC CONTROL
--**************************************

----------------------------------------
ds_open (propList props) -> HRESULT
----------------------------------------

Arguments:
- props:
    string mediafile
    string dvdvolume
    string graphfile
    list filterlist -- see section "4.) Filterlist-Parameter"
    integer paused
    integer registergraph

    + all params of ds_set_param()

Returns: HRESULT


----------------------------------------
ds_play () -> HRESULT
----------------------------------------

Returns: HRESULT


----------------------------------------
ds_pause () -> HRESULT
----------------------------------------

Returns: HRESULT


----------------------------------------
ds_stop () -> HRESULT
----------------------------------------

Returns: HRESULT


----------------------------------------
ds_close () -> VOID
----------------------------------------

Returns: VOID


--**************************************
-- STEP
--**************************************

----------------------------------------
ds_step_forward (*integer frames) -> VOID
----------------------------------------

Arguments:
- frames: number of frames (default = 1)

Returns: VOID


----------------------------------------
ds_step_backwards (*integer frames) -> VOID
----------------------------------------

Arguments:
- frames: number of frames (default = 1)

Returns: VOID


--**************************************
-- SET/GET PARAMETER
--**************************************

----------------------------------------
ds_get_param (string param) -> integer | float | rect
----------------------------------------

Arguments:
- param -- see props of ds_set_param for supported param strings (e.g. "hwnd")

Returns: integer | float | rect


----------------------------------------
ds_set_param (propList props) -> VOID
----------------------------------------

Arguments:
- props

    integer hwnd
    integer windowstyle -- NEW! (only functional if provided in combination with hwnd)
    string windowcaption -- NEW! (only functional if provided in combination with hwnd)
    integer movienum

    rect rect
    integer left
    integer top
    integer width
    integer height
    float zoom
    integer fullscreen
    float rate

    integer time -- in ms
    integer stoptime -- in ms

    rect srcrect
    rect destrect
    integer volume  -- Specifies the volume, as a number from 10,000 to 0, inclusive. Full volume is 0.
    integer balance -- Specifies the balance. The value can range from -10,000 to 10,000.
    integer visible

    integer mouseevents -- default: 0
    integer cursor  -- cursor=0 only works if mousevents=0!)
    integer loop    -- default: 0

    -- Lingo handler (as symbol) that gets called when a DirectShow event occurs
    -- (if type<>symbol, callback is removed)
    symbol callback

    -- If specified, this object receives callbacks (default=_movie)
    object callbacktarget -- new!

Returns: VOID


----------------------------------------
ds_filter_dialog (propList props) -> HRESULT
----------------------------------------

Arguments:
- props
    integer num
    string guid
    string name

Returns: HRESULT


----------------------------------------
ds_filter_config (propList props) -> HRESULT -- expermintal!
----------------------------------------
Tries to load configfile into filter with number num

Arguments:
- props:
    integer num
    string configfile

Returns: HRESULT


----------------------------------------
ds_filter_get_param (propList props)-> string | integer | VOID -- experimental!
----------------------------------------

Arguments:
- props
    string name -- name of filter
    string param

Returns: string | integer | VOID


--**************************************
-- GET INFOS
--**************************************

----------------------------------------
ds_get_media_info () -> propList
----------------------------------------

Returns: propList
  "duration": integer -- in ms
  "width": integer
  "height": integer
  "fps": float -- was inadvertently integer in versions before v0.14


----------------------------------------
ds_get_status () -> integer
----------------------------------------

Returns: integer -- 0=Idle, 1=Stopped, 2=Paused, 3=Running


----------------------------------------
ds_get_filters () -> propList
----------------------------------------

Returns: propList -- ["<guid>": filtername, ...]


----------------------------------------
ds_grab_image (*propList props) -> image | VOID
----------------------------------------

Arguments:
- props
    string bmpfile
    image image

Returns: image | VOID


--**************************************
-- GRAPH
--**************************************

----------------------------------------
ds_show_graph () -> HRESULT -- requires COM Component "Elecard Graph Viewer"
----------------------------------------

Returns: HRESULT -- Notice: Error REGDB_E_CLASSNOTREG = -2147221164: COM Component not registered


----------------------------------------
ds_save_graph (propList props) -> HRESULT
----------------------------------------

Arguments:
- props
    string graphfile

Returns: HRESULT


--**************************************
-- UTILITIES
--**************************************

----------------------------------------
ds_get_regfilters (*string category_guid) -> propList | list
----------------------------------------

When called without without argument, a proplist ["<guid>": filtername, ...] of all registered
DirectShow filters is is returned. Notice: properties are not unique, some filters like e.g. ACM
and VCM codecs don't have a unique GUID, for all of them the same GUID of the corresponding
DirectShow Wrapper Filter will be returned as property.

When called with category_guid, a list [filtername, ...] of registered DirectShow filters that
belong to this category is returned.

Arguments:
- *category_guid

Returns: propList | list


----------------------------------------
ds_register_filter (*string filterfile) -> HRESULT
----------------------------------------

Registers the specified filter (or COM Components/DLL Servers/ActiveX Control).
Same functionality as regsvr32.exe <filterfile>.

If no filterfile is specified, the function registers the 3 special filters
of the Xtra file (DirectShow.x32) in the system (see also paragraph "3.) Special Filters").

Requires the projector to be run with admin privileges!

In Windows Vista and later (Win 7/8/10) you can alternatively use Shell Xtra (v1.11+) and
code like this to trigger a "Run as Adminstrator"/UAC prompt from within Director:

  if filterfile contains SPACE then filterfile = QUOTE&filterfile&QUOTE
  props = [:]
  props["operation"] = "runas"
  props["wait"] = 1
  props["parameters"] = "/s" && filterfile
  exitCode = shellXtraInstance.shell_execex("regsvr32.exe", props)
  success = (exitCode=0)

Arguments:
- *filterfile -- path to filter to be registered

Returns: HRESULT


----------------------------------------
ds_unregister_filter (*string filterfile) -> HRESULT
----------------------------------------

Unregisters the specified filter (or COM Components/DLL Servers/ActiveX Control).
Same functionality as regsvr32.exe /u <filterfile>.

If no filterfile is specified, the function unregisters the 3 special filters
of the Xtra file (DirectShow.x32) in the system (see also paragraph "3.) Special Filters").

Requires the projector to be run with admin privileges!

In Windows Vista and later (Win 7/8/10) you can alternatively use Shell Xtra (v1.11+) and
code like this to trigger a "Run as Adminstrator"/UAC prompt from within Director:

  if filterfile contains SPACE then filterfile = QUOTE&filterfile&QUOTE
  props = [:]
  props["operation"] = "runas"
  props["wait"] = 1
  props["parameters"] = "/s /u" && filterfile
  exitCode = shellXtraInstance.shell_execex("regsvr32.exe", props)
  success = (exitCode=0)

Arguments:
- *filterfile -- path to filter to be unregistered

Returns: HRESULT


----------------------------------------
ds_error_info (integer errornumber) -> list
----------------------------------------

Arguments:
- errornumber -- HRESULT returned by some function

Returns: list -- [string error_name, string error_description]


----------------------------------------
ds_setcurrentdir (string dir) -> VOID
----------------------------------------

Sets current directory. This can be useful for (un)registering certain filters that depend on
external DLLs (like e.g. MainConcept's mcaacenc.ax). Those filters can only be registered if
both the filter and the DLL are in the current directory (or somewhere in the system path)

Arguments:
- dir -- path to directory

Returns: VOID


--**************************************
-- SPECIAL FILTER FUNCTIONS
--**************************************

ds_dump_set_callback (ymbol callbackHandler, *callbackTarget
ds_dump_start (*bufferSize
ds_dump_stop ()

ds_audiosource_start (*bufferSize)
ds_audiosource_stop ()
ds_audiosource_set_sound (object soundByteArray)

ds_videosource_start (integer width, integer height, integer fps)
ds_videosource_stop ()
ds_videosource_set_image (object image)

For details see next paragraph.


--**************************************
-- SUBTITLES (based on DirectVobSub/VSFilter)
--**************************************

----------------------------------------
ds_subtitles_load object me, string subtitleFile -> HRESULT
----------------------------------------

Loads a subtitle file (e.g. SRT) into the current filter graph. This only works if the filtergraph
either contains a VSFilter or VSFilter_autoload filter.

Returns: HRESULT


----------------------------------------
ds_subtitles_get_filename object me -> string | VOID
----------------------------------------

Returns the full path to the subtitle file that the xtra instance currently uses. If the current
filter graph contains a VSFilter/VSFilter_autoload filter, but no subtitle file is loaded, it
returns an empty string. If the graph doesn't contain any VSFilter/VSFilter_autoload filter, VOID is
returned.

Returns: string | VOID


----------------------------------------
ds_subtitles_hide object me, integer hideFlag -> HRESULT
----------------------------------------

Changes the visibility of subtitles: if hideFlag is TRUE, subtitles are hidden, otherwise shown.
This only works if the filter graph either contains a VSFilter or VSFilter_autoload filter.

Returns: HRESULT

----------------------------------------
ds_subtitles_set_position object me, integer overrideFlag, integer x, integer y -> HRESULT
----------------------------------------

Changes the position of subtitles in the video. 'overrideFlag' is a boolean and should usually be
set to TRUE (I'm not sure what setting it to FALSE actually means - it's an existing argument in the
VSFilter/DirectVobSub interface). x and y are percentage values, i.e. in the range 0-100. They
indicate the ratio of the bottom center of the subtitles relative to the width and height of the
video rect.

The function only works if the current filter graph either contains a VSFilter or VSFilter_autoload
filter. Changes are only applied after loading a new SRT file. To force an immediate update for the
subtitle file that is currently used, you first have to set the SRT to an empty string, and then
reload it again:

-- force visual update
subs = gDX.ds_subtitles_get_filename()
gDX.ds_subtitles_load("")
gDX.ds_subtitles_load(subs)

Returns: HRESULT


----------------------------------------
ds_subtitles_set_style object me, string fontface, object color, integer shadowFlag, integer outlineFlag, integer height, integer width, integer weight -> HRESULT
----------------------------------------

Changes the visual style of subtitles. For details on the parameters height, width and weight, see
https://msdn.microsoft.com/en-us/library/dd145037(v=vs.85).aspx

This only works if the current filter graph either contains a VSFilter or VSFilter_autoload filter.
Changes are only applied after loading a new SRT file. To force an immediate update for the subtitle
file that is currently used, you first have to set the SRT to an empty string, and then reload it
again:

-- force visual update
subs = gDX.ds_subtitles_get_filename()
gDX.ds_subtitles_load("")
gDX.ds_subtitles_load(subs)

Returns: HRESULT



4.) Special Filters
===================

----------------------------------------
-- SPECIAL FILTERS
----------------------------------------

This version of DirectShow Xtra provides 3 special DirectShow filters.
These filters allow to use Director as source and target for audio and video in
DirectShow filter graphs.

The filters can be registered/unregistered in the system either with

a) running

  regsvr32.exe DirectShow.x32
  regsvr32.exe /u DirectShow.x32

in a DOS box, or by

b) calling

  -- without argument!
  DSXtraInstance.ds_register_filter()
  DSXtraInstance.ds_unregister_filter()

via lingo.

Note:
Registering/unregistering needs admin privileges, so if not admin/under UAC you
have to run the *.bat files (or the Projector, if using ds_register_filter...)
as admin by selecting "Run as Administartor" fom the Explorer's context menu.


The 3special filters are:

  - DS Xtra Dump Filter
  - DS Xtra AudioSource Filter
  - DS Xtra VideoSource Filter

Corresponding GUIDs are:

  - CLSID_DSXtraDumpFilter        = "36a5f770-fe4c-11ce-a8ed-00aa002feab5"
  - CLSID_DSXtraAudioSourceFilter = "BFBC37B0-20B1-43CE-B7AB-6DCD080D1E46"
  - CLSID_DSXtraVideoSourceFilter = "9A80E195-3BBA-4821-B18B-21BB496F80F8"


Details:

a) DS Xtra Dump Filter

A general purpose sink filter that accepts arbitrary data types and passes that
data (as bytearray) to a lingo callback handler. Demo "dump.dir" ("dump.exe")
shows how you can use it to receive input from an arbitrary audio source (e.g. a
microphone, a TV/Radio tuner or an audio or video file) and either record it to
memory or to an external WAV file, or directly play it using director's (new)
sound engine.


b) DS Xtra AudioSource Filter

Allows to use Director as audio source in filter graphs. Audio data is passed as
bytearray to function ds_audiosource_set_sound(). Demo "audiosource.dir"
("audiosource.exe") shows how this can be done automatically by using the
Director's registerByteArrayCallback function to automatically pass the output
of a currently playing Sound object.


c) DS Xtra VideoSource Filter

Allows to use Director as video source in filter graphs. Video data is passed
frame-wise as lingo images to ds_videosource_set_image(). All images are
(obviously) required to have the same dimensions, and currently ONLY 32-bit
images are supported. Width, height and the output video's framerate have to be
passed to function ds_videosource_start().


5.) Filterlist-Parameter
========================

props = [
  "filterlist":
  [

    --------------------------- filters
    "filters":
    [
      ["source": the moviepath&"foo.avi"],
      -- multiple sources are possible, e.g. one for the image and another one for
      -- the sound.
      ...

      -- or

      ["guid":CLSID_ShoutcastSource, "source":"http://foo.com:80/stream/1", "dialog":false], -- dialog optional, default=false
      ...

      -- or (NEW! Allows to use filters that are NOT registered iny the system!)

      ["guid": CLSID_LAVSplitterSource, "filterpath":_movie.path&"filters\LAVSplitter.ax", "source": _movie.path&"test.mp4"],
      -- note: when you provide a "filterpath", you can optionally also provide a "filtername" (string) which is then
      -- used for those directly loaded filters as internal name (as displayed in Graph Viewers)
      ...

      -- or

      ["guid":CLSID_DivxDecoder, "dialog":false], -- dialog optional, default=false
      ...

      -- or (NEW! Allows to use filters that are NOT registered iny the system!)

      ["guid":CLSID_LAVVideoDecoder, "filterpath":_movie.path&"filters\LAVVideo.ax", "dialog":false], -- dialog optional, default=false
      -- note: when you provide a "filterpath", you can optionally also provide a "filtername" (string) which is then
      -- used for those directly loaded filters as internal name (as displayed in Graph Viewers)

      ...

      -- or

      ["guid":CLSID_FileWriter, "dest":_movie.path&"foo.mp3", "dialog":false] -- dialog optional, default=false
      ...

      -- or (NEW! Allows to use filters that are NOT registered iny the system!)

      ["guid":CLSID_FileDumpFilter, "filterpath":_movie.path&"filters\dump.ax", "dest":_movie.path&"dump.dat", "dialog":false] -- dialog optional, default=false
      ...

      -- or

      ["category":CLSID_AudioCompressorCategory, "name":"Windows Media Audio V2"],
      ...

      -- or

      ["category":CLSID_AudioCompressorCategory, "num":3],
      ...

    ], -- end filters

    --------------------------- configfile (optional)

    "configfile": "......." -- only for VCM codecs at the moment!

    -- if "dialog"=true  and "configfile" specified => saves to configfile
    -- if "dialog"=false and "configfile" specified => loads from configfile

    --------------------------- connections (optional)

    "connections":
    [
      [1,2], -- connects 2 nodes (filters) at a time; the numbers specify the
                position in the filterlist that was passed with the "filters"
                property (see above)
      [2,3],
      ...
    ],

    --------------------------- render (optional): renders automatically the Out-Pin
                                of the Filter with given number

    "render": [1,3,...],

    --------------------------- debugfile (optional): if specified, all graph
                                building actions are logged into this file

    "debuglogfile": "c:\graph.log"

  ] -- end filterlist

] -- end props


6. Some useful CLSIDs
=====================

-- Filter Categories
CLSID_LegacyAmFilterCategory      = "083863F1-70DE-11d0-BD40-00A0C911CE86"
CLSID_VideoCompressorCategory     = "33D9A760-90C8-11D0-BD43-00A0C911CE86"
CLSID_AudioCompressorCategory     = "33D9A761-90C8-11D0-BD43-00A0C911CE86"
CLSID_VideoInputDeviceCategory    = "860BB310-5D01-11D0-BD3B-00A0C911CE86"
CLSID_AudioInputDeviceCategory    = "33D9A762-90C8-11D0-BD43-00A0C911CE86"
CLSID_AudioRendererCategory       = "E0F158E1-CB04-11D0-BD4E-00A0C911CE86"
CLSID_MidiRendererCategory        = "4EFE2452-168A-11D1-BC76-00C04FB9453B"
CLSID_MediaEncoderCategory        = "7D22E920-5CA9-4787-8C2B-A6779BD11781"
CLSID_MediaMultiplexerCategory    = "236C9559-ADCE-4736-BF72-BAB34E392196"

CLSID_DMOCATEGORY_AUDIO_CAPTURE_EFFECT  = "F665AABA-3E09-4920-AA5F-219811148F09"
CLSID_DMOCATEGORY_AUDIO_DECODER   = "57F2DB8B-E6BB-4513-9D43-DCD2A6593125"
CLSID_DMOCATEGORY_AUDIO_EFFECT    = "F3602B3F-0592-48DF-A4CD-674721E7EBEB"
CLSID_DMOCATEGORY_AUDIO_ENCODER   = "33D9A761-90C8-11D0-BD43-00A0C911CE86"
CLSID_DMOCATEGORY_AUDIO_NOISE_SUPPRESS  = "E07F903F-62FD-4E60-8CDD-DEA7236665B5"
CLSID_DMOCATEGORY_VIDEO_DECODER   = "4A69B442-28BE-4991-969C-B500ADF5D8A8"
CLSID_DMOCATEGORY_VIDEO_EFFECT    = "D990EE14-776C-4723-BE46-3DA2F56F10B9"
CLSID_DMOCATEGORY_VIDEO_ENCODER   = "33D9A760-90C8-11D0-BD43-00A0C911CE86"


-- DirectShow Xtra special filters
CLSID_DSXtraDumpFilter            = "36a5f770-fe4c-11ce-a8ed-00aa002feab5"
CLSID_DSXtraAudioSourceFilter     = "BFBC37B0-20B1-43CE-B7AB-6DCD080D1E46"
CLSID_DSXtraVideoSourceFilter     = "9A80E195-3BBA-4821-B18B-21BB496F80F8"


-- LAV filters
CLSID_LAVSplitter                 = "171252A0-8820-4AFE-9DF8-5C92B2D66B04"
CLSID_LAVSplitterSource           = "B98D13E7-55DB-4385-A33D-09FD1BA26338"
CLSID_LAVVideoDecoder             = "EE30215D-164F-4A92-A4EB-9D4C13390F9F"
CLSID_LAVAudioDecoder             = "E8E73B6B-4CB3-44A4-BE99-4F7BCB96E491"


-- MP3 (Elecard, Lame, Intervideo)
CLSID_LameMpegLayer3AudioEncoder  = "B8D27088-DF5F-4B7C-98DC-0E91A1696286"
CLSID_LameAudioEncoder            = "B8D27088-FF5F-4B7C-98DC-0E91A1696286"
CLSID_IntervideoAudioEncoder      = "0CD2E140-8D60-11D3-9C32-00104B3801F6"


-- DMO Audio FX
CLSID_DirectSoundChorusDMO        = "EFE6629C-81F7-4281-BD91-C9D604A95AF6"
CLSID_DirectSoundCompressorDMO    = "EF011F79-4000-406D-87AF-BFFB3FC39D57"
CLSID_DirectSoundDistortionDMO    = "EF114C90-CD1D-484E-96E5-09CFAF912A21"
CLSID_DirectSoundEchoDMO          = "EF3E932C-D40B-4F51-8CCF-3F98F1B29D5D"
CLSID_DirectSoundFlangerDMO       = "EFCA3D92-DFD8-4672-A603-7420894BAD98"
CLSID_DirectSoundI3DL2ReverbDMO   = "EF985E71-D5C7-42D4-BA4D-2D073E2E96F4"
CLSID_DirectSoundGargleDMO        = "DAFD8210-5711-4B91-9FE3-F75B7AE279BF"
CLSID_ParamEqDMO                  = "120CED89-3BF4-4173-A132-3CB406CF3231"
CLSID_DirectSoundWavesReverbDMO   = "87FC0268-9A55-4360-95AA-004A1D9DE26C"

CLSID_IntervideoTimestretchDMO    = "73fceeb8-953f-41a1-87f7-93602a0be7bb"
CLSID_IntervideoDownmixDMO        = "86a2b014-420b-432b-8e05-feb9c1dc756d"
CLSID_IntervideoDSPDMO            = "9c123ea9-aec9-4f75-bbc0-7565fa139896"
CLSID_IntervideoCompanderDMO      = "b8c9acd7-8105-42f3-88ae-83015b00eedc"


-- Other
CLSID_WaveParser                  = "D51BD5A1-7548-11CF-A520-0080C77EF58A"
CLSID_WavDest                     = "3C78B8E2-6C4D-11D1-ADE2-0000F8754B99"
CLSID_FileSriter                  = "8596E5F0-0DA5-11D0-BD21-00A0C911CE86"


7.) DirectShow Events
=====================

"EC_ACTIVATE" = 19
"EC_BUFFERING_DATA" = 17
"EC_BUILT" = 768
"EC_CLOCK_CHANGED" = 13
"EC_CLOCK_UNSET" = 81
"EC_CODECAPI_EVENT" = 87
"EC_COMPLETE" = 1
"EC_DEVICE_LOST" = 31
"EC_DISPLAY_CHANGED" = 22
"EC_END_OF_SEGMENT" = 28
"EC_ERRORABORT" = 3
"EC_ERROR_STILLPLAYING" = 8
"EC_EXTDEVICE_MODE_CHANGE" = 49
"EC_FULLSCREEN_LOST" = 18
"EC_GRAPH_CHANGED" = 80
"EC_LENGTH_CHANGED" = 30
"EC_NEED_RESTART" = 20
"EC_NOTIFY_WINDOW" = 25
"EC_OLE_EVENT" = 24
"EC_OPENING_FILE" = 16
"EC_PALETTE_CHANGED" = 9
"EC_PAUSED" = 14
"EC_PREPROCESS_COMPLETE" = 86
"EC_QUALITY_CHANGE" = 11
"EC_REPAINT" = 5
"EC_SEGMENT_STARTED" = 29
"EC_SHUTTING_DOWN" = 12
"EC_SNDDEV_IN_ERROR" = 512
"EC_SNDDEV_OUT_ERROR" = 513
"EC_STARVATION" = 23
"EC_STATE_CHANGE" = 50
"EC_STEP_COMPLETE" = 36
"EC_STREAM_CONTROL_STARTED" = 27
"EC_STREAM_CONTROL_STOPPED" = 26
"EC_STREAM_ERROR_STILLPLAYING" = 7
"EC_STREAM_ERROR_STOPPED" = 6
"EC_SYSTEMBASE" = 0
"EC_TIME" = 4
"EC_TIMECODE_AVAILABLE" = 48
"EC_UNBUILT" = 769
"EC_USER" = 32768
"EC_USERABORT" = 2
"EC_VIDEO_SIZE_CHANGED" = 10
"EC_VMR_RECONNECTION_FAILED" = 85
"EC_VMR_RENDERDEVICE_SET" = 83
"EC_VMR_SURFACE_FLIPPED" = 84
"EC_WINDOW_DESTROYED" = 21
"EC_WMT_EVENT" = 594
"EC_WMT_INDEX_EVENT" = 593


8. LAV Codec Numbers
====================

LAVAudioCodecs:

 0 = Codec_AAC
 1 = Codec_AC3
 2 = Codec_EAC3
 3 = Codec_DTS
 4 = Codec_MP2
 5 = Codec_MP3
 6 = Codec_TRUEHD
 7 = Codec_FLAC
 8 = Codec_VORBIS
 9 = Codec_LPCM
10 = Codec_PCM
11 = Codec_WAVPACK
12 = Codec_TTA
13 = Codec_WMA2
14 = Codec_WMAPRO
15 = Codec_Cook
16 = Codec_RealAudio
17 = Codec_WMALL
18 = Codec_ALAC
19 = Codec_Opus
20 = Codec_AMR
21 = Codec_Nellymoser
22 = Codec_MSPCM
23 = Codec_Truespeech
24 = Codec_TAK
25 = Codec_ATRAC

LAVVideoCodecs:

 0 = Codec_H264
 1 = Codec_VC1
 2 = Codec_MPEG1
 3 = Codec_MPEG2
 4 = Codec_MPEG4
 5 = Codec_MSMPEG4
 6 = Codec_VP8
 7 = Codec_WMV3
 8 = Codec_WMV12
 9 = Codec_MJPEG
10 = Codec_Theora
11 = Codec_FLV1
12 = Codec_VP6
13 = Codec_SVQ
14 = Codec_H261
15 = Codec_H263
16 = Codec_Indeo
17 = Codec_TSCC
18 = Codec_Fraps
19 = Codec_HuffYUV
20 = Codec_QTRle
21 = Codec_DV
22 = Codec_Bink
23 = Codec_Smacker
24 = Codec_RV12
25 = Codec_RV34
26 = Codec_Lagarith
27 = Codec_Cinepak
28 = Codec_Camstudio
29 = Codec_QPEG
30 = Codec_ZLIB
31 = Codec_QTRpza
32 = Codec_PNG
33 = Codec_MSRLE
34 = Codec_ProRes
35 = Codec_UtVideo
36 = Codec_Dirac
37 = Codec_DNxHD
38 = Codec_MSVideo1
39 = Codec_8BPS
40 = Codec_LOCO
41 = Codec_ZMBV
42 = Codec_VCR1
43 = Codec_Snow
44 = Codec_FFV1
45 = Codec_v210
46 = Codec_JPEG2000
47 = Codec_VMNC
48 = Codec_FLIC
49 = Codec_G2M
50 = Codec_ICOD
51 = Codec_THP
52 = Codec_HEVC
53 = Codec_VP9
54 = Codec_TrueMotion
55 = Codec_VP7
56 = Codec_H264MVC