コード例 #1
0
        void TestMediaTime()
        {
            int  hr;
            long TimeStart1, TimeEnd1;
            long TimeStart2, TimeEnd2;

            // Read the value
            hr = m_ims.GetMediaTime(out TimeStart1, out TimeEnd1);
            Marshal.ThrowExceptionForHR(hr);

            // Change the value
            hr = m_ims.SetMediaTime(new DsLong(TimeStart1 + 1), new DsLong(TimeEnd1 - 1));
            Marshal.ThrowExceptionForHR(hr);

            // Re-read the value
            hr = m_ims.GetMediaTime(out TimeStart2, out TimeEnd2);
            Marshal.ThrowExceptionForHR(hr);

            // Check to see if the change took
            Debug.Assert(TimeStart1 + 1 == TimeStart2, "Get/Set MediaTime start");
            Debug.Assert(TimeEnd1 - 1 == TimeEnd2, "Get/Set MediaTime End");

            // Try using nulls
            hr = m_ims.SetMediaTime(null, null);
            Marshal.ThrowExceptionForHR(hr);

            // Read the time, should fail (because of the nulls)
            hr = m_ims.GetMediaTime(out TimeStart1, out TimeEnd1);
            Debug.Assert(hr == DsResults.E_MediaTimeNotSet, "Get/Set MediaTime null");

            // Put it back to where it started
            hr = m_ims.SetMediaTime(new DsLong(TimeStart1), new DsLong(TimeEnd1));
            Marshal.ThrowExceptionForHR(hr);
        }
コード例 #2
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);
        }
コード例 #3
0
        // Set the timestamps
        override public int SetTimeStamps(IMediaSample pSample)
        {
            int hr;

            int  iRead      = pSample.GetActualDataLength();
            long SampleTime = GetTimeFromBytes(iRead);
            long TimeStart  = m_FSampleTime;

            m_FSampleTime = m_FSampleTime + SampleTime;
            long TimeStop = m_FSampleTime;

            hr = pSample.SetTime(TimeStart, TimeStop);

            if (hr >= 0)
            {
                TimeStart    = m_FMediaTime;
                m_FMediaTime = m_FMediaTime + SampleTime;
                TimeStop     = m_FMediaTime;
                hr           = pSample.SetMediaTime(TimeStart, TimeStop);
                DsError.ThrowExceptionForHR(hr);
            }

            return(hr);
        }
コード例 #4
0
ファイル: AudioHelpers.cs プロジェクト: Xuno/MPDN_Extensions
        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);
        }
コード例 #5
0
        // Set the timestamps
        public override int SetTimeStamps(IMediaSample pSample)
        {
            int hr;

            int iRead = pSample.GetActualDataLength();
            long SampleTime = GetTimeFromBytes(iRead);
            long TimeStart = m_FSampleTime;
            m_FSampleTime = m_FSampleTime + SampleTime;
            long TimeStop = m_FSampleTime;
            hr = pSample.SetTime(TimeStart, TimeStop);

            if (hr >= 0)
            {
                TimeStart = m_FMediaTime;
                m_FMediaTime = m_FMediaTime + SampleTime;
                TimeStop = m_FMediaTime;
                hr = pSample.SetMediaTime(TimeStart, TimeStop);
                DsError.ThrowExceptionForHR(hr);
            }

            return hr;
        }