private static unsafe int AVISaveOptions(IntPtr stream, ref AVIWriterImports.AVICOMPRESSOPTIONS opts, IntPtr owner) { fixed(AVIWriterImports.AVICOMPRESSOPTIONS *_popts = &opts) { IntPtr *pStream = &stream; AVIWriterImports.AVICOMPRESSOPTIONS * popts = _popts; AVIWriterImports.AVICOMPRESSOPTIONS **ppopts = &popts; return(AVIWriterImports.AVISaveOptions(owner, 0, 1, (void *)pStream, (void *)ppopts)); } }
public void AllocateToAVICOMPRESSOPTIONS(ref AVIWriterImports.AVICOMPRESSOPTIONS opts) { opts = _comprOptions; if (opts.cbParms != 0) { opts.lpParms = Win32Imports.HeapAlloc(Win32Imports.GetProcessHeap(), 0, opts.cbParms); Marshal.Copy(Parms, 0, opts.lpParms, opts.cbParms); } if (opts.cbFormat != 0) { opts.lpFormat = Win32Imports.HeapAlloc(Win32Imports.GetProcessHeap(), 0, opts.cbFormat); Marshal.Copy(Format, 0, opts.lpFormat, opts.cbFormat); } }
public static void DeallocateAVICOMPRESSOPTIONS(ref AVIWriterImports.AVICOMPRESSOPTIONS opts) { #if false // test: increase stability by never freeing anything, ever if (opts.lpParms != IntPtr.Zero) { Win32Imports.HeapFree(Win32Imports.GetProcessHeap(), 0, opts.lpParms); } if (opts.lpFormat != IntPtr.Zero) { Win32Imports.HeapFree(Win32Imports.GetProcessHeap(), 0, opts.lpFormat); } #endif opts.lpParms = IntPtr.Zero; opts.lpFormat = IntPtr.Zero; }
private static CodecToken DeSerializeFromByteArray(byte[] data) { var m = new MemoryStream(data, false); var b = new BinaryReader(m); AVIWriterImports.AVICOMPRESSOPTIONS comprOptions = new AVIWriterImports.AVICOMPRESSOPTIONS(); byte[] Format; byte[] Parms; try { comprOptions.fccType = b.ReadInt32(); comprOptions.fccHandler = b.ReadInt32(); comprOptions.dwKeyFrameEvery = b.ReadInt32(); comprOptions.dwQuality = b.ReadInt32(); comprOptions.dwBytesPerSecond = b.ReadInt32(); comprOptions.dwFlags = b.ReadInt32(); //comprOptions.lpFormat = b.ReadInt32(); comprOptions.cbFormat = b.ReadInt32(); //comprOptions.lpParms = b.ReadInt32(); comprOptions.cbParms = b.ReadInt32(); comprOptions.dwInterleaveEvery = b.ReadInt32(); Format = b.ReadBytes(comprOptions.cbFormat); Parms = b.ReadBytes(comprOptions.cbParms); } catch (IOException) { // ran off end of array most likely return(null); } finally { b.Close(); } var ret = new CodecToken { _comprOptions = comprOptions, Format = Format, Parms = Parms, codec = Decode_mmioFOURCC(comprOptions.fccHandler) }; return(ret); }
public static CodecToken CreateFromAVICOMPRESSOPTIONS(ref AVIWriterImports.AVICOMPRESSOPTIONS opts) { var ret = new CodecToken { _comprOptions = opts, codec = Decode_mmioFOURCC(opts.fccHandler), Format = new byte[opts.cbFormat], Parms = new byte[opts.cbParms] }; if (opts.lpFormat != IntPtr.Zero) { Marshal.Copy(opts.lpFormat, ret.Format, 0, opts.cbFormat); } if (opts.lpParms != IntPtr.Zero) { Marshal.Copy(opts.lpParms, ret.Parms, 0, opts.cbParms); } return(ret); }