示例#1
0
        protected Decoder(AVStream *stream) : base(stream)
        {
            codecContext->Codec = FF.avcodec_find_decoder(codecContext->CodecId);
            int resultCode = FF.avcodec_open2(codecContext, codecContext->Codec, null);

            if (resultCode != 0)
            {
                throw new FFmpegException(resultCode);
            }
        }
示例#2
0
        private void Init(VideoEncoderParameters encoderParams)
        {
            var pixelFormats = GetSupportedPixelFormats(codec);

            if (pixelFormats != null && !pixelFormats.Contains(InFormat.PixelFormat))
            {
                outFormat = new VideoFormat(InFormat.Width, InFormat.Height, pixelFormats[0]);
                resampler = new VideoResampler(InFormat, OutFormat, encoderParams.ResampleFlags);
                tempFrame = new VideoFrame();
            }
            else
            {
                outFormat = InFormat;
            }

            framePerSecond = encoderParams.FrameRate;

            try {
                codecContext->PixFmt    = OutFormat.PixelFormat;
                codecContext->Width     = OutFormat.Width;
                codecContext->Height    = OutFormat.Height;
                codecContext->BitRate   = encoderParams.BitRate.Value;
                codecContext->TimeBase  = encoderParams.FrameRate.Reciprocal;
                codecContext->Framerate = encoderParams.FrameRate;
                if (encoderParams.GopSize != 0)
                {
                    codecContext->GopSize = encoderParams.GopSize;
                }
                if (encoderParams.MaxBFrames != 0)
                {
                    codecContext->MaxBFrames = encoderParams.MaxBFrames;
                }
                if (encoderParams.MbDecision != 0)
                {
                    codecContext->MbDecision = encoderParams.MbDecision;
                }
                if (encoderParams.Qmin != 0)
                {
                    codecContext->Qmin = encoderParams.Qmin;
                }
                if (encoderParams.Qmax != 0)
                {
                    codecContext->Qmax = encoderParams.Qmax;
                }

                var result = FF.avcodec_open2(codecContext, codec, null);
                if (result < 0)
                {
                    throw new CSharp.FFmpegException(result);
                }
            } catch {
                Dispose();
                throw;
            }
        }
示例#3
0
        private void Init(AVCodecID codecID, BitRate bitRate)
        {
            outFormat = MatchSupportedFormat(codecID, InFormat);
            if (!InFormat.Equals(OutFormat))
            {
                resampler = new AudioResampler(InFormat, OutFormat);
                tempFrame = new AudioFrame();
            }

            codecContext->SampleFmt     = outFormat.SampleFormat;
            codecContext->SampleRate    = outFormat.SampleRate;
            codecContext->ChannelLayout = outFormat.ChannelLayout;
            codecContext->Channels      = outFormat.Channels;
            codecContext->BitRate       = bitRate.Value;
            var rates = codecContext->Flags;

            int result = FF.avcodec_open2(codecContext, codec, null);

            if (result < 0)
            {
                throw new FFmpegException(result);
            }
        }