Example #1
0
        public static void CopySample(IMediaSample src, IMediaSample dest, bool copySamples)
        {
            var sourceSize = src.GetActualDataLength();

            if (copySamples)
            {
                IntPtr sourceBuffer;
                src.GetPointer(out sourceBuffer);

                IntPtr destBuffer;
                dest.GetPointer(out destBuffer);

                CopyMemory(destBuffer, sourceBuffer, sourceSize);
            }

            // Copy the sample times
            long start, end;

            if (src.GetTime(out start, out end) == S_OK)
            {
                dest.SetTime(start, end);
            }

            if (src.GetMediaTime(out start, out end) == S_OK)
            {
                dest.SetMediaTime(start, end);
            }

            // Copy the media type
            AMMediaType mediaType;
            var         changed = src.GetMediaType(out mediaType) == 0;

            if (changed)
            {
                dest.SetMediaType(mediaType);
                DsUtils.FreeAMMediaType(mediaType);
            }

            dest.SetSyncPoint(src.IsSyncPoint() == S_OK);
            dest.SetPreroll(src.IsPreroll() == S_OK);
            dest.SetDiscontinuity(src.IsDiscontinuity() == S_OK);

            // Copy the actual data length
            dest.SetActualDataLength(sourceSize);
        }
Example #2
0
        public MediaSample(IMediaSample sample)
        {
            m_Size             = sample.GetSize();
            m_ActualDataLength = sample.GetActualDataLength();
            m_IsSyncPoint      = sample.IsSyncPoint() == 0;
            m_IsPreroll        = sample.IsPreroll() == 0;
            m_IsDiscontinuity  = sample.IsDiscontinuity() == 0;
            m_HasTime          = sample.GetTime(out m_TimeStart, out m_TimeEnd) == 0;
            m_HasMediaTime     = sample.GetMediaTime(out m_MediaTimeStart, out m_MediaTimeEnd) == 0;
            m_Buffer           = Marshal.AllocCoTaskMem(m_Size);
            // Copy the media type
            AMMediaType mediaType;

            if (sample.GetMediaType(out mediaType) == 0)
            {
                m_MediaType = mediaType;
            }
        }
Example #3
0
        void TestMediaType()
        {
            int         hr;
            AMMediaType mt1 = new AMMediaType();

            // Set the media type to the original value we
            // got off the pin.  If we don't do this, the GetMediatype
            // will just return null, indicating that the mediatype
            // hasn't changed.
            hr = m_ims.SetMediaType(m_MediaType);
            Marshal.ThrowExceptionForHR(hr);

            // Re-read the value
            hr = m_ims.GetMediaType(out mt1);
            Marshal.ThrowExceptionForHR(hr);

            // Check to see if it re-read correctly.
            Debug.Assert(m_MediaType.majorType == mt1.majorType, "Major type");
            Debug.Assert(m_MediaType.subType == mt1.subType, "Sub type");

            DsUtils.FreeAMMediaType(mt1);
            mt1 = null;
        }
Example #4
0
        public static void CopySample(IMediaSample src, IMediaSample dest, bool copySamples)
        {
            var sourceSize = src.GetActualDataLength();

            if (copySamples)
            {
                IntPtr sourceBuffer;
                src.GetPointer(out sourceBuffer);

                IntPtr destBuffer;
                dest.GetPointer(out destBuffer);

                CopyMemory(destBuffer, sourceBuffer, sourceSize);
            }

            // Copy the sample times
            long start, end;

            if (src.GetTime(out start, out end) == S_OK)
            {
                dest.SetTime(start, end);
            }

            if (src.GetMediaTime(out start, out end) == S_OK)
            {
                dest.SetMediaTime(start, end);
            }

            // Copy the media type
            AMMediaType mediaType;
            src.GetMediaType(out mediaType);
            dest.SetMediaType(mediaType);
            DsUtils.FreeAMMediaType(mediaType);

            dest.SetSyncPoint(src.IsSyncPoint() == S_OK);
            dest.SetPreroll(src.IsPreroll() == S_OK);
            dest.SetDiscontinuity(src.IsDiscontinuity() == S_OK);

            // Copy the actual data length
            dest.SetActualDataLength(sourceSize);
        }