/// <summary> /// Kopiert oder verwendet eine DirectShow Strukturinstanz, deren /// Speicheradresse übergeben wird. /// </summary> /// <param name="rawMediaType">Die Speicheradresse der DirectShow Instanz.</param> /// <param name="copy">Ist dieser Wert gesetzt, so wird die /// DirectShow Instanz samt den zugehörigen Speicherstrukturen /// dupliziert. Ansonsten wird die Instanz verwendet und /// der ursprünglich dafür alloziierte Speicher freigegeben.</param> public MediaType(IntPtr rawMediaType, bool copy) { // Check mode m_HasMediaType = (rawMediaType != IntPtr.Zero); // Nothing to do if (!m_HasMediaType) { return; } // Unpack var mediaType = (RawMediaType)Marshal.PtrToStructure(rawMediaType, typeof(RawMediaType)); // Check mode if (copy) { // Copy over mediaType.CopyTo(ref m_MediaType); } else { // Use as is m_RawMediaType = rawMediaType; m_MediaType = mediaType; } }
/// <summary> /// Erzeugt die Speicherstruktur für eine DirectShow Instanz. /// </summary> /// <remarks> /// Die optional assoziierten Speicherstrukturen werden dabei nicht /// dupliziert. /// </remarks> /// <param name="mediaType">Eine DirectShow Speicherstruktur.</param> /// <returns>Die Adresse eines Speicherbereiches mit der Instanz.</returns> private static IntPtr GetReference(RawMediaType mediaType) { // Allocate IntPtr rawMediaType = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(RawMediaType))); // Copy in Marshal.StructureToPtr(mediaType, rawMediaType, false); // Report return(rawMediaType); }
/// <summary> /// Kopiert oder verwendet eine DirectShow Strukturinstanz. /// </summary> /// <param name="mediaType">Die DirectShow Instanz.</param> /// <param name="copy">Ist dieser Parameter gesetzt, so wird /// eine eigenständige Kopie erstellt. Ansonsten wird die /// DirectShow Instanz samt der damit verbundenen Speicherstrukturen /// übernommen. Insbesondere darf es keinen Aufruf von /// <see cref="Interfaces.MediaType.FreeMemory"/> auf dem ersten Parameter /// mehr geben.</param> public MediaType( RawMediaType mediaType, bool copy ) { // Check mode if (copy) { // Make sure that secondary memory is duplicated mediaType.CopyTo( ref m_MediaType ); } else { // Hold this m_MediaType = mediaType; } }
/// <summary> /// Kopiert oder verwendet eine DirectShow Strukturinstanz. /// </summary> /// <param name="mediaType">Die DirectShow Instanz.</param> /// <param name="copy">Ist dieser Parameter gesetzt, so wird /// eine eigenständige Kopie erstellt. Ansonsten wird die /// DirectShow Instanz samt der damit verbundenen Speicherstrukturen /// übernommen. Insbesondere darf es keinen Aufruf von /// <see cref="Interfaces.MediaType.FreeMemory"/> auf dem ersten Parameter /// mehr geben.</param> public MediaType(RawMediaType mediaType, bool copy) { // Check mode if (copy) { // Make sure that secondary memory is duplicated mediaType.CopyTo(ref m_MediaType); } else { // Hold this m_MediaType = mediaType; } }
/// <summary> /// Erstellt eine vollständige Kopie der DirectShow Instanz. Dies /// schließt alls Substrukturen mit ein. /// <seealso cref="GetReference(RawMediaType)"/> /// </summary> /// <returns>Die Speicheradress der kopierten Instanz.</returns> public IntPtr CreateCopy() { // None if (!m_HasMediaType) { return(IntPtr.Zero); } // Copy var mediaType = new RawMediaType(); // Full copy m_MediaType.CopyTo(ref mediaType); // Report return(GetReference(mediaType)); }
/// <summary> /// Erstellt eine Kopie dieser Formatbeschreibung. /// </summary> /// <remarks> /// Die Kopie muß später mit <see cref="FreeMemory"/> /// freigegeben werden. /// </remarks> /// <param name="target">Zu füllende Kopie. Der Aufrufer hat dafür /// Sorge zu tragen, dass alle sekundären Speicherstrukturen /// bereits freigegeben sind.</param> public void CopyTo(ref RawMediaType target) { // Copy all target.TemporalCompression = TemporalCompression; target.FixedSizeSamples = FixedSizeSamples; target.SampleSize = SampleSize; target.FormatType = FormatType; target.MajorType = MajorType; target.SubType = SubType; target.Format = Format; target.Holder = Holder; // Correct the reference if (target.Holder != IntPtr.Zero) { Marshal.AddRef(target.Holder); } }
/// <summary> /// Erstellt eine Kopie dieser Formatbeschreibung. /// </summary> /// <remarks> /// Die Kopie muß später mit <see cref="FreeMemory"/> /// freigegeben werden. /// </remarks> /// <param name="target">Zu füllende Kopie. Der Aufrufer hat dafür /// Sorge zu tragen, dass alle sekundären Speicherstrukturen /// bereits freigegeben sind.</param> public void CopyTo( ref RawMediaType target ) { // Copy all target.TemporalCompression = TemporalCompression; target.FixedSizeSamples = FixedSizeSamples; target.SampleSize = SampleSize; target.FormatType = FormatType; target.MajorType = MajorType; target.SubType = SubType; target.Format = Format; target.Holder = Holder; // Correct the reference if (target.Holder != IntPtr.Zero) Marshal.AddRef( target.Holder ); }
/// <summary> /// Kopiert eine DirectShow Strukturinstanz. /// </summary> /// <param name="mediaType">Die DirectShow Instanz.</param> public MediaType( RawMediaType mediaType ) : this( mediaType, true ) { }
/// <summary> /// Kopiert die DriectShow Instanz mit sämtlichen Substrukturen in eine /// andere Instanz. /// </summary> /// <param name="target">Zu überschreibenede Instanz.</param> public void CopyTo( ref RawMediaType target ) { // Forward m_MediaType.CopyTo( ref target ); }
/// <summary> /// Erstellt eine vollständige Kopie der DirectShow Instanz. Dies /// schließt alls Substrukturen mit ein. /// <seealso cref="GetReference(RawMediaType)"/> /// </summary> /// <returns>Die Speicheradress der kopierten Instanz.</returns> public IntPtr CreateCopy() { // None if (!m_HasMediaType) return IntPtr.Zero; // Copy var mediaType = new RawMediaType(); // Full copy m_MediaType.CopyTo( ref mediaType ); // Report return GetReference( mediaType ); }
/// <summary> /// Erzeugt die Speicherstruktur für eine DirectShow Instanz. /// </summary> /// <remarks> /// Die optional assoziierten Speicherstrukturen werden dabei nicht /// dupliziert. /// </remarks> /// <param name="mediaType">Eine DirectShow Speicherstruktur.</param> /// <returns>Die Adresse eines Speicherbereiches mit der Instanz.</returns> private static IntPtr GetReference( RawMediaType mediaType ) { // Allocate IntPtr rawMediaType = Marshal.AllocCoTaskMem( Marshal.SizeOf( typeof( RawMediaType ) ) ); // Copy in Marshal.StructureToPtr( mediaType, rawMediaType, false ); // Report return rawMediaType; }
/// <summary> /// Kopiert oder verwendet eine DirectShow Strukturinstanz, deren /// Speicheradresse übergeben wird. /// </summary> /// <param name="rawMediaType">Die Speicheradresse der DirectShow Instanz.</param> /// <param name="copy">Ist dieser Wert gesetzt, so wird die /// DirectShow Instanz samt den zugehörigen Speicherstrukturen /// dupliziert. Ansonsten wird die Instanz verwendet und /// der ursprünglich dafür alloziierte Speicher freigegeben.</param> public MediaType( IntPtr rawMediaType, bool copy ) { // Check mode m_HasMediaType = (rawMediaType != IntPtr.Zero); // Nothing to do if (!m_HasMediaType) return; // Unpack var mediaType = (RawMediaType) Marshal.PtrToStructure( rawMediaType, typeof( RawMediaType ) ); // Check mode if (copy) { // Copy over mediaType.CopyTo( ref m_MediaType ); } else { // Use as is m_RawMediaType = rawMediaType; m_MediaType = mediaType; } }
/// <summary> /// Kopiert eine DirectShow Strukturinstanz. /// </summary> /// <param name="mediaType">Die DirectShow Instanz.</param> public MediaType(RawMediaType mediaType) : this(mediaType, true) { }
/// <summary> /// Kopiert die DriectShow Instanz mit sämtlichen Substrukturen in eine /// andere Instanz. /// </summary> /// <param name="target">Zu überschreibenede Instanz.</param> public void CopyTo(ref RawMediaType target) { // Forward m_MediaType.CopyTo(ref target); }