using System; using System.Runtime.InteropServices; using System.Text; namespace NAudio.MediaFoundation { /// /// http://msdn.microsoft.com/en-gb/library/windows/desktop/ms702192%28v=vs.85%29.aspx /// [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("c40a00f2-b93a-4d80-ae8c-5a1c634f58e4")] public interface IMFSample : IMFAttributes { /// /// Retrieves the value associated with a key. /// new void GetItem([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In, Out] IntPtr pValue); /// /// Retrieves the data type of the value associated with a key. /// new void GetItemType([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pType); /// /// Queries whether a stored attribute value equals a specified PROPVARIANT. /// new void CompareItem([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value, [MarshalAs(UnmanagedType.Bool)] out bool pbResult); /// /// Compares the attributes on this object with the attributes on another object. /// new void Compare([MarshalAs(UnmanagedType.Interface)] IMFAttributes pTheirs, int matchType, [MarshalAs(UnmanagedType.Bool)] out bool pbResult); /// /// Retrieves a UINT32 value associated with a key. /// new void GetUINT32([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int punValue); /// /// Retrieves a UINT64 value associated with a key. /// new void GetUINT64([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out long punValue); /// /// Retrieves a double value associated with a key. /// new void GetDouble([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out double pfValue); /// /// Retrieves a GUID value associated with a key. /// new void GetGUID([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out Guid pguidValue); /// /// Retrieves the length of a string value associated with a key. /// new void GetStringLength([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcchLength); /// /// Retrieves a wide-character string associated with a key. /// new void GetString([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszValue, int cchBufSize, out int pcchLength); /// /// Retrieves a wide-character string associated with a key. This method allocates the memory for the string. /// new void GetAllocatedString([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszValue, out int pcchLength); /// /// Retrieves the length of a byte array associated with a key. /// new void GetBlobSize([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcbBlobSize); /// /// Retrieves a byte array associated with a key. /// new void GetBlob([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int cbBufSize, out int pcbBlobSize); /// /// Retrieves a byte array associated with a key. This method allocates the memory for the array. /// new void GetAllocatedBlob([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out IntPtr ip, out int pcbSize); /// /// Retrieves an interface pointer associated with a key. /// new void GetUnknown([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv); /// /// Associates an attribute value with a key. /// new void SetItem([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value); /// /// Removes a key/value pair from the object's attribute list. /// new void DeleteItem([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey); /// /// Removes all key/value pairs from the object's attribute list. /// new void DeleteAllItems(); /// /// Associates a UINT32 value with a key. /// new void SetUINT32([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, int unValue); /// /// Associates a UINT64 value with a key. /// new void SetUINT64([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, long unValue); /// /// Associates a double value with a key. /// new void SetDouble([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, double fValue); /// /// Associates a GUID value with a key. /// new void SetGUID([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In, MarshalAs(UnmanagedType.LPStruct)] Guid guidValue); /// /// Associates a wide-character string with a key. /// new void SetString([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In, MarshalAs(UnmanagedType.LPWStr)] string wszValue); /// /// Associates a byte array with a key. /// new void SetBlob([In, MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBuf, int cbBufSize); /// /// Associates an IUnknown pointer with a key. /// new void SetUnknown([MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In, MarshalAs(UnmanagedType.IUnknown)] object pUnknown); /// /// Locks the attribute store so that no other thread can access it. /// new void LockStore(); /// /// Unlocks the attribute store. /// new void UnlockStore(); /// /// Retrieves the number of attributes that are set on this object. /// new void GetCount(out int pcItems); /// /// Retrieves an attribute at the specified index. /// new void GetItemByIndex(int unIndex, out Guid pGuidKey, [In, Out] IntPtr pValue); /// /// Copies all of the attributes from this object into another attribute store. /// new void CopyAllItems([In, MarshalAs(UnmanagedType.Interface)] IMFAttributes pDest); /// /// Retrieves flags associated with the sample. /// void GetSampleFlags(out int pdwSampleFlags); /// /// Sets flags associated with the sample. /// void SetSampleFlags(int dwSampleFlags); /// /// Retrieves the presentation time of the sample. /// void GetSampleTime(out long phnsSampletime); /// /// Sets the presentation time of the sample. /// void SetSampleTime(long hnsSampleTime); /// /// Retrieves the duration of the sample. /// void GetSampleDuration(out long phnsSampleDuration); /// /// Sets the duration of the sample. /// void SetSampleDuration(long hnsSampleDuration); /// /// Retrieves the number of buffers in the sample. /// void GetBufferCount(out int pdwBufferCount); /// /// Retrieves a buffer from the sample. /// void GetBufferByIndex(int dwIndex, out IMFMediaBuffer ppBuffer); /// /// Converts a sample with multiple buffers into a sample with a single buffer. /// void ConvertToContiguousBuffer(out IMFMediaBuffer ppBuffer); /// /// Adds a buffer to the end of the list of buffers in the sample. /// void AddBuffer(IMFMediaBuffer pBuffer); /// /// Removes a buffer at a specified index from the sample. /// void RemoveBufferByIndex(int dwIndex); /// /// Removes all buffers from the sample. /// void RemoveAllBuffers(); /// /// Retrieves the total length of the valid data in all of the buffers in the sample. /// void GetTotalLength(out int pcbTotalLength); /// /// Copies the sample data to a buffer. /// void CopyToBuffer(IMFMediaBuffer pBuffer); } }