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