public static FFmpegVideoDecoder CreateDecoder(FFmpegVideoCodecId videoCodecId) { int resultCode; IntPtr decoderPtr; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { resultCode = FFmpegVideoPInvokeWin.CreateVideoDecoder(videoCodecId, out decoderPtr); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { resultCode = FFmpegVideoPInvokeLinux.CreateVideoDecoder(videoCodecId, out decoderPtr); } else { throw new PlatformNotSupportedException(); } if (resultCode != 0) { throw new DecoderException( $"CreateDecoder say: An error occurred while creating video decoder for {videoCodecId} codec, code: {resultCode}"); } return(new FFmpegVideoDecoder(videoCodecId, decoderPtr)); }
private FFmpegVideoDecoder GetDecoderForFrame(RawVideoFrame videoFrame) { FFmpegVideoCodecId codecId = DetectCodecId(videoFrame); if (!_videoDecodersMap.TryGetValue(codecId, out FFmpegVideoDecoder decoder)) { decoder = FFmpegVideoDecoder.CreateDecoder(codecId); _videoDecodersMap.Add(codecId, decoder); } return(decoder); }
public static FFmpegVideoDecoder CreateDecoder(FFmpegVideoCodecId videoCodecId) { int resultCode = FFmpegVideoPInvoke.CreateVideoDecoder(videoCodecId, out IntPtr decoderPtr); if (resultCode != 0) { throw new DecoderException( $"An error occurred while creating video decoder for {videoCodecId} codec, code: {resultCode}"); } return(new FFmpegVideoDecoder(videoCodecId, decoderPtr)); }
public static extern int CreateVideoDecoder(FFmpegVideoCodecId videoCodecId, out IntPtr handle);
private FFmpegVideoDecoder(FFmpegVideoCodecId videoCodecId, IntPtr decoderHandle) { _videoCodecId = videoCodecId; _decoderHandle = decoderHandle; }