Пример #1
0
        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));
        }
Пример #2
0
        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;
 }