-- 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 -- ["": 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 ["": 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 . 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 . 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