public bool Flush2(out mfxFrameSurface1?frame) { mfxFrameSurface1 *p = null; frame = null; var sts = NativeLLDecoderUnsafeNativeMethods.NativeDecoder_Flush2(h, &p); if (sts == mfxStatus.MFX_ERR_MORE_SURFACE) // decoder needs to be called again, it is eating memory.SWmode { return(true); } if (sts == mfxStatus.MFX_ERR_MORE_DATA) { return(false); } QuickSyncStatic.ThrowOnBadStatus(sts, nameof(NativeLLDecoderUnsafeNativeMethods.NativeDecoder_Flush2)); if (p != null) { frame = *p; } return(true); }
public LowLevelDecoderNative(mfxVideoParam mfxDecParamsX, mfxVideoParam?VPPParamsX = null, mfxIMPL impl = mfxIMPL.MFX_IMPL_AUTO) { mfxVideoParam tmpMfxVideoParam; if (VPPParamsX.HasValue) { tmpMfxVideoParam = VPPParamsX.Value; } else { tmpMfxVideoParam.AsyncDepth = 1; tmpMfxVideoParam.IOPattern = IOPattern.MFX_IOPATTERN_IN_VIDEO_MEMORY | IOPattern.MFX_IOPATTERN_OUT_VIDEO_MEMORY; tmpMfxVideoParam.vpp.In = mfxDecParamsX.mfx.FrameInfo; tmpMfxVideoParam.vpp.Out = mfxDecParamsX.mfx.FrameInfo; } mfxStatus sts; session = new mfxSession(); var ver = new mfxVersion() { Major = 1, Minor = 3 }; fixed(mfxSession *s = &session) sts = UnsafeNativeMethods.MFXInit(impl, &ver, s); QuickSyncStatic.ThrowOnBadStatus(sts, "MFXInit"); //deviceSetup = new DeviceSetup(session, false); h = NativeLLDecoderUnsafeNativeMethods.NativeDecoder_New(); Trace.Assert(h != IntPtr.Zero); shared = (DecoderShared *)h; //Console.WriteLine("mfxbs offset in C# {0}", (UInt64)(&(shared->mfxBS)) - (UInt64)shared); //Console.WriteLine("warningCount offset in C# {0}", (UInt64)(&(shared->warningCount)) - (UInt64)shared); //Console.WriteLine("sizeof(mfxBitstream) {0}", sizeof(mfxBitstream)); //Console.WriteLine("sizeof(DecoderShared) {0}", sizeof(DecoderShared)); //Console.WriteLine("shared->safety {0}", shared->safety); Trace.Assert(shared->safety == sizeof(DecoderShared)); shared->mfxBS.MaxLength = 1000000; shared->mfxBS.Data = Marshal.AllocHGlobal((int)shared->mfxBS.MaxLength); shared->mfxBS.DataLength = 0; shared->mfxBS.DataOffset = 0; sts = NativeLLDecoderUnsafeNativeMethods.NativeDecoder_Init(h, session, &mfxDecParamsX, &tmpMfxVideoParam); QuickSyncStatic.ThrowOnBadStatus(sts, nameof(NativeLLDecoderUnsafeNativeMethods.NativeDecoder_Init)); //mfxFrameSurface1 aaa = *shared->foo1[0]; //aaa.Data = new mfxFrameData(); //File.WriteAllText("\\x\\a", Newtonsoft.Json.JsonConvert.SerializeObject(aaa,Formatting.Indented)); // aaa = *shared->foo2[0]; //aaa.Data = new mfxFrameData(); //File.WriteAllText("\\x\\b", Newtonsoft.Json.JsonConvert.SerializeObject(aaa, Formatting.Indented)); //aaa = *shared->foo3[0]; //aaa.Data = new mfxFrameData(); //File.WriteAllText("\\x\\c", Newtonsoft.Json.JsonConvert.SerializeObject(aaa, Formatting.Indented)); //aaa = *shared->foo4[0]; //aaa.Data = new mfxFrameData(); //File.WriteAllText("\\x\\d", Newtonsoft.Json.JsonConvert.SerializeObject(aaa, Formatting.Indented)); GetAndPrintWarnings(); }
public void UnlockFrame(IntPtr frame) { var sts = NativeLLDecoderUnsafeNativeMethods.NativeDecoder_UnlockFrame(h, frame); QuickSyncStatic.ThrowOnBadStatus(sts, nameof(NativeLLEncoderUnsafeNativeMethods.NativeEncoder_UnlockFrame)); }
public void Reset(mfxVideoParam p) { var sts = NativeLLDecoderUnsafeNativeMethods.NativeDecoder_Reset(h, &p); QuickSyncStatic.ThrowOnBadStatus(sts, nameof(NativeLLDecoderUnsafeNativeMethods.NativeDecoder_Reset)); }
public void ClearBitstream() { var sts = NativeLLDecoderUnsafeNativeMethods.NativeDecoder_ClearBitstream(h); QuickSyncStatic.ThrowOnBadStatus(sts, nameof(NativeLLDecoderUnsafeNativeMethods.NativeDecoder_ClearBitstream)); }