Click here to Skip to main content
14,218,541 members

BSEtunes

Rate this:
4.44 (10 votes)
Please Sign up or sign in to vote.
4.44 (10 votes)
24 Apr 2010CPOL
BSEtunes is a MySQL based, full manageable, networkable single or multiuser jukebox application
BSE.Platten
BSE.Platten.vssscc
mssccprj.scc
vssver2.scc
BSE.CoverFlow.WPFLib
BSE.CoverFlow.WPFLib.csproj.user
BSE.CoverFlow.WPFLib.csproj.vspscc
mssccprj.scc
vssver2.scc
Images
close.png
exit.png
next.png
next_disabled.png
Note.jpg
pause.png
PlayButton.png
previous.png
previous_disabled.png
stop.png
vssver2.scc
Properties
vssver2.scc
Resources
vssver2.scc
BSE.Platten.Admin
BSE.Platten.Admin.csproj.vspscc
mssccprj.scc
vssver2.scc
Properties
vssver2.scc
Resources
Album16.gif
BSEadmin.ico
cdimport.png
cdrip.png
cd_hoeren.png
clearsearch.png
DataContainer_MoveFirsHS.png
DataContainer_MoveLastHS.png
DataContainer_MoveNextHS.png
DataContainer_MovePreviousHS.png
DataContainer_NewRecordHS.png
diskinfo.png
DRIVEDSC.png
DRIVENET.png
Edit_UndoHS.png
exportimage.png
findfile.png
FindHS.png
freedb.png
Genre16.png
Image.png
InsertPictureHS.png
Interpret16.png
OptionsHS.png
PieChart3DHS.png
PieChartHS.png
ProtectFormHS.png
RefreshDocViewHS.png
saveHS.png
search.png
song.png
system.png
tagger.png
tools_16.png
vssver2.scc
BSE.Platten.Admin.WinApp
BSE.Platten.Admin.WinApp.csproj.user
BSE.Platten.Admin.WinApp.csproj.vspscc
mssccprj.scc
vssver2.scc
Properties
vssver2.scc
Resources
BSEadmin.ico
vssver2.scc
BSE.Platten.Audio
bse.ico
BSE.Platten.Audio.csproj.vspscc
mssccprj.scc
vssver2.scc
Options
vssver2.scc
Player
vssver2.scc
Properties
vssver2.scc
Resources
FillDownHS.png
FillLeftHS.png
Folder256.png
FolderFind.png
FolderOpen256.png
GoLtrHS.png
MoveNext.png
MovePrevious.png
OptionsHS.png
PauseHS.png
PlayHS.png
Slider.gif
Start.png
StopHS.png
vssver2.scc
WinControls
vssver2.scc
WMFSDK
vssver2.scc
BSE.Platten.BO
BSE.Platten.BO.csproj.vspscc
mssccprj.scc
vssver2.scc
Properties
vssver2.scc
BSE.Platten.Common
BSE.Platten.Common.csproj.vspscc
mssccprj.scc
vssver2.scc
Properties
vssver2.scc
Resources
BSEsplash.png
DRIVEDSC.png
DRIVENET.png
Network.png
splash.png
vssver2.scc
BSE.Platten.Covers
BSE.Platten.Covers.csproj.vspscc
mssccprj.scc
vssver2.scc
Properties
vssver2.scc
BSE.Platten.FreeDb
BSE.Platten.FreeDb.csproj.vspscc
mssccprj.scc
vssver2.scc
Properties
vssver2.scc
Resources
OpenCD.png
vssver2.scc
BSE.Platten.Ripper
BSE.Platten.Ripper.csproj.vspscc
mssccprj.scc
vssver2.scc
Properties
vssver2.scc
Resources
OpenCD.png
OptionsHS.png
vssver2.scc
BSE.Platten.Statistik
BSE.Platten.Statistik.csproj.vspscc
mssccprj.scc
vssver2.scc
Properties
vssver2.scc
BSE.Platten.Tunes
BSE.Platten.Tunes.csproj.user
BSE.Platten.Tunes.csproj.vspscc
mssccprj.scc
vssver2.scc
Filters
vssver2.scc
Properties
vssver2.scc
Resources
About.png
Album16.gif
AudioCD.png
AudioFile.png
AutoList.png
broadcast.png
BSE.png
BSEAbout.png
BSEsplash.png
BSEtunes.ico
BSE_16.png
cd_hoeren.png
coverflow.png
DataContainer_MoveNextHS.png
delete.gif
diskinfo.png
Filter2HS.png
FindHS.png
Folder256.png
FolderOpen256.png
Genre16.gif
Interpret16.gif
keinBild.gif
NewPlaylist16.gif
OptionsHS.png
PauseHS.png
RefreshDocViewHS.png
Removabledrive.png
saveHS.png
search.png
shuffle.png
Shuffle_icon.png
song.png
splash1.png
StopHS.png
TaskHS.png
TrackInfo.gif
vssver2.scc
wiedergabe16.gif
BSEadminSetup
BSEadminSetup.vdproj
BSEadminSetup.vdproj.vspscc
mssccprj.scc
vssver2.scc
Debug
Release
BSEtunesSetup
BSEtunesSetup.vdproj
BSEtunesSetup.vdproj.vspscc
mssccprj.scc
vssver2.scc
Debug
Release
dll
BSE.CDDrives.DLL
BSE.Charts.DLL
BSE.Configuration.DLL
BSE.RemovableDrives.DLL
BSE.Shell.DLL
BSE.Windows.Forms.DLL
Lame
lame_enc.dll
vssver2.scc
lame-3.97
BSE.CoverFlow.WPFLib.csproj.user
close.png
exit.png
next.png
next_disabled.png
Note.jpg
pause.png
PlayButton.png
previous.png
previous_disabled.png
stop.png
vssver2.scc
vssver2.scc
vssver2.scc
BSE.Platten.Admin.csproj.user
vssver2.scc
Album16.gif
BSEadmin.ico
cdimport.png
cdrip.png
cd_hoeren.png
clearsearch.png
DataContainer_MoveFirsHS.png
DataContainer_MoveLastHS.png
DataContainer_MoveNextHS.png
DataContainer_MovePreviousHS.png
DataContainer_NewRecordHS.png
diskinfo.png
DRIVEDSC.png
DRIVENET.png
Edit_UndoHS.png
exportimage.png
findfile.png
FindHS.png
freedb.png
Genre16.png
Image.png
InsertPictureHS.png
Interpret16.png
OptionsHS.png
PieChart3DHS.png
PieChartHS.png
ProtectFormHS.png
RefreshDocViewHS.png
saveHS.png
search.png
song.png
system.png
tagger.png
tools_16.png
vssver2.scc
BSE.Platten.Admin.WinApp.csproj.user
vssver2.scc
BSEadmin.ico
vssver2.scc
bse.ico
BSE.Platten.Audio.csproj.user
vssver2.scc
vssver2.scc
vssver2.scc
FillDownHS.png
FillLeftHS.png
Folder256.png
FolderFind.png
FolderOpen256.png
GoLtrHS.png
MoveNext.png
MovePrevious.png
OptionsHS.png
PauseHS.png
PlayHS.png
Slider.gif
Start.png
StopHS.png
vssver2.scc
vssver2.scc
vssver2.scc
BSE.Platten.BO.csproj.user
vssver2.scc
BSE.Platten.Common.csproj.user
vssver2.scc
BSEsplash.png
DRIVEDSC.png
DRIVENET.png
Network.png
splash.png
vssver2.scc
BSE.Platten.Covers.csproj.user
vssver2.scc
BSE.Platten.FreeDb.csproj.user
vssver2.scc
OpenCD.png
vssver2.scc
AudioWriter
vssver2.scc
BSE.Platten.Ripper.csproj.user
Lame
vssver2.scc
vssver2.scc
OpenCD.png
OptionsHS.png
vssver2.scc
BSE.Platten.Statistik.csproj.user
vssver2.scc
BSE.Platten.Tunes.csproj.user
vssver2.scc
vssver2.scc
About.png
Album16.gif
AudioCD.png
AudioFile.png
AutoList.png
broadcast.png
BSE.png
BSEAbout.png
BSEsplash.png
BSEtunes.ico
BSE_16.png
cd_hoeren.png
coverflow.png
DataContainer_MoveNextHS.png
delete.gif
diskinfo.png
Filter2HS.png
FindHS.png
Folder256.png
FolderOpen256.png
Genre16.gif
Interpret16.gif
keinBild.gif
NewPlaylist16.gif
OptionsHS.png
PauseHS.png
RefreshDocViewHS.png
Removabledrive.png
saveHS.png
search.png
shuffle.png
Shuffle_icon.png
song.png
splash1.png
StopHS.png
TaskHS.png
TrackInfo.gif
vssver2.scc
wiedergabe16.gif
BSEadminSetup.vdproj
BSEtunesSetup.vdproj
BSE.CDDrives.DLL
BSE.Charts.DLL
BSE.Configuration.DLL
BSE.RemovableDrives.DLL
BSE.Shell.DLL
BSE.ThreadedShell.DLL
BSE.Windows.Forms.DLL
lame_enc.dll
MySQL.chm
//Widows Media Format Interfaces
//
//  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
//  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
//  PURPOSE. IT CAN BE DISTRIBUTED FREE OF CHARGE AS LONG AS THIS HEADER 
//  REMAINS UNCHANGED.
//
//  Email:  yetiicb@hotmail.com
//
//  Copyright (C) 2002-2004 Idael Cardoso. 
//
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics.CodeAnalysis;

namespace BSE.Platten.Audio.WMFSDK
{
    /// <summary>
    /// The IWMStreamConfig interface is the primary interface of a stream configuration object.
    /// It provides methods to configure basic properties for streams to be used in a profile.
    /// 
    /// Every profile contains one or more stream configuration objects. You can get the
    /// <see cref="IWMStreamConfig"/> interface of a stream configuration object by calling the
    /// IWMProfile.GetStream method or the IWMProfile.GetStreamByNumber method. The difference between these
    /// two methods is that GetStream retrieves the stream using an index ranging from zero to one less than
    /// the total stream count, and GetStreamByNumber retrieves the stream using the assigned stream number.
    /// You can also retrieve a stream configuration object using the IWMProfile.CreateNewStream method. 
    /// All of the methods that create stream configuration objects set a pointer to this interface.
    /// </summary>
    [ComImport]
    [Guid("96406BDC-2B2B-11d3-B36B-00C04F6108FF")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IWMStreamConfig
    {
        /// <summary>
        /// Retrieves the major type of the stream (audio, video, or script).
        /// </summary>
        /// <param name="pguidStreamType">Pointer to a GUID object specifying the major type of the stream.</param>
        [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters")]
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        void GetStreamType([Out] out Guid pguidStreamType);
        /// <summary>
        /// Retrieves the stream number.
        /// </summary>
        /// <param name="pwStreamNum">Pointer to a <b>WORD</b> containing the stream number.
        /// Stream numbers must be in the range of 1 through 63.</param>
        [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters")]
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        void GetStreamNumber([Out] out ushort pwStreamNum);
        /// <summary>
        /// Specifies the stream number.
        /// </summary>
        /// <param name="wStreamNum"><b>WORD</b> containing the stream number. Stream numbers must be in the range of 1 through 63.</param>
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        void SetStreamNumber([In] ushort wStreamNum);
        /// <summary>
        /// Retrieves the stream name.
        /// </summary>
        /// <param name="pwszStreamName">Pointer to a wide-character null-terminated string containing the stream name.
        /// Pass NULL to retrieve the length of the name.</param>
        /// <param name="pcchStreamName">On input, a pointer to a variable containing the length of the pwszStreamName
        /// array in wide characters (2 bytes). On output, if the method succeeds, the variable contains
        /// the actual length of the name, including the terminating null character.</param>
        [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters")]
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        void GetStreamName([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszStreamName,
                           [In, Out] ref ushort pcchStreamName);
        /// <summary>
        /// Specifies the stream name.
        /// </summary>
        /// <param name="pwszStreamName">Pointer to a wide-character null-terminated string containing the stream name.
        /// Stream names are limited to 256 wide characters.</param>
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        void SetStreamName([In, MarshalAs(UnmanagedType.LPWStr)] string pwszStreamName);
        /// <summary>
        /// Retrieves the connection name given to the stream.
        /// </summary>
        /// <param name="pwszInputName">Pointer to a wide-character null-terminated string containing the input name.
        /// Pass NULL to retrieve the length of the name.</param>
        /// <param name="pcchInputName">On input, a pointer to a variable containing the length of the pwszInputName
        /// array in wide characters (2 bytes). On output, if the method succeeds, the variable contains
        /// the length of the name, including the terminating null character.</param>
        [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters")]
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        void GetConnectionName([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszInputName,
                               [In, Out] ref ushort pcchInputName);
        /// <summary>
        /// Specifies the connection name given to a stream.
        /// </summary>
        /// <param name="pwszInputName">Pointer to a wide-character null-terminated string containing the input name.
        /// Connection names are limited to 256 wide characters.</param>
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        void SetConnectionName([In, MarshalAs(UnmanagedType.LPWStr)] string pwszInputName);
        /// <summary>
        /// Retrieves the bit rate for the stream.
        /// </summary>
        /// <param name="pdwBitrate">Pointer to a <b>DWORD</b> containing the bit rate, in bits per second.</param>
        [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters")]
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        void GetBitrate([Out] out uint pdwBitrate);
        /// <summary>
        /// Specifies the bit rate for the stream.
        /// </summary>
        /// <param name="pdwBitrate"><b>DWORD</b> containing the bit rate, in bits per second.</param>
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        void SetBitrate([In] uint pdwBitrate);
        /// <summary>
        /// Retrieves the maximum latency between when a stream is received and when it begins to be displayed.
        /// </summary>
        /// <param name="pmsBufferWindow">Pointer to a variable specifying the buffer window, in milliseconds.</param>
        [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters")]
        void GetBufferWindow([Out] out uint pmsBufferWindow);
        /// <summary>
        /// Specifies the maximum latency between when a stream is received and when it begins to be displayed.
        /// </summary>
        /// <param name="msBufferWindow">Buffer window, in milliseconds.</param>
        void SetBufferWindow([In] uint msBufferWindow);
    };
    /// <summary>
    /// The IWMStreamConfig2 interface manages the data unit extensions associated with a stream.
    /// 
    /// IWMStreamConfig2 inherits from <see cref="IWMStreamConfig"/>. To obtain a pointer to <see cref="IWMStreamConfig2"/>,
    /// call the QueryInterface method of the <see cref="IWMStreamConfig"/> interface.
    /// </summary>
    [ComImport]
    [Guid("7688D8CB-FC0D-43BD-9459-5A8DEC200CFA")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IWMStreamConfig2 : IWMStreamConfig
    {
        /// <summary>
        /// Retrieves the major type of the stream (audio, video, or script).
        /// </summary>
        /// <param name="pguidStreamType">Pointer to a GUID object specifying the major type of the stream.</param>
        new void GetStreamType([Out] out Guid pguidStreamType);
        /// <summary>
        /// Retrieves the stream number.
        /// </summary>
        /// <param name="pwStreamNum">Pointer to a <b>WORD</b> containing the stream number.
        /// Stream numbers must be in the range of 1 through 63.</param>
        new void GetStreamNumber([Out] out ushort pwStreamNum);
        /// <summary>
        /// Specifies the stream number.
        /// </summary>
        /// <param name="wStreamNum"><b>WORD</b> containing the stream number. Stream numbers must be in the range of 1 through 63.</param>
        new void SetStreamNumber([In] ushort wStreamNum);
        /// <summary>
        /// Retrieves the stream name.
        /// </summary>
        /// <param name="pwszStreamName">Pointer to a wide-character null-terminated string containing the stream name.
        /// Pass NULL to retrieve the length of the name.</param>
        /// <param name="pcchStreamName">On input, a pointer to a variable containing the length of the pwszStreamName
        /// array in wide characters (2 bytes). On output, if the method succeeds, the variable contains
        /// the actual length of the name, including the terminating null character.</param>
        new void GetStreamName([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszStreamName,
         [In, Out] ref ushort pcchStreamName);
        /// <summary>
        /// Specifies the stream name.
        /// </summary>
        /// <param name="pwszStreamName">Pointer to a wide-character null-terminated string containing the stream name.
        /// Stream names are limited to 256 wide characters.</param>
        new void SetStreamName([In, MarshalAs(UnmanagedType.LPWStr)] string pwszStreamName);
        /// <summary>
        /// Retrieves the connection name given to the stream.
        /// </summary>
        /// <param name="pwszInputName">Pointer to a wide-character null-terminated string containing the input name.
        /// Pass NULL to retrieve the length of the name.</param>
        /// <param name="pcchInputName">On input, a pointer to a variable containing the length of the pwszInputName
        /// array in wide characters (2 bytes). On output, if the method succeeds, the variable contains
        /// the length of the name, including the terminating null character.</param>
        new void GetConnectionName([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszInputName,
         [In, Out] ref ushort pcchInputName);
        /// <summary>
        /// Specifies the connection name given to a stream.
        /// </summary>
        /// <param name="pwszInputName">Pointer to a wide-character null-terminated string containing the input name.
        /// Connection names are limited to 256 wide characters.</param>
        new void SetConnectionName([In, MarshalAs(UnmanagedType.LPWStr)] string pwszInputName);
        /// <summary>
        /// Retrieves the bit rate for the stream.
        /// </summary>
        /// <param name="pdwBitrate">Pointer to a <b>DWORD</b> containing the bit rate, in bits per second.</param>
        new void GetBitrate([Out] out uint pdwBitrate);
        /// <summary>
        /// Specifies the bit rate for the stream.
        /// </summary>
        /// <param name="pdwBitrate"><b>DWORD</b> containing the bit rate, in bits per second.</param>
        new void SetBitrate([In] uint pdwBitrate);
        /// <summary>
        /// Retrieves the maximum latency between when a stream is received and when it begins to be displayed.
        /// </summary>
        /// <param name="pmsBufferWindow">Pointer to a variable specifying the buffer window, in milliseconds.</param>
        new void GetBufferWindow([Out] out uint pmsBufferWindow);
        /// <summary>
        /// Specifies the maximum latency between when a stream is received and when it begins to be displayed.
        /// </summary>
        /// <param name="msBufferWindow">Buffer window, in milliseconds.</param>
        new void SetBufferWindow([In] uint msBufferWindow);
        /// <summary>
        /// Retrieves the type of communication protocol.
        /// </summary>
        /// <param name="pnTransportType">Pointer to a variable that receives one member of the
        /// <b>WMT_TRANSPORT_TYPE</b> enumeration type.</param>
        [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters")]
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        void GetTransportType([Out] out WMT_TRANSPORT_TYPE pnTransportType);
        /// <summary>
        /// Sets the type of communication protocol.
        /// </summary>
        /// <param name="nTransportType">The SetTransportType method sets the type of data communication protocol
        /// (reliable or unreliable) used for the stream.</param>
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        void SetTransportType([In] WMT_TRANSPORT_TYPE nTransportType);
        /// <summary>
        /// Adds a data unit extension to the stream.
        /// </summary>
        /// <param name="guidExtensionSystemID">A GUID that identifies the data unit extension system.
        /// This can be one of the predefined GUIDs listed in INSSBuffer3.SetProperty, or a GUID whose value
        /// is understood by a custom player application.</param>
        /// <param name="cbExtensionDataSize">Size, in bytes, of the data unit extensions that will be attached to the
        /// packets in the stream. Set to 0xFFFF to specify data unit extensions of variable size.
        /// Each individual data unit extension can then be set to any size ranging from 0 to 65534.</param>
        /// <param name="pbExtensionSystemInfo">Pointer to a byte buffer containing information about the data unit
        /// extension system. If you have no information, you can pass NULL. When passing NULL,
        /// cbExtensionSystemInfo must be zero.</param>
        /// <param name="cbExtensionSystemInfo">Count of bytes in the buffer at pbExtensionSystemInfo. If you have no
        /// data unit extension system information, you can pass zero. When passing zero, pbExtensionSystemInfo
        /// must be NULL.</param>
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly")]
        [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames")]
        void AddDataUnitExtension([In] Guid guidExtensionSystemID,
                                  [In] ushort cbExtensionDataSize,
                                  [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] byte[] pbExtensionSystemInfo,
                                  [In] uint cbExtensionSystemInfo);
        /// <summary>
        /// Retrieves a count of all the data unit extensions in the stream.
        /// </summary>
        /// <param name="pcDataUnitExtensions">Pointer to a <b>WORD</b> that receives the count of data unit
        /// extensions.</param>
        [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters")]
        void GetDataUnitExtensionCount([Out] out ushort pcDataUnitExtensions);
        /// <summary>
        /// Retrieves a data unit extension from the stream.
        /// </summary>
        /// <param name="wDataUnitExtensionNumber"><b>WORD</b> containing the data unit extension number.
        /// This number is assigned to a data unit extension system when it is added to the stream.</param>
        /// <param name="pguidExtensionSystemID">Pointer to a GUID that receives the identifier of the data unit
        /// extension system.</param>
        /// <param name="pcbExtensionDataSize">Pointer to the size, in bytes, of the data unit extensions that will
        /// be attached to the packets in the stream.</param>
        /// <param name="pbExtensionSystemInfo">Pointer to a byte buffer that receives information about the data
        /// unit extension system.</param>
        /// <param name="pcbExtensionSystemInfo">Pointer to the size, in bytes, of the data stored at
        /// pbExtensionSystemInfo.</param>
        [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters")]
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly")]
        void GetDataUnitExtension([In] uint wDataUnitExtensionNumber,
                                  [Out] out Guid pguidExtensionSystemID,
                                  [Out] out ushort pcbExtensionDataSize,
            /*[out, size_is( *pcbExtensionSystemInfo )]*/ IntPtr pbExtensionSystemInfo,
                                  [In, Out] ref uint pcbExtensionSystemInfo);
        /// <summary>
        /// Removes all previously added data unit extensions.
        /// </summary>
        void RemoveAllDataUnitExtensions();
    }
    /// <summary>
    /// The IWMStreamConfig3 interface controls language settings for a stream.
    /// 
    /// An IWMStreamConfig3 interface exists for every stream configuration object. You can obtain a pointer
    /// to an IWMStreamConfig3 interface by calling the QueryInterface method of any other interface of the
    /// stream configuration object.
    /// </summary>
    [ComImport]
    [Guid("CB164104-3AA9-45a7-9AC9-4DAEE131D6E1")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IWMStreamConfig3 : IWMStreamConfig2
    {
        /// <summary>
        /// Retrieves the major type of the stream (audio, video, or script).
        /// </summary>
        /// <param name="pguidStreamType">Pointer to a GUID object specifying the major type of the stream.</param>
        new void GetStreamType([Out] out Guid pguidStreamType);
        /// <summary>
        /// Retrieves the stream number.
        /// </summary>
        /// <param name="pwStreamNum">Pointer to a <b>WORD</b> containing the stream number.
        /// Stream numbers must be in the range of 1 through 63.</param>
        new void GetStreamNumber([Out] out ushort pwStreamNum);
        /// <summary>
        /// Specifies the stream number.
        /// </summary>
        /// <param name="wStreamNum"><b>WORD</b> containing the stream number. Stream numbers must be in the range of 1 through 63.</param>
        new void SetStreamNumber([In] ushort wStreamNum);
        /// <summary>
        /// Retrieves the stream name.
        /// </summary>
        /// <param name="pwszStreamName">Pointer to a wide-character null-terminated string containing the stream name.
        /// Pass NULL to retrieve the length of the name.</param>
        /// <param name="pcchStreamName">On input, a pointer to a variable containing the length of the pwszStreamName
        /// array in wide characters (2 bytes). On output, if the method succeeds, the variable contains
        /// the actual length of the name, including the terminating null character.</param>
        new void GetStreamName([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszStreamName,
         [In, Out] ref ushort pcchStreamName);
        /// <summary>
        /// Specifies the stream name.
        /// </summary>
        /// <param name="pwszStreamName">Pointer to a wide-character null-terminated string containing the stream name.
        /// Stream names are limited to 256 wide characters.</param>
        new void SetStreamName([In, MarshalAs(UnmanagedType.LPWStr)] string pwszStreamName);
        /// <summary>
        /// Retrieves the connection name given to the stream.
        /// </summary>
        /// <param name="pwszInputName">Pointer to a wide-character null-terminated string containing the input name.
        /// Pass NULL to retrieve the length of the name.</param>
        /// <param name="pcchInputName">On input, a pointer to a variable containing the length of the pwszInputName
        /// array in wide characters (2 bytes). On output, if the method succeeds, the variable contains
        /// the length of the name, including the terminating null character.</param>
        new void GetConnectionName([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszInputName,
         [In, Out] ref ushort pcchInputName);
        /// <summary>
        /// Specifies the connection name given to a stream.
        /// </summary>
        /// <param name="pwszInputName">Pointer to a wide-character null-terminated string containing the input name.
        /// Connection names are limited to 256 wide characters.</param>
        new void SetConnectionName([In, MarshalAs(UnmanagedType.LPWStr)] string pwszInputName);
        /// <summary>
        /// Retrieves the bit rate for the stream.
        /// </summary>
        /// <param name="pdwBitrate">Pointer to a <b>DWORD</b> containing the bit rate, in bits per second.</param>
        new void GetBitrate([Out] out uint pdwBitrate);
        /// <summary>
        /// Specifies the bit rate for the stream.
        /// </summary>
        /// <param name="pdwBitrate"><b>DWORD</b> containing the bit rate, in bits per second.</param>
        new void SetBitrate([In] uint pdwBitrate);
        /// <summary>
        /// Retrieves the maximum latency between when a stream is received and when it begins to be displayed.
        /// </summary>
        /// <param name="pmsBufferWindow">Pointer to a variable specifying the buffer window, in milliseconds.</param>
        new void GetBufferWindow([Out] out uint pmsBufferWindow);
        /// <summary>
        /// Specifies the maximum latency between when a stream is received and when it begins to be displayed.
        /// </summary>
        /// <param name="msBufferWindow">Buffer window, in milliseconds.</param>
        new void SetBufferWindow([In] uint msBufferWindow);
        /// <summary>
        /// Retrieves the type of communication protocol.
        /// </summary>
        /// <param name="pnTransportType">Pointer to a variable that receives one member of the
        /// <b>WMT_TRANSPORT_TYPE</b> enumeration type.</param>
        new void GetTransportType([Out] out WMT_TRANSPORT_TYPE pnTransportType);
        /// <summary>
        /// Sets the type of communication protocol.
        /// </summary>
        /// <param name="nTransportType">The SetTransportType method sets the type of data communication protocol
        /// (reliable or unreliable) used for the stream.</param>
        new void SetTransportType([In] WMT_TRANSPORT_TYPE nTransportType);
        /// <summary>
        /// Adds a data unit extension to the stream.
        /// </summary>
        /// <param name="guidExtensionSystemID">A GUID that identifies the data unit extension system.
        /// This can be one of the predefined GUIDs listed in INSSBuffer3.SetProperty, or a GUID whose value
        /// is understood by a custom player application.</param>
        /// <param name="cbExtensionDataSize">Size, in bytes, of the data unit extensions that will be attached to the
        /// packets in the stream. Set to 0xFFFF to specify data unit extensions of variable size.
        /// Each individual data unit extension can then be set to any size ranging from 0 to 65534.</param>
        /// <param name="pbExtensionSystemInfo">Pointer to a byte buffer containing information about the data unit
        /// extension system. If you have no information, you can pass NULL. When passing NULL,
        /// cbExtensionSystemInfo must be zero.</param>
        /// <param name="cbExtensionSystemInfo">Count of bytes in the buffer at pbExtensionSystemInfo. If you have no
        /// data unit extension system information, you can pass zero. When passing zero, pbExtensionSystemInfo
        /// must be NULL.</param>
        new void AddDataUnitExtension([In] Guid guidExtensionSystemID,
          [In] ushort cbExtensionDataSize,
          [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] byte[] pbExtensionSystemInfo,
          [In] uint cbExtensionSystemInfo);
        /// <summary>
        /// Retrieves a count of all the data unit extensions in the stream.
        /// </summary>
        /// <param name="pcDataUnitExtensions">Pointer to a <b>WORD</b> that receives the count of data unit
        /// extensions.</param>
        new void GetDataUnitExtensionCount([Out] out ushort pcDataUnitExtensions);
        /// <summary>
        /// Retrieves a data unit extension from the stream.
        /// </summary>
        /// <param name="wDataUnitExtensionNumber"><b>WORD</b> containing the data unit extension number.
        /// This number is assigned to a data unit extension system when it is added to the stream.</param>
        /// <param name="pguidExtensionSystemID">Pointer to a GUID that receives the identifier of the data unit
        /// extension system.</param>
        /// <param name="pcbExtensionDataSize">Pointer to the size, in bytes, of the data unit extensions that will
        /// be attached to the packets in the stream.</param>
        /// <param name="pbExtensionSystemInfo">Pointer to a byte buffer that receives information about the data
        /// unit extension system.</param>
        /// <param name="pcbExtensionSystemInfo">Pointer to the size, in bytes, of the data stored at
        /// pbExtensionSystemInfo.</param>
        new void GetDataUnitExtension([In] uint wDataUnitExtensionNumber,
         [Out] out Guid pguidExtensionSystemID,
         [Out] out ushort pcbExtensionDataSize,
            /*[out, size_is( *pcbExtensionSystemInfo )]*/ IntPtr pbExt