VERSION 1.0 CLASS BEGIN MultiUse = -1 'True Persistable = 0 'NotPersistable DataBindingBehavior = 0 'vbNone DataSourceBehavior = 0 'vbNone MTSTransactionMode = 0 'NotAnMTSObject END Attribute VB_Name = "clsAVIInfo" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = True Attribute VB_PredeclaredId = False Attribute VB_Exposed = False ' AVI info version 1.042 ' Written by Mike D Sutton of EDais ' Microsoft Visual Basic MVP ' ' E-Mail: EDais@mvps.org ' WWW: Http://www.mvps.org/EDais/ ' ' Written: 25/06/2002 ' Last edited: 29/07/2003 'Version history: '---------------- ' Video codecs: 236 ' Audio codecs: 138 ' Version 1.042 (29/07/2003): ' Minor non-impact code modifications '---------------------------' ' Version 1.041 (12/08/2002): ' Small (non-impact) change to the codec detection - If the video codec was not found in the video stream header it will ' now default to the one defined in the BMIH of the video stream format chunk - Thanks to Johan Stäck for this one. '---------------------------' ' Version 1.04 (06/08/2002): ' Added generic support for the INFO list ' ' GetInfoList() - Returns a list of info tags found in the file ' QueryInfo() - Attempts to return the matched info tag data ' GetInfoName() - Returns the name of a particular info tag ' TrimNull() - Converts a null-terminated string to a VB string '-----------------' ' Version 1.03 (30/07/2002): ' Added XviD codec (Still in development open source continuation of Project Mayo - http://www.xvid.org/) ' Made some minor (Non impact) adjustments to parser including potential overflow protection '--------------------------' ' Version 1.021 (16/07/2002): ' Added IndexOffset, MovieOffset and PadBytes properties ' Added new codecs and changed some 'Friendly names' from registry (Video: 235, Audio: 138) '---------------------------' ' Version 1.02 (10/07/2002): ' Added AudioFormat, FileName, FileSize and BytePerSec properties ' FormatTime() now correctly interprets times over an hour and even over a day (!) ' ' ClearInfo() - Clears the public information from the class ' AudioCodecFromFormat() - Retrieves the name of the audio codec from the format-tag of the WAVEFORMAT structure (135 codecs defined) '--------------------------' ' Version 1.01 (26/06/2002): ' Added HasVideo, HasAudio, VideoCodec, AudioCodec, NumCodecs, BitDepth, Channels and SamplesPerSec properties ' ReadFile() now uses IFF chunked-based parse to extract full header ' ' CodecToName() - Attempts to match a FourCC codec tag to a codec name ' MakeCodecList() - Creates the internal video codec list (233 codecs) ' AddCodec() - Add's a new codec definition to the codec list '-------------------' ' Version 1.0 (25/06/2002): ' Added Width, Height, FrameRate, PlayLength, NumFrames and NumStreams properties ' ' ReadFile() - Read's an AVI file off disk and extracts information about it ' FormatTime() - Format's a number of seconds into an "[hh:]mm:ss" string ' LongToFourCC() - Converts a long into a 4 character code string ' FourCCToLong() - Converts a 4 character code string into a long '------------------' Private Declare Sub RtlMoveMemory Lib "kernel32" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long) Private Type typMainAVIHeader ' 56 bytes dwMicroSecPerFrame As Long dwMaxBytesPerSec As Long dwReserved1 As Long dwFlags As Long dwTotalFrames As Long dwInitialFrames As Long dwStreams As Long dwSuggestedBufferSize As Long dwWidth As Long dwHeight As Long dwScale As Long dwRate As Long dwStart As Long dwLength As Long End Type Private Type typAVIStreamHeader '48 bytes fccType As String * 4 fccHandler As String * 4 dwFlags As Long dwReserved1 As Long dwInitialFrames As Long dwScale As Long dwRate As Long dwStart As Long dwLength As Long dwSuggestedBufferSize As Long dwQuality As Long dwSampleSize As Long End Type Private Type typRIFFFormHeader rfhSignature As String * 4 rfhSize As Long rfhSpecialization As String * 4 End Type Private Type typChunkHeader chName As String * 4 chSize As Long End Type Private Type typListHeader lhSignature As String * 4 lhCount As Long lhIdentity As String * 4 End Type Private Type typCodecInf FourCC As String * 4 Description As String End Type Private Type BITMAPINFOHEADER ' 40 bytes biSize As Long biWidth As Long biHeight As Long biPlanes As Integer biBitCount As Integer biCompression As Long biSizeImage As Long biXPelsPerMeter As Long biYPelsPerMeter As Long biClrUsed As Long biClrImportant As Long End Type Private Type RGBQUAD ' 32-bit colour rgbBlue As Byte rgbGreen As Byte rgbRed As Byte rgbReserved As Byte End Type Private Type BITMAPINFO bmiHeader As BITMAPINFOHEADER bmiColors() As RGBQUAD End Type Private Type WAVEFORMAT ' 14 bytes wFormatTag As Integer nChannels As Integer nSamplesPerSec As Long nAvgBytesPerSec As Long nBlockAlign As Integer End Type Private Type PCMWAVEFORMAT ' 16 bytes wf As WAVEFORMAT wBitsPerSample As Integer End Type Private Type typInfoEntry ieTag As Long ieData As String End Type Dim CodecList() As typCodecInf Dim NumCodec As Long Dim InfoEntryList() As typInfoEntry Dim NumInfos As Long ' Member variables Dim m_Width As Long Dim m_Height As Long Dim m_FrameRate As Long Dim m_PlayLength As Long Dim m_NumFrames As Long Dim m_NumStreams As Integer Dim m_HasVideo As Boolean Dim m_HasAudio As Boolean Dim m_VideoCodec As String Dim m_AudioCodec As String Dim m_BitDepth As Integer Dim m_Channels As Integer Dim m_SamplesPerSec As Long Dim m_AudioFormat As String Dim m_FileName As String Dim m_FileSize As Long Dim m_BytePerSec As Long Dim m_IndexOffset As Long Dim m_MovieOffset As Long Dim m_PadBytes As Long Private Const RIFFHeader As String = "RIFF" Private Const AVIHeader As String = "AVI " Private Const ListChunk As String = "LIST" Private Const FormatChunk As String = "hdrl" Private Const HeaderChunk As String = "avih" Private Const StreamHeader As String = "strh" Private Const StreamFormat As String = "strf" Private Const VideoTag As String = "vids" Private Const AudioTag As String = "auds" Private Const JunkTag As String = "JUNK" ' Standard junk tag Private Const JunQTag As String = "JUNQ" ' Premiere junk tag Private Const MovieChunk As String = "movi" Private Const IndexChunk As String = "idx1" Private Const InfoList As String = "INFO" ' Info list Private Const InfoArch As String = "IARL" ' Info -> Archival location Private Const InfoArti As String = "IART" ' Info -> Artist Private Const InfoComi As String = "ICMS" ' Info -> Commissioned Private Const InfoComm As String = "ICMT" ' Info -> Comments Private Const InfoCopy As String = "ICOP" ' Info -> Copyright Private Const InfoCrea As String = "ICRD" ' Info -> Creation Date (YYYYMMDD) Private Const InfoCrop As String = "ICRP" ' Info -> Cropped Private Const InfoDimn As String = "IDIM" ' Info -> Dimensions Private Const InfoDots As String = "IDPI" ' Info -> Dots Per Inch Private Const InfoEngi As String = "IENG" ' Info -> Engineer Private Const InfoGenr As String = "IGNR" ' Info -> Genre Private Const InfoIDTh As String = "IID3" ' Info -> ID3 tag Private Const InfoKeyw As String = "IKEY" ' Info -> Keywords Private Const InfoLigt As String = "ILGT" ' Info -> Lightness Private Const InfoLyrc As String = "ILYC" ' Info -> Lyrics Private Const InfoMedi As String = "IMED" ' Info -> Medium Private Const InfoMPTh As String = "IMP3" ' Info -> MP3 information Private Const InfoName As String = "INAM" ' Info -> Name/Title Private Const InfoPalt As String = "IPLT" ' Info -> Palette Setting Private Const InfoProd As String = "IPRD" ' Info -> Product Private Const InfoSubj As String = "ISBJ" ' Info -> Subject Private Const InfoSoft As String = "ISFT" ' Info -> Software Private Const InfoShrp As String = "ISHP" ' Info -> Sharpness Private Const InfoSrce As String = "ISRC" ' Info -> Source Private Const InfoSrcF As String = "ISRF" ' Info -> Source Form Private Const InfoTech As String = "ITCH" ' Info -> Technician Private Const InfoDisp As String = "DISP" ' Info -> Sound Scheme Title Public Event ReadError(ByVal outDesc As String) ' Public interface to member variables Public Property Get Width() As Long Width = m_Width End Property Public Property Get Height() As Long Height = m_Height End Property Public Property Get BitDepth() As Integer If (m_HasVideo) Then BitDepth = m_BitDepth End Property Public Property Get Channels() As Integer If (m_HasAudio) Then Channels = m_Channels End Property Public Property Get SamplesPerSec() As Long If (m_HasAudio) Then SamplesPerSec = m_SamplesPerSec End Property Public Property Get FrameRate() As Long If (m_HasVideo) Then FrameRate = m_FrameRate End Property Public Property Get PlayLength() As Long PlayLength = m_PlayLength End Property Public Property Get NumFrames() As Long If (m_HasVideo) Then NumFrames = m_NumFrames End Property Public Property Get NumStreams() As Integer NumStreams = m_NumStreams End Property Public Property Get HasVideo() As Boolean HasVideo = m_HasVideo End Property Public Property Get HasAudio() As Boolean HasAudio = m_HasAudio End Property Public Property Get VideoCodec() As String If (m_HasVideo) Then VideoCodec = m_VideoCodec End Property Public Property Get AudioCodec() As String If (m_HasAudio) Then AudioCodec = m_AudioCodec End Property Public Property Get NumCodecs() As Long If (NumCodec = 0) Then Call MakeCodecList NumCodecs = NumCodec End Property Public Property Get AudioFormat() As String If (m_HasAudio) Then AudioFormat = m_AudioFormat End Property Public Property Get FileName() As String FileName = m_FileName End Property Public Property Get FileSize() As Long FileSize = m_FileSize End Property Public Property Get BytePerSec() As Long If (m_HasAudio) Then BytePerSec = m_BytePerSec End Property Public Property Get IndexOffset() As Long IndexOffset = m_IndexOffset End Property Public Property Get MovieOffset() As Long MovieOffset = m_MovieOffset End Property Public Property Get PadBytes() As Long PadBytes = m_PadBytes End Property ' Public methods Public Function ReadFile(ByRef inFile As String) As Boolean Dim FNum As Integer Dim FileSize As Long Dim AVIInfo As typMainAVIHeader Dim AVIHead As typRIFFFormHeader Dim AVIList As typListHeader Dim AVIChunk As typChunkHeader Dim AVIStream As typAVIStreamHeader Dim PadData() As Byte Dim AVIBMI As BITMAPINFO Dim AVIWave As PCMWAVEFORMAT Dim GetPal As Long Dim LastPos As Long Dim InfoLeft As Long Dim ReadInfo As String Const OneMillion As Long = 1000000 Call ClearInfo On Error Resume Next FileSize = FileLen(inFile) On Error GoTo 0 If (FileSize) Then FNum = FreeFile() Open inFile For Binary Access Read Lock Write As #FNum Get #FNum, , AVIHead ' Grab first set of AVI file headers Get #FNum, , AVIList Get #FNum, , AVIChunk Get #FNum, , AVIInfo ' Validate headers If ((AVIHead.rfhSignature <> RIFFHeader) Or _ (AVIHead.rfhSpecialization <> AVIHeader) Or _ (AVIList.lhSignature <> ListChunk) Or _ (AVIList.lhIdentity <> FormatChunk) Or _ (AVIChunk.chName <> HeaderChunk)) Then RaiseEvent ReadError("Incorrect AVI header") Else ' Assume by this point that this is a valid AVI file LastPos = Seek(FNum) Do ' Start IFF chunk parser Get #FNum, , AVIChunk ' Word align chunk size AVIChunk.chSize = ((AVIChunk.chSize + 1) \ 2) * 2 ' Check for 'bad' chunk headers (<0 bytes) If (AVIChunk.chSize < 0) Then Exit Do Select Case AVIChunk.chName Case ListChunk AVIList.lhSignature = AVIChunk.chName AVIList.lhCount = AVIChunk.chSize Get #FNum, , AVIList.lhIdentity Select Case AVIList.lhIdentity Case MovieChunk m_MovieOffset = Seek(FNum) - 5 LastPos = LastPos + AVIList.lhCount + 8 Seek #FNum, LastPos Case InfoList ' Info chunk - Don't offset since we want to read the entries InfoLeft = AVIChunk.chSize End Select LastPos = LastPos + Len(AVIList) Case StreamHeader Get #FNum, , AVIStream Case StreamFormat If (AVIStream.fccType = VideoTag) Then m_HasVideo = True m_VideoCodec = AVIStream.fccHandler Get #FNum, , AVIBMI.bmiHeader With AVIBMI.bmiHeader If (.biBitCount < 9) Then ' Read Palette If (.biClrUsed < 2) Then .biClrUsed = (2 ^ .biBitCount) ReDim AVIBMI.bmiColors(.biClrUsed - 1) As RGBQUAD For GetPal = 0 To .biClrUsed - 1 Get #FNum, , AVIBMI.bmiColors(GetPal) Next GetPal End If ' If the video codec was not set in the stream header, use the one defined here If (m_VideoCodec = String(4, vbNullChar)) Then m_VideoCodec = LongToFourCC(.biCompression) End With ElseIf AVIStream.fccType = AudioTag Then m_HasAudio = True m_AudioCodec = AVIStream.fccHandler Get #FNum, , AVIWave.wf If (AVIChunk.chSize >= 16) Then Get #FNum, , AVIWave.wBitsPerSample m_AudioFormat = AudioCodecFromFormat(AVIWave.wf.wFormatTag) End If Case IndexChunk ' Found movie index tag m_IndexOffset = Seek(FNum) - (Len(AVIChunk) + 1) LastPos = LastPos - (Len(AVIChunk) + 4) ' *Shrug* dont ask, it doesn't work without it.. Case JunkTag, JunQTag ' Found junk tag, increment padding count m_PadBytes = m_PadBytes + AVIChunk.chSize Case Else ' Un-defined chunk If (InfoLeft > 0) Then ' Info chunk ReadInfo = Space(AVIChunk.chSize) Get #FNum, , ReadInfo ' Read chunk data and add to list ReDim Preserve InfoEntryList(NumInfos) As typInfoEntry InfoEntryList(NumInfos).ieTag = FourCCToLong(AVIChunk.chName) InfoEntryList(NumInfos).ieData = TrimNull(ReadInfo) NumInfos = NumInfos + 1 End If End Select ' Avoid overflows by checking to make sure we can accomodate the next chunk If (AVIChunk.chSize >= ((2 ^ 31) - (LastPos + 1))) Then RaiseEvent ReadError("File too large to parse") Exit Do End If If (AVIChunk.chName <> ListChunk) Then ' Offset to next chunk LastPos = LastPos + AVIChunk.chSize + Len(AVIChunk) If (InfoLeft) Then InfoLeft = InfoLeft - (AVIChunk.chSize + Len(AVIChunk)) If (InfoLeft < 1) Then InfoLeft = 0 End If Seek #FNum, LastPos End If Loop Until LastPos >= FileSize If (m_MovieOffset) Then With AVIInfo ' Set information about the AVI file to the class properties m_Width = .dwWidth m_Height = .dwHeight m_FrameRate = OneMillion \ .dwMicroSecPerFrame m_PlayLength = CLng((.dwMicroSecPerFrame / OneMillion) * .dwTotalFrames) m_NumFrames = .dwTotalFrames m_NumStreams = .dwStreams End With m_BitDepth = AVIBMI.bmiHeader.biBitCount m_FileName = inFile m_FileSize = FileSize With AVIWave.wf m_Channels = .nChannels m_SamplesPerSec = .nSamplesPerSec m_BytePerSec = .nAvgBytesPerSec End With Else ' Clear anything that was set during the parse Call ClearInfo End If ReadFile = m_MovieOffset End If Close #FNum Else RaiseEvent ReadError("File not found or contains no data!") End If End Function Public Function CodecToName(ByRef inCodec As String) As String Dim LoopCodec As Long If (Len(inCodec) <> 4) Then Exit Function If (NumCodec = 0) Then Call MakeCodecList For LoopCodec = 0 To NumCodec - 1 If (StrComp(inCodec, CodecList(LoopCodec).FourCC, vbTextCompare) = 0) Then CodecToName = CodecList(LoopCodec).Description Exit For End If Next LoopCodec If (CodecToName = "") Then CodecToName = "Unknown" End Function Public Function FormatTime(ByVal inTime As Long) As String Dim TimeLeft As Long, ThisTime As Long Const OneMinute As Long = 60 Const OneHour As Long = OneMinute ^ 2 Const OneDay As Long = OneHour * 24 TimeLeft = inTime If (TimeLeft >= OneDay) Then ThisTime = inTime \ OneDay FormatTime = CStr(ThisTime) & ":" TimeLeft = inTime Mod OneDay End If If (TimeLeft >= OneHour) Then ThisTime = TimeLeft \ OneHour FormatTime = FormatTime & (IIf(FormatTime <> "", Format(ThisTime, "00"), ThisTime)) & ":" TimeLeft = TimeLeft Mod OneHour End If FormatTime = FormatTime & (Format(TimeLeft \ OneMinute, "00") & ":" & Format(TimeLeft Mod OneMinute, "00")) End Function Public Function LongToFourCC(ByVal inLong As Long) As String Dim TempArr(3) As Byte Call RtlMoveMemory(ByVal VarPtr(TempArr(0)), ByVal VarPtr(inLong), 4) LongToFourCC = StrConv(TempArr(), vbUnicode) End Function Public Function FourCCToLong(ByVal inString As String) As Long Dim TempArr() As Byte If (Len(inString) = 4) Then ReDim TempArr(3) As Byte TempArr() = StrConv(inString, vbFromUnicode) Call RtlMoveMemory(ByVal VarPtr(FourCCToLong), ByVal VarPtr(TempArr(0)), 4) End If End Function Public Function GetInfoList(ByRef outArr() As Long) As Long Dim LoopInfos As Long If (NumInfos) Then ReDim outArr(NumInfos - 1) As Long For LoopInfos = 0 To NumInfos - 1 outArr(LoopInfos) = InfoEntryList(LoopInfos).ieTag Next LoopInfos End If GetInfoList = NumInfos End Function Public Function QueryInfo(ByVal inInfo As Long) As String Dim LoopInfos As Long Dim ConvTag As Long If (Len(inInfo) <> 4) Then Exit Function ' All info tags are 4 characters If (NumInfos) Then For LoopInfos = 0 To NumInfos - 1 If (inInfo = InfoEntryList(LoopInfos).ieTag) Then QueryInfo = InfoEntryList(LoopInfos).ieData Exit For End If Next LoopInfos End If End Function Public Function GetInfoName(ByVal inInfo As Long) As String Dim InfoChar As String If (Len(inInfo) <> 4) Then Exit Function InfoChar = LongToFourCC(inInfo) Select Case InfoChar Case InfoList: GetInfoName = "Info list" Case InfoArch: GetInfoName = "Archival location" Case InfoArti: GetInfoName = "Artist" Case InfoComi: GetInfoName = "Commissioned" Case InfoComm: GetInfoName = "Comments" Case InfoCopy: GetInfoName = "Copyright" Case InfoCrea: GetInfoName = "Creation date" Case InfoCrop: GetInfoName = "Cropped" Case InfoDimn: GetInfoName = "Dimensions" Case InfoDots: GetInfoName = "Dots per inch" Case InfoEngi: GetInfoName = "Engineer" Case InfoGenr: GetInfoName = "Genre" Case InfoIDTh: GetInfoName = "ID3 tag" Case InfoKeyw: GetInfoName = "Keywords" Case InfoLigt: GetInfoName = "Lightness" Case InfoLyrc: GetInfoName = "Lyrics" Case InfoMedi: GetInfoName = "Medium" Case InfoMPTh: GetInfoName = "MP3" Case InfoName: GetInfoName = "Name/Title" Case InfoPalt: GetInfoName = "Palette setting" Case InfoProd: GetInfoName = "Product" Case InfoSubj: GetInfoName = "Subject" Case InfoSoft: GetInfoName = "Software" Case InfoShrp: GetInfoName = "Sharpness" Case InfoSrce: GetInfoName = "Source" Case InfoSrcF: GetInfoName = "Source form" Case InfoTech: GetInfoName = "Technician" Case InfoDisp: GetInfoName = "Sound Scheme title" Case Else ' Unknown info tag.. If (UCase(Left(inInfo, 1)) = "I") Then _ GetInfoName = Right(inInfo, 3) _ Else GetInfoName = inInfo End Select End Function Private Function ClearInfo() m_Width = 0 ' Clear any current (Public) information m_Height = 0 m_FrameRate = 0 m_PlayLength = 0 m_NumFrames = 0 m_NumStreams = 0 m_HasVideo = False m_HasAudio = False m_VideoCodec = "" m_AudioCodec = "" m_BitDepth = 0 m_Channels = 0 m_SamplesPerSec = 0 m_AudioFormat = "" m_FileName = "" m_FileSize = 0 m_BytePerSec = 0 m_IndexOffset = 0 m_MovieOffset = 0 m_PadBytes = 0 NumInfos = 0 ReDim InfoEntryList(0) As typInfoEntry End Function Private Function TrimNull(ByVal inString As String) As String Dim NullPos As Long NullPos = InStr(1, inString, vbNullChar) If (NullPos) Then _ TrimNull = Left(inString, NullPos - 1) _ Else TrimNull = inString End Function Private Function AudioCodecFromFormat(ByVal inFormat As Integer) As String Dim UnsignedFormat As Long Call RtlMoveMemory(ByVal VarPtr(UnsignedFormat), ByVal VarPtr(inFormat), 2) Select Case UnsignedFormat ' /* WAVE form wFormatTag IDs */ -- Converted from "mmreg.h" version 1.58 on 10/07/2002 Case &H0: AudioCodecFromFormat = "Unknown Microsoft format" ' WAVE_FORMAT_UNKNOWN Case &H1: AudioCodecFromFormat = "Microsoft PCM" ' WAVE_FORMAT_PCM Case &H2: AudioCodecFromFormat = "Microsoft ADPCM" ' WAVE_FORMAT_ADPCM Case &H3: AudioCodecFromFormat = "Microsoft IEEE float" ' WAVE_FORMAT_IEEE_FLOAT Case &H4: AudioCodecFromFormat = "Compaq Computer Corp." ' WAVE_FORMAT_VSELP Case &H5: AudioCodecFromFormat = "IBM Corporation" ' WAVE_FORMAT_IBM_CVSD Case &H6: AudioCodecFromFormat = "CCITT A-Law" ' WAVE_FORMAT_ALAW Case &H7: AudioCodecFromFormat = "CCITT u-Law" ' WAVE_FORMAT_MULAW Case &H8: AudioCodecFromFormat = "Microsoft DTS" ' WAVE_FORMAT_DTS Case &H9: AudioCodecFromFormat = "Microsoft DRM" ' WAVE_FORMAT_DRM Case &H10: AudioCodecFromFormat = "OKI ADPCM" ' WAVE_FORMAT_OKI_ADPCM Case &H11: AudioCodecFromFormat = "Intel ADPCM" ' WAVE_FORMAT_DVI_ADPCM Case &H12: AudioCodecFromFormat = "Videologic ADPCM" ' WAVE_FORMAT_MEDIASPACE_ADPCM Case &H13: AudioCodecFromFormat = "Sierra ADPCM" ' WAVE_FORMAT_SIERRA_ADPCM Case &H14: AudioCodecFromFormat = "Antex ADPCM" ' WAVE_FORMAT_G723_ADPCM Case &H15: AudioCodecFromFormat = "DSP Solutions DigiSTD." ' WAVE_FORMAT_DIGISTD Case &H16: AudioCodecFromFormat = "DSP Solutions DigiFIX." ' WAVE_FORMAT_DIGIFIX Case &H17: AudioCodecFromFormat = "Dialogic OKI ADPCM" ' WAVE_FORMAT_DIALOGIC_OKI_ADPCM Case &H18: AudioCodecFromFormat = "Media Vision ADPCM" ' WAVE_FORMAT_MEDIAVISION_ADPCM Case &H19: AudioCodecFromFormat = "Hewlett-Packard CU codec" ' WAVE_FORMAT_CU_CODEC Case &H20: AudioCodecFromFormat = "Yamaha ADPCM" ' WAVE_FORMAT_YAMAHA_ADPCM Case &H21: AudioCodecFromFormat = "Speech Compression SONARC" ' WAVE_FORMAT_SONARC Case &H22: AudioCodecFromFormat = "DSP Group TrueSpeech" ' WAVE_FORMAT_DSPGROUP_TRUESPEECH Case &H23: AudioCodecFromFormat = "Echo Speech" ' WAVE_FORMAT_ECHOSC1 Case &H24: AudioCodecFromFormat = "Virtual Music AF36" ' WAVE_FORMAT_AUDIOFILE_AF36 Case &H25: AudioCodecFromFormat = "Audio Processing APTX" ' WAVE_FORMAT_APTX Case &H26: AudioCodecFromFormat = "Virtual Music AF10" ' WAVE_FORMAT_AUDIOFILE_AF10 Case &H27: AudioCodecFromFormat = "Aculab ProSody 1612" ' WAVE_FORMAT_PROSODY_1612 Case &H28: AudioCodecFromFormat = "Merging Technologies LRC" ' WAVE_FORMAT_LRC Case &H30: AudioCodecFromFormat = "Dolby AC2" ' WAVE_FORMAT_DOLBY_AC2 Case &H31: AudioCodecFromFormat = "Microsoft GSM 6.10" ' WAVE_FORMAT_GSM610 Case &H32: AudioCodecFromFormat = "Microsoft MSN audio" ' WAVE_FORMAT_MSNAUDIO Case &H33: AudioCodecFromFormat = "Antex Electronics ADPCME" ' WAVE_FORMAT_ANTEX_ADPCME Case &H34: AudioCodecFromFormat = "Control Resources VQLPC" ' WAVE_FORMAT_CONTROL_RES_VQLPC Case &H35: AudioCodecFromFormat = "DSP Solutions DigiReal" ' WAVE_FORMAT_DIGIREAL Case &H36: AudioCodecFromFormat = "DSP Solutions DigiADPCM" ' WAVE_FORMAT_DIGIADPCM Case &H37: AudioCodecFromFormat = "Control Resources CR10" ' WAVE_FORMAT_CONTROL_RES_CR10 Case &H38: AudioCodecFromFormat = "Natural MicroSystems VBX ADPCM" ' WAVE_FORMAT_NMS_VBXADPCM Case &H39: AudioCodecFromFormat = "Crystal Semiconductor IMA ADPCM" ' WAVE_FORMAT_CS_IMAADPCM Case &H3A: AudioCodecFromFormat = "Echo Speech SC3" ' WAVE_FORMAT_ECHOSC3 Case &H3B: AudioCodecFromFormat = "Rockwell International ADPCM" ' WAVE_FORMAT_ROCKWELL_ADPCM Case &H3C: AudioCodecFromFormat = "Rockwell International DigiTalk" ' WAVE_FORMAT_ROCKWELL_DIGITALK Case &H3D: AudioCodecFromFormat = "Xebec Multimedia Solutions XEBEC" ' WAVE_FORMAT_XEBEC Case &H40: AudioCodecFromFormat = "Antex Electronics G721 ADPCM" ' WAVE_FORMAT_G721_ADPCM Case &H41: AudioCodecFromFormat = "Antex Electronics G728 CELP" ' WAVE_FORMAT_G728_CELP Case &H42: AudioCodecFromFormat = "Microsoft G.723.1" ' WAVE_FORMAT_MSG723 Case &H50: AudioCodecFromFormat = "Microsoft MPEG" ' WAVE_FORMAT_MPEG Case &H52: AudioCodecFromFormat = "InSoft RT24." ' WAVE_FORMAT_RT24 Case &H53: AudioCodecFromFormat = "InSoft PAC" ' WAVE_FORMAT_PAC Case &H55: AudioCodecFromFormat = "MPEG Layer-3" ' WAVE_FORMAT_MPEGLAYER3 Case &H59: AudioCodecFromFormat = "Lucent Technologies G723" ' WAVE_FORMAT_LUCENT_G723 Case &H60: AudioCodecFromFormat = "Cirrus Logic" ' WAVE_FORMAT_CIRRUS Case &H61: AudioCodecFromFormat = "ESS Technology ESPCM" ' WAVE_FORMAT_ESPCM Case &H62: AudioCodecFromFormat = "Voxware v1.1.6/1.1.8 File-Mode" ' WAVE_FORMAT_VOXWARE Case &H63: AudioCodecFromFormat = "Canopus ATRAC" ' WAVE_FORMAT_CANOPUS_ATRAC Case &H64: AudioCodecFromFormat = "APICOM G726 ADPCM" ' WAVE_FORMAT_G726_ADPCM Case &H65: AudioCodecFromFormat = "APICOM G722 ADPCM" ' WAVE_FORMAT_G722_ADPCM Case &H67: AudioCodecFromFormat = "Microsoft DSat display" ' WAVE_FORMAT_DSAT_DISPLAY Case &H69: AudioCodecFromFormat = "Voxware Byte-aligned" ' WAVE_FORMAT_VOXWARE_BYTE_ALIGNED Case &H70: AudioCodecFromFormat = "Lernout & Hauspie CELP 4.8kbit/s" ' WAVE_FORMAT_VOXWARE_AC8 Case &H71: AudioCodecFromFormat = "Lernout & Hauspie SBC 8kbit/s" ' WAVE_FORMAT_VOXWARE_AC10 Case &H72: AudioCodecFromFormat = "Lernout & Hauspie SBC 12kbit/s" ' WAVE_FORMAT_VOXWARE_AC16 Case &H73: AudioCodecFromFormat = "Lernout & Hauspie SBC 16kbit/s" ' WAVE_FORMAT_VOXWARE_AC20 Case &H74: AudioCodecFromFormat = "Voxware MetaVoice" ' WAVE_FORMAT_VOXWARE_RT24 Case &H75: AudioCodecFromFormat = "Voxware MetaSound" ' WAVE_FORMAT_VOXWARE_RT29 Case &H76: AudioCodecFromFormat = "Voxware RT29HW" ' WAVE_FORMAT_VOXWARE_RT29HW Case &H77: AudioCodecFromFormat = "Voxware VR12" ' WAVE_FORMAT_VOXWARE_VR12 Case &H78: AudioCodecFromFormat = "Voxware VR18" ' WAVE_FORMAT_VOXWARE_VR18 Case &H79: AudioCodecFromFormat = "Voxware TQ40" ' WAVE_FORMAT_VOXWARE_TQ40 Case &H80: AudioCodecFromFormat = "Softsound" ' WAVE_FORMAT_SOFTSOUND Case &H81: AudioCodecFromFormat = "Voxware TQ60" ' WAVE_FORMAT_VOXWARE_TQ60 Case &H82: AudioCodecFromFormat = "Microsoft MSRT24" ' WAVE_FORMAT_MSRT24 Case &H83: AudioCodecFromFormat = "AT&T Labs G729A" ' WAVE_FORMAT_G729A Case &H84: AudioCodecFromFormat = "Motion Pixels MVI2" ' WAVE_FORMAT_MVI_MVI2 Case &H85: AudioCodecFromFormat = "DataFusion Systems G726" ' WAVE_FORMAT_DF_G726 Case &H86: AudioCodecFromFormat = "DataFusion Systems GSM610" ' WAVE_FORMAT_DF_GSM610 Case &H88: AudioCodecFromFormat = "Iterated Systems ISIAudio" ' WAVE_FORMAT_ISIAUDIO Case &H89: AudioCodecFromFormat = "OnLive! OnLive" ' WAVE_FORMAT_ONLIVE Case &H91: AudioCodecFromFormat = "Siemens Business Communications 24" ' WAVE_FORMAT_SBC24 Case &H92: AudioCodecFromFormat = "Sonic Foundry Dolby AC3 SPDIF" ' WAVE_FORMAT_DOLBY_AC3_SPDIF Case &H93: AudioCodecFromFormat = "MediaSonic G723" ' WAVE_FORMAT_MEDIASONIC_G723 Case &H94: AudioCodecFromFormat = "Aculab ProSody 8 Kbps" ' WAVE_FORMAT_PROSODY_8KBPS Case &H97: AudioCodecFromFormat = "ZyXEL Communications ZYXEL ADPCM" ' WAVE_FORMAT_ZYXEL_ADPCM Case &H98: AudioCodecFromFormat = "Philips Speech Processing LPCBB" ' WAVE_FORMAT_PHILIPS_LPCBB Case &H99: AudioCodecFromFormat = "Studer Professional Audio AG" ' WAVE_FORMAT_PACKED Case &HA0: AudioCodecFromFormat = "Malden Electronics PhonyTalk" ' WAVE_FORMAT_MALDEN_PHONYTALK Case &H100: AudioCodecFromFormat = "Rhetorex ADPCM" ' WAVE_FORMAT_RHETOREX_ADPCM Case &H101: AudioCodecFromFormat = "BeCubed IRAT" ' WAVE_FORMAT_IRAT Case &H111: AudioCodecFromFormat = "Vivo G723" ' WAVE_FORMAT_VIVO_G723 Case &H112: AudioCodecFromFormat = "Vivo Siren" ' WAVE_FORMAT_VIVO_SIREN Case &H123: AudioCodecFromFormat = "Digital G723" ' WAVE_FORMAT_DIGITAL_G723 Case &H125: AudioCodecFromFormat = "Sanyo LD ADPCM" ' WAVE_FORMAT_SANYO_LD_ADPCM Case &H130: AudioCodecFromFormat = "ACELP.net" ' WAVE_FORMAT_SIPROLAB_ACEPLNET Case &H131: AudioCodecFromFormat = "Sipro Lab Telecom Siprolab ACELP4800" ' WAVE_FORMAT_SIPROLAB_ACELP4800 Case &H132: AudioCodecFromFormat = "Sipro Lab Telecom Siprolab ACELP8V3" ' WAVE_FORMAT_SIPROLAB_ACELP8V3 Case &H133: AudioCodecFromFormat = "Sipro Lab Telecom Siprolab G729" ' WAVE_FORMAT_SIPROLAB_G729 Case &H134: AudioCodecFromFormat = "Sipro Lab Telecom Siprolab G729A" ' WAVE_FORMAT_SIPROLAB_G729A Case &H135: AudioCodecFromFormat = "Sipro Lab Telecom Siprolab KELVIN" ' WAVE_FORMAT_SIPROLAB_KELVIN Case &H140: AudioCodecFromFormat = "Dictaphone G726 ADPCM" ' WAVE_FORMAT_G726ADPCM Case &H150: AudioCodecFromFormat = "Qualcomm PureVoice" ' WAVE_FORMAT_QUALCOMM_PUREVOICE Case &H151: AudioCodecFromFormat = "Qualcomm HalfRate" ' WAVE_FORMAT_QUALCOMM_HALFRATE Case &H155: AudioCodecFromFormat = "Ring Zero TUBGSM" ' WAVE_FORMAT_TUBGSM Case &H160: AudioCodecFromFormat = "Windows Media Audio V1" ' WAVE_FORMAT_MSAUDIO1 Case &H161: AudioCodecFromFormat = "Windows Media Audio V2" Case &H170: AudioCodecFromFormat = "Unisys NAP ADPCM" ' WAVE_FORMAT_UNISYS_NAP_ADPCM Case &H171: AudioCodecFromFormat = "Unisys NAP ULaw" ' WAVE_FORMAT_UNISYS_NAP_ULAW Case &H172: AudioCodecFromFormat = "Unisys NAP ALaw" ' WAVE_FORMAT_UNISYS_NAP_ALAW Case &H173: AudioCodecFromFormat = "Unisys NAP 16K" ' WAVE_FORMAT_UNISYS_NAP_16K Case &H200: AudioCodecFromFormat = "Creative Labs ADPCM" ' WAVE_FORMAT_CREATIVE_ADPCM Case &H202: AudioCodecFromFormat = "Creative Labs FastSpeech 8" ' WAVE_FORMAT_CREATIVE_FASTSPEECH8 Case &H203: AudioCodecFromFormat = "Creative Labs FastSpeech 10" ' WAVE_FORMAT_CREATIVE_FASTSPEECH10 Case &H210: AudioCodecFromFormat = "UHER informatic GmbH ADPCM" ' WAVE_FORMAT_UHER_ADPCM Case &H220: AudioCodecFromFormat = "Quarterdeck" ' WAVE_FORMAT_QUARTERDECK Case &H230: AudioCodecFromFormat = "I-link Worldwide" ' WAVE_FORMAT_ILINK_VC Case &H240: AudioCodecFromFormat = "Aureal Semiconductor" ' WAVE_FORMAT_RAW_SPORT Case &H241: AudioCodecFromFormat = "ESS Technology ESST AC3" ' WAVE_FORMAT_ESST_AC3 Case &H250: AudioCodecFromFormat = "Interactive Products HSX" ' WAVE_FORMAT_IPI_HSX Case &H251: AudioCodecFromFormat = "Interactive Products RPELP" ' WAVE_FORMAT_IPI_RPELP Case &H260: AudioCodecFromFormat = "Consistent Software 2" ' WAVE_FORMAT_CS2 Case &H270: AudioCodecFromFormat = "Sony SCX" ' WAVE_FORMAT_SONY_SCX Case &H300: AudioCodecFromFormat = "Fujitsu FM Towns Snd" ' WAVE_FORMAT_FM_TOWNS_SND Case &H400: AudioCodecFromFormat = "Brooktree BTV Digital" ' WAVE_FORMAT_BTV_DIGITAL Case &H401: AudioCodecFromFormat = "IMC" Case &H402: AudioCodecFromFormat = "IAC2" Case &H450: AudioCodecFromFormat = "QDesign Music" ' WAVE_FORMAT_QDESIGN_MUSIC Case &H680: AudioCodecFromFormat = "AT&T Labs VME VMPCM" ' WAVE_FORMAT_VME_VMPCM Case &H681: AudioCodecFromFormat = "AT&T Labs TPC" ' WAVE_FORMAT_TPC Case &H1000: AudioCodecFromFormat = "Ing C. Olivetti & C., S.p.A. GSM" ' WAVE_FORMAT_OLIGSM Case &H1001: AudioCodecFromFormat = "Ing C. Olivetti & C., S.p.A. ADPCM" ' WAVE_FORMAT_OLIADPCM Case &H1002: AudioCodecFromFormat = "Ing C. Olivetti & C., S.p.A. CELP" ' WAVE_FORMAT_OLICELP Case &H1003: AudioCodecFromFormat = "Ing C. Olivetti & C., S.p.A. SBC" ' WAVE_FORMAT_OLISBC Case &H1004: AudioCodecFromFormat = "Ing C. Olivetti & C., S.p.A. OPR" ' WAVE_FORMAT_OLIOPR Case &H1100: AudioCodecFromFormat = "Lernout & Hauspie" ' WAVE_FORMAT_LH_CODEC Case &H1400: AudioCodecFromFormat = "Norris Communications" ' WAVE_FORMAT_NORRIS Case &H1500: AudioCodecFromFormat = "AT&T Labs SoundSpace MusicCompress" ' WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS Case &H2000: AudioCodecFromFormat = "Fast Multimedia AG DVM (AC3)" ' WAVE_FORMAT_DVM Case &HFFFE: AudioCodecFromFormat = "Microsoft extensible" ' WAVE_FORMAT_EXTENSIBLE Case &HFFFF: AudioCodecFromFormat = "Development stage codec" ' WAVE_FORMAT_DEVELOPMENT Case Else: AudioCodecFromFormat = "Unknown audio format" End Select End Function ' Private methods Private Function MakeCodecList() NumCodec = 0 ' Interpreted in part from "http://www.webartz.com/fourcc/" on 26/06/2002 Call AddCodec(CodecList(), NumCodec, String(4, vbNullChar), "Uncompressed") Call AddCodec(CodecList(), NumCodec, "DIB ") Call AddCodec(CodecList(), NumCodec, "RGB ") Call AddCodec(CodecList(), NumCodec, "RAW ") Call AddCodec(CodecList(), NumCodec, "3IV1", "3IVX MPEG4-based") Call AddCodec(CodecList(), NumCodec, "3IV2") Call AddCodec(CodecList(), NumCodec, "AASC", "Autodesk Animator") Call AddCodec(CodecList(), NumCodec, "AFLI") Call AddCodec(CodecList(), NumCodec, "AFLC") Call AddCodec(CodecList(), NumCodec, "ABYR", "Kensington") Call AddCodec(CodecList(), NumCodec, "AEMI", "Array VideoONE MPEG1-I Capture") Call AddCodec(CodecList(), NumCodec, "AMPG", "Array VideoONE MPEG") Call AddCodec(CodecList(), NumCodec, "ANIM", "RDX") Call AddCodec(CodecList(), NumCodec, "AP41", "AngelPotion Definitive") Call AddCodec(CodecList(), NumCodec, "ASV1", "Asus Video") Call AddCodec(CodecList(), NumCodec, "ASV2") Call AddCodec(CodecList(), NumCodec, "ASVX", "Asus Video 2.0") Call AddCodec(CodecList(), NumCodec, "AUR2", "Aura 2 Codec - YUV 422") Call AddCodec(CodecList(), NumCodec, "AURA", "Aura 1 Codec - YUV 411") Call AddCodec(CodecList(), NumCodec, "BINK", "Bink Video") Call AddCodec(CodecList(), NumCodec, "BT20", "Prosumer Video") Call AddCodec(CodecList(), NumCodec, "BTCV", "Composite Video") Call AddCodec(CodecList(), NumCodec, "BW10", "Broadway MPEG Capture/Compression") Call AddCodec(CodecList(), NumCodec, "CC12", "YUV12 Codec") Call AddCodec(CodecList(), NumCodec, "CDVC", "Canopus DV") Call AddCodec(CodecList(), NumCodec, "CFCC", "DPS Perception") Call AddCodec(CodecList(), NumCodec, "CGDI", "Microsoft Office Camcorder Video") Call AddCodec(CodecList(), NumCodec, "CHAM", "Caviara Champagne") Call AddCodec(CodecList(), NumCodec, "CJPG", "WebCam JPEG") Call AddCodec(CodecList(), NumCodec, "CPLA", "Weitek YUV 4:2:0") Call AddCodec(CodecList(), NumCodec, "CRAM", "Microsoft Video 1") Call AddCodec(CodecList(), NumCodec, "MSVC") Call AddCodec(CodecList(), NumCodec, "WHAM") Call AddCodec(CodecList(), NumCodec, "CVID", "Cinepak codec by Radius") Call AddCodec(CodecList(), NumCodec, "CWLT", "Microsoft reserved") Call AddCodec(CodecList(), NumCodec, "GWLT") Call AddCodec(CodecList(), NumCodec, "CYUV", "Creative Labs YUV") Call AddCodec(CodecList(), NumCodec, "CYUY", "ATI Technologies YUV") Call AddCodec(CodecList(), NumCodec, "DIV2", "Microsoft MPEG4 v2") Call AddCodec(CodecList(), NumCodec, "DIV3", "DivX ;-) MPEG-4 Low-Motion") Call AddCodec(CodecList(), NumCodec, "DIV4", "DivX ;-) MPEG-4 Fast-Motion") Call AddCodec(CodecList(), NumCodec, "DIV5", "DivX 5") Call AddCodec(CodecList(), NumCodec, "DIVX", "DivX Codec 4.11") Call AddCodec(CodecList(), NumCodec, "DMB1", "Matrox Rainbow Runner hardware compression") Call AddCodec(CodecList(), NumCodec, "DMB2", "MJPEG codec used by Paradigm.") Call AddCodec(CodecList(), NumCodec, "DSVD", "Pinacle systems DV") Call AddCodec(CodecList(), NumCodec, "DVSD") Call AddCodec(CodecList(), NumCodec, "DUCK", "Duck Corporation TrueMotion S") Call AddCodec(CodecList(), NumCodec, "DVE2", "DVE-2 Videoconferencing") Call AddCodec(CodecList(), NumCodec, "DVX1", "Lucent DVX1000SP Video Decoder") Call AddCodec(CodecList(), NumCodec, "DVX2") Call AddCodec(CodecList(), NumCodec, "DVX3") Call AddCodec(CodecList(), NumCodec, "DXT1", "Microsoft DirectX Compressed Texture") Call AddCodec(CodecList(), NumCodec, "DXT2") Call AddCodec(CodecList(), NumCodec, "DXT3") Call AddCodec(CodecList(), NumCodec, "DXT4") Call AddCodec(CodecList(), NumCodec, "DXT5") Call AddCodec(CodecList(), NumCodec, "DXTC") Call AddCodec(CodecList(), NumCodec, "ELK0", "Elsa (YUV?)") Call AddCodec(CodecList(), NumCodec, "ESCP", "Eidos Technologies Escape") Call AddCodec(CodecList(), NumCodec, "ETV1", "eTreppid Video") Call AddCodec(CodecList(), NumCodec, "ETV2") Call AddCodec(CodecList(), NumCodec, "ETVC") Call AddCodec(CodecList(), NumCodec, "FLJP", "D-Vision Field Encoded Motion JPEG") Call AddCodec(CodecList(), NumCodec, "FRWA", "SoftLab-Nsk Forward Motion JPEG with alpha channel") Call AddCodec(CodecList(), NumCodec, "FRWD", "SoftLab-Nsk Forward Motion JPEG") Call AddCodec(CodecList(), NumCodec, "GLZW", "Motion LZW") Call AddCodec(CodecList(), NumCodec, "GPEG", "Motion JPEG") Call AddCodec(CodecList(), NumCodec, "H260", "Intel ITU H.26n") Call AddCodec(CodecList(), NumCodec, "H261", "Intel ITU H.261n") Call AddCodec(CodecList(), NumCodec, "H262", "Intel ITU H.262n") Call AddCodec(CodecList(), NumCodec, "H263", "Intel ITU H.263n") Call AddCodec(CodecList(), NumCodec, "H264", "Intel ITU H.264n") Call AddCodec(CodecList(), NumCodec, "H265", "Intel ITU H.265n") Call AddCodec(CodecList(), NumCodec, "H266", "Intel ITU H.266n") Call AddCodec(CodecList(), NumCodec, "H267", "Intel ITU H.267n") Call AddCodec(CodecList(), NumCodec, "H268", "Intel ITU H.268n") Call AddCodec(CodecList(), NumCodec, "H269", "Intel ITU H.269n") Call AddCodec(CodecList(), NumCodec, "HFYU", "Huffman Lossless") Call AddCodec(CodecList(), NumCodec, "HMCR", "Rendition Motion Compensation Format") Call AddCodec(CodecList(), NumCodec, "HMRR") Call AddCodec(CodecList(), NumCodec, "i263", "Intel I.263 Video Driver 2.55.014") Call AddCodec(CodecList(), NumCodec, "i420", "Intel 4:2:0 Video V2.55.014") Call AddCodec(CodecList(), NumCodec, "IAN ", "Indeo 4") Call AddCodec(CodecList(), NumCodec, "ICLB", "CellB Videoconferencing") Call AddCodec(CodecList(), NumCodec, "IGOR", "Power DVD") Call AddCodec(CodecList(), NumCodec, "IJPG", "Intergraph JPEG") Call AddCodec(CodecList(), NumCodec, "ILVC", "Intel Layered Video") Call AddCodec(CodecList(), NumCodec, "ILVR", "ITU H.263+") Call AddCodec(CodecList(), NumCodec, "IPDV", "Giga AVI DV") Call AddCodec(CodecList(), NumCodec, "IR21", "Intel Indeo 2.1") Call AddCodec(CodecList(), NumCodec, "IV30", "Ligos Indeo 3.0") Call AddCodec(CodecList(), NumCodec, "IV31", "Ligos Indeo 3.1") Call AddCodec(CodecList(), NumCodec, "IV32", "Ligos Indeo 3.2") Call AddCodec(CodecList(), NumCodec, "IV33", "Ligos Indeo 3.3") Call AddCodec(CodecList(), NumCodec, "IV34", "Ligos Indeo 3.4") Call AddCodec(CodecList(), NumCodec, "IV35", "Ligos Indeo 3.5") Call AddCodec(CodecList(), NumCodec, "IV36", "Ligos Indeo 3.6") Call AddCodec(CodecList(), NumCodec, "IV37", "Ligos Indeo 3.7") Call AddCodec(CodecList(), NumCodec, "IV38", "Ligos Indeo 3.8") Call AddCodec(CodecList(), NumCodec, "IV39", "Ligos Indeo 3.9") Call AddCodec(CodecList(), NumCodec, "IV40", "Indeo video 4.0") Call AddCodec(CodecList(), NumCodec, "IV41", "Indeo video 4.1") Call AddCodec(CodecList(), NumCodec, "IV42", "Indeo video 4.2") Call AddCodec(CodecList(), NumCodec, "IV43", "Indeo video 4.3") Call AddCodec(CodecList(), NumCodec, "IV44", "Indeo video 4.4") Call AddCodec(CodecList(), NumCodec, "IV45", "Indeo video 4.5") Call AddCodec(CodecList(), NumCodec, "IV46", "Indeo video 4.6") Call AddCodec(CodecList(), NumCodec, "IV47", "Indeo video 4.7") Call AddCodec(CodecList(), NumCodec, "IV48", "Indeo video 4.8") Call AddCodec(CodecList(), NumCodec, "IV49", "Indeo video 4.9") Call AddCodec(CodecList(), NumCodec, "IV50", "Indeo video 5.10") Call AddCodec(CodecList(), NumCodec, "JPGL", "JPEG Light") Call AddCodec(CodecList(), NumCodec, "KMVC", "Karl Morton's Video (presumably)") Call AddCodec(CodecList(), NumCodec, "LEAD", "LEAD Video") Call AddCodec(CodecList(), NumCodec, "Ljpg", "LEAD MJPEG") Call AddCodec(CodecList(), NumCodec, "M263", "Microsoft H.263") Call AddCodec(CodecList(), NumCodec, "M261", "Microsoft H.261") Call AddCodec(CodecList(), NumCodec, "MC12", "ATI Motion Compensation Format") Call AddCodec(CodecList(), NumCodec, "MCAM", "ATI Motion Compensation Format") Call AddCodec(CodecList(), NumCodec, "mJPG", "IBM Motion JPEG including Huffman Tables") Call AddCodec(CodecList(), NumCodec, "MJPG", "Motion JPEG") Call AddCodec(CodecList(), NumCodec, "MP42", "Microsoft MPEG-4 V2") Call AddCodec(CodecList(), NumCodec, "MP43", "Microsoft MPEG-4 V3") Call AddCodec(CodecList(), NumCodec, "MP4S", "Microsoft MPEG-4") Call AddCodec(CodecList(), NumCodec, "MPEG", "MPEG video") Call AddCodec(CodecList(), NumCodec, "MPG4", "Microsoft MPEG") Call AddCodec(CodecList(), NumCodec, "MPGI", "Sigma Designs MPEG") Call AddCodec(CodecList(), NumCodec, "MRCA", "Mrcodec") Call AddCodec(CodecList(), NumCodec, "MRLE", "Microsoft RLE") Call AddCodec(CodecList(), NumCodec, "RLE ") Call AddCodec(CodecList(), NumCodec, "MTX1", "Matrox") Call AddCodec(CodecList(), NumCodec, "MTX2") Call AddCodec(CodecList(), NumCodec, "MTX3") Call AddCodec(CodecList(), NumCodec, "MTX4") Call AddCodec(CodecList(), NumCodec, "MTX5") Call AddCodec(CodecList(), NumCodec, "MTX6") Call AddCodec(CodecList(), NumCodec, "MTX7") Call AddCodec(CodecList(), NumCodec, "MTX8") Call AddCodec(CodecList(), NumCodec, "MTX9") Call AddCodec(CodecList(), NumCodec, "MWV1", "Aware Motion Wavelets") Call AddCodec(CodecList(), NumCodec, "nAVI", "nAVI MPEG-4") Call AddCodec(CodecList(), NumCodec, "NTN1", "Nogatech Video Compression 1") Call AddCodec(CodecList(), NumCodec, "NVS0", "NVidia GEForce 2 GTS Pro texture format") Call AddCodec(CodecList(), NumCodec, "NVS1") Call AddCodec(CodecList(), NumCodec, "NVS2") Call AddCodec(CodecList(), NumCodec, "NVS3") Call AddCodec(CodecList(), NumCodec, "NVS4") Call AddCodec(CodecList(), NumCodec, "NVS5") Call AddCodec(CodecList(), NumCodec, "NVT0") Call AddCodec(CodecList(), NumCodec, "NVT1") Call AddCodec(CodecList(), NumCodec, "NVT2") Call AddCodec(CodecList(), NumCodec, "NVT3") Call AddCodec(CodecList(), NumCodec, "NVT4") Call AddCodec(CodecList(), NumCodec, "NVT5") Call AddCodec(CodecList(), NumCodec, "PDVC", "I-O Data Device Inc. DVC") Call AddCodec(CodecList(), NumCodec, "PGVV", "Radius Video Vision") Call AddCodec(CodecList(), NumCodec, "PIM1", "Pegasus Imaging") Call AddCodec(CodecList(), NumCodec, "PIM2") Call AddCodec(CodecList(), NumCodec, "PIMJ", "Pegasus Imaging Lossless JPEG") Call AddCodec(CodecList(), NumCodec, "PVEZ", "Horizons Technology PowerEZ") Call AddCodec(CodecList(), NumCodec, "PVMM", "PacketVideo Corporation MPEG-4") Call AddCodec(CodecList(), NumCodec, "PVW2", "Pegasus Wavelet Compression") Call AddCodec(CodecList(), NumCodec, "qpeq", "Q-Team QPEG 1.1") Call AddCodec(CodecList(), NumCodec, "QPEG", "Q-Team QPEG") Call AddCodec(CodecList(), NumCodec, "RGBT", "Computer Concepts 32 bit RGB") Call AddCodec(CodecList(), NumCodec, "RT21", "Intel Real Time Video 2.1") Call AddCodec(CodecList(), NumCodec, "rv20", "RealVideo G2") Call AddCodec(CodecList(), NumCodec, "rv30", "RealVideo 8") Call AddCodec(CodecList(), NumCodec, "RVX ", "Intel RDX") Call AddCodec(CodecList(), NumCodec, "s422", "Tekram VideoCap C210 YUV") Call AddCodec(CodecList(), NumCodec, "SDCC", "Sun Digital Camera") Call AddCodec(CodecList(), NumCodec, "SFMC", "CrystalNet Surface Fitting Method") Call AddCodec(CodecList(), NumCodec, "SMSC", "Radius Proprietary") Call AddCodec(CodecList(), NumCodec, "SMSD") Call AddCodec(CodecList(), NumCodec, "smsv", "WorldConnect Wavelet Video") Call AddCodec(CodecList(), NumCodec, "SPIG", "Radius Spigot") Call AddCodec(CodecList(), NumCodec, "SQZ2", "Microsoft VXTreme Video V2") Call AddCodec(CodecList(), NumCodec, "SV10", "Sorenson Video R1") Call AddCodec(CodecList(), NumCodec, "STVA", "ST Microelectronics CMOS Imager Data (Bayer)") Call AddCodec(CodecList(), NumCodec, "STVB", "ST Microelectronics CMOS Imager Data (Nudged Bayer)") Call AddCodec(CodecList(), NumCodec, "STVC", "ST Microelectronics CMOS Imager Data (Bunched)") Call AddCodec(CodecList(), NumCodec, "STVX", "ST Microelectronics CMOS Imager Data (Extended CODEC Data Format)") Call AddCodec(CodecList(), NumCodec, "STVY", "ST Microelectronics CMOS Imager Data (Extended CODEC Data Format with Correction Data)") Call AddCodec(CodecList(), NumCodec, "SVQ1", "Sorenson Video") Call AddCodec(CodecList(), NumCodec, "TLMS", "TeraLogic Motion Intraframe") Call AddCodec(CodecList(), NumCodec, "TLST") Call AddCodec(CodecList(), NumCodec, "TMIC") Call AddCodec(CodecList(), NumCodec, "TM20", "Duck Corporation TrueMotion 2.0") Call AddCodec(CodecList(), NumCodec, "TM2X", "Duck Corporation TrueMotion 2X") Call AddCodec(CodecList(), NumCodec, "TMOT", "Horizons Technology TrueMotion S") Call AddCodec(CodecList(), NumCodec, "TR20", "Duck Corporation TrueMotion RT 2.0") Call AddCodec(CodecList(), NumCodec, "TSCC", "TechSmith Screen Capture") Call AddCodec(CodecList(), NumCodec, "TV10", "Tecomac Low-Bit Rate") Call AddCodec(CodecList(), NumCodec, "TVJP", "Pinnacle/Truevision") Call AddCodec(CodecList(), NumCodec, "TVMJ") Call AddCodec(CodecList(), NumCodec, "TY2C", "Trident Decompression Driver") Call AddCodec(CodecList(), NumCodec, "TY2N", "Trident Microsystems") Call AddCodec(CodecList(), NumCodec, "TY0N") Call AddCodec(CodecList(), NumCodec, "UCOD", "eMajix ClearVideo") Call AddCodec(CodecList(), NumCodec, "ULTI", "IBM Ultimotion") Call AddCodec(CodecList(), NumCodec, "V261", "Lucent VX2000S") Call AddCodec(CodecList(), NumCodec, "VCR1", "ATI Video Codec 1") Call AddCodec(CodecList(), NumCodec, "VCR2", "ATI Video Codec 2") Call AddCodec(CodecList(), NumCodec, "VDOM", "VDOWave") Call AddCodec(CodecList(), NumCodec, "VDOW", "VDOLive") Call AddCodec(CodecList(), NumCodec, "VDTZ", "Darim Vision Co. VideoTizer YUV") Call AddCodec(CodecList(), NumCodec, "VGPX", "Alaris VGPixel") Call AddCodec(CodecList(), NumCodec, "VIDS", "Vitec Multimedia YUV 4:2:2 CCIR 601 for V422") Call AddCodec(CodecList(), NumCodec, "VIVO", "Vivo H.263 v2") Call AddCodec(CodecList(), NumCodec, "VIXL", "Miro Video XL") Call AddCodec(CodecList(), NumCodec, "VLV1", "VideoLogic Captivator") Call AddCodec(CodecList(), NumCodec, "VP30", "On2 VP3") Call AddCodec(CodecList(), NumCodec, "VP31") Call AddCodec(CodecList(), NumCodec, "VX1K", "Lucent VX1000S Video") Call AddCodec(CodecList(), NumCodec, "VX2K", "Lucent VX2000S Video") Call AddCodec(CodecList(), NumCodec, "VXSP", "Lucent VX1000SP Video") Call AddCodec(CodecList(), NumCodec, "VYU9", "ATI YUV") Call AddCodec(CodecList(), NumCodec, "VYUY") Call AddCodec(CodecList(), NumCodec, "WBVC", "W9960 Winbond Electronics") Call AddCodec(CodecList(), NumCodec, "WINX", "Winnov Software Compression") Call AddCodec(CodecList(), NumCodec, "WJPG", "Winbond JPEG") Call AddCodec(CodecList(), NumCodec, "WNV1", "Winnov Hardware Compression") Call AddCodec(CodecList(), NumCodec, "x263", "Xirlink H.263") Call AddCodec(CodecList(), NumCodec, "XLV0", "NetXL Inc. XL Video Decoder") Call AddCodec(CodecList(), NumCodec, "XMPG", "XING MPEG Editable (I frame only) MPEG") Call AddCodec(CodecList(), NumCodec, "Y41P", "Conexant Brooktree YUV 4:1:1") Call AddCodec(CodecList(), NumCodec, "Y8 ", "Grayscale video") Call AddCodec(CodecList(), NumCodec, "YC12", "Intel YUV 12") Call AddCodec(CodecList(), NumCodec, "YUV8", "Winnov Caviar YUV8") Call AddCodec(CodecList(), NumCodec, "YUY2", "Microsoft RAW YUV 4:2:2") Call AddCodec(CodecList(), NumCodec, "YUYV", "Canopus Compressed YUV format") Call AddCodec(CodecList(), NumCodec, "ZLIB", "ZLib lossless compresion") Call AddCodec(CodecList(), NumCodec, "ZPEG", "Metheus Video Zipper") Call AddCodec(CodecList(), NumCodec, "XVID", "XviD open source MPEG-4") MakeCodecList = NumCodec End Function Private Sub AddCodec(ByRef inList() As typCodecInf, ByRef inSize As Long, _ ByVal inFourCC As String, Optional ByVal inDescription As String = "") ReDim Preserve inList(inSize) As typCodecInf inList(inSize).FourCC = inFourCC If (inDescription = "") Then _ inList(inSize).Description = inList(inSize - 1).Description _ Else inList(inSize).Description = inDescription inSize = inSize + 1 End Sub