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); }
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); }
// 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); }
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); }
// 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; }