Index of /xtras/directshow_xtra/win
Name Last modified Size Description
Parent Directory -
demos/ 2021-08-18 18:31 -
screenshots/ 2011-12-24 21:15 -
tools/ 2017-02-08 20:17 -
directshow_xtra_v0.44.zip 2019-07-11 12:20 469K
readme.txt 2019-07-11 12:19 31K
vcredist_x86.exe 2016-07-25 19:24 4.8M
VSFilter_final.zip 2019-07-26 16:53 723K
-- xtra DirectShow
-- v0.44 (c) 2019 Valentin Schmidt
Contents
1.) Interface
2.) Methods in Detail
3.) Special Filters
4.) Filterlist-Parameters
5.) Some useful CLSIDs
6.) DirectShow Events
7.) LAV Codec Numbers
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
-- VOLUME
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
-- VMR-9 IMAGE ADJUSTMENT
ds_adjustImageGetRange object me, integer flag
ds_adjustImageGetValue object me, integer flag
ds_adjustImageSetValue object me, integer flag, float val
2.) 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-Parameters"
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"E
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"E
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.
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.
Returns: HRESULT
----------------------------------------
ds_adjustImageGetRange object me, integer flag -> propList or HRESULT
----------------------------------------
This function only works if the VMR-9 video renderer is used in the current graph, otherwise it will
return E_FAIL.
If successful, it returns details about the supported range of the image property specified by flag,
it returns a property list with the 4 properties "MinValue", "MaxValue", "DefaultValue" and
"StepSize", all corresponding values are floats.
Note: the ranges can be hardware/GPU specific, but for a specific hardware it's fixed, so there is
no need to call the function multiple times.
Parameter 'flag' has the following meaning:
1 means Brightness
2 means Contrast
4 means Hue
8 means Saturation
Example:
-- get supported range for 'Brightness'
put gDX.ds_adjustImageGetRange(1)
["MinValue": -100.0000, "MaxValue": 100.0000, "DefaultValue": 0.0000, "StepSize": 0.1000]
Returns: either property list, or error code as negative integer (HRESULT)
----------------------------------------
ds_adjustImageGetValue object me, integer flag -> float or HRESULT
----------------------------------------
This function only works if the VMR-9 video renderer is used in the current graph, otherwise it will
return E_FAIL.
If successful, it returns the current value (as float) of the image property specified by flag, see
ds_adjustImageGetRange() for the meaning of this flag.
Example:
-- get current 'Contrast' value
res = gDX.ds_adjustImageGetValue(2)
if floatP(res) then
put "Contrast:", res
else
put "Error:", gDX.ds_error_info(res)
end if
Returns: either float, or error code as negative integer (HRESULT)
----------------------------------------
ds_adjustImageSetValue object me, integer flag, float val -> HRESULT
----------------------------------------
This function only works if the VMR-9 video renderer is used in the current graph, otherwise it will
return E_FAIL.
The function tries to change the current value (float) of the image property specified by flag, see
ds_adjustImageGetRange() for the meaning of this flag. If successful, it returns 0, otherwise an
error code as negative integer (HRESULT).
Example:
-- change current 'Saturation' value
hr = gDX.ds_adjustImageSetValue(8, 10.0)
Returns: HRESULT (0 = no error)
3.) 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().
4.) Filterlist-Parameters
=========================
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
5.) Some useful CLSIDs
======================
-- Video Renderers
CLSID_VideoRenderer = "70E102B0-5556-11CE-97C0-00AA0055595A"
CLSID_VideoMixingRenderer = "B87BEB7B-8D29-423f-AE4D-6582C10175AC"
CLSID_VideoRendererDefault = "6BC1CFFA-8FC1-4261-AC22-CFB4CC38DB50"
CLSID_VideoMixingRenderer9 = "51B4ABF3-748F-4E3B-A276-C828330E926A"
CLSID_EnhancedVideoRenderer = "FA10746C-9B63-4B6C-BC49-FC300EA5F256"
-- Audio Renderes
CLSID_DefaultDirectSoundDevice = "79376820-07D0-11CF-A24D-0020AFD79767"
CLSID_DefaultWaveOutDevice = "E30629D1-27E5-11CE-875D-00608CB78066"
-- MIDI Renderers
CLSID_MIDIRenderer = "07B65360-C445-11CE-AFDE-00AA006C14F4"
-- 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"
6.) 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
7.) 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