diff --git a/codec_context.go b/codec_context.go index d92215f..0ff2ae5 100644 --- a/codec_context.go +++ b/codec_context.go @@ -455,3 +455,43 @@ func goAstiavCodecContextGetFormat(cc *C.AVCodecContext, pfsCPtr *C.enum_AVPixel // Callback return C.enum_AVPixelFormat(c(pfs)) } + +// https://ffmpeg.org/doxygen/7.0/structAVCodecContext.html#a3e5334a611a3e2a6a653805bb9e2d4d4 +func (cc *CodecContext) MaxBFrames() int { + return int(cc.c.max_b_frames) +} + +// https://ffmpeg.org/doxygen/7.0/structAVCodecContext.html#a3e5334a611a3e2a6a653805bb9e2d4d4 +func (cc *CodecContext) SetMaxBFrames(n int) { + cc.c.max_b_frames = C.int(n) +} + +// https://ffmpeg.org/doxygen/7.0/structAVCodecContext.html#aa2b5582f1a360534310b686cc3f7c668 +func (cc *CodecContext) RateControlMaxRate() int64 { + return int64(cc.c.rc_max_rate) +} + +// https://ffmpeg.org/doxygen/7.0/structAVCodecContext.html#aa2b5582f1a360534310b686cc3f7c668 +func (cc *CodecContext) SetRateControlMaxRate(n int64) { + cc.c.rc_max_rate = C.int64_t(n) +} + +// https://ffmpeg.org/doxygen/7.0/structAVCodecContext.html#ac265c70b89e87455ec05eb2978def81b +func (cc *CodecContext) RateControlMinRate() int64 { + return int64(cc.c.rc_min_rate) +} + +// https://ffmpeg.org/doxygen/7.0/structAVCodecContext.html#ac265c70b89e87455ec05eb2978def81b +func (cc *CodecContext) SetRateControlMinRate(n int64) { + cc.c.rc_min_rate = C.int64_t(n) +} + +// https://ffmpeg.org/doxygen/7.0/structAVCodecContext.html#a15000607a7e2371162348bb35b0184c1 +func (cc *CodecContext) RateControlBufferSize() int { + return int(cc.c.rc_buffer_size) +} + +// https://ffmpeg.org/doxygen/7.0/structAVCodecContext.html#a15000607a7e2371162348bb35b0184c1 +func (cc *CodecContext) SetRateControlBufferSize(n int) { + cc.c.rc_buffer_size = C.int(n) +} diff --git a/codec_context_test.go b/codec_context_test.go index 6f18b6c..1ea6b9f 100644 --- a/codec_context_test.go +++ b/codec_context_test.go @@ -101,6 +101,10 @@ func TestCodecContext(t *testing.T) { cc4.SetTimeBase(NewRational(15, 1)) cc4.SetWidth(16) cc4.SetExtraHardwareFrames(4) + cc4.SetMaxBFrames(1) + cc4.SetRateControlMaxRate(1_500_000) + cc4.SetRateControlMinRate(1_500_000) + cc4.SetRateControlBufferSize(1_500_000) require.Equal(t, int64(1), cc4.BitRate()) require.True(t, cc4.ChannelLayout().Equal(ChannelLayout21)) require.Equal(t, NewCodecContextFlags(4), cc4.Flags()) @@ -121,6 +125,10 @@ func TestCodecContext(t *testing.T) { require.Equal(t, NewRational(15, 1), cc4.TimeBase()) require.Equal(t, 16, cc4.Width()) require.Equal(t, 4, cc4.ExtraHardwareFrames()) + require.Equal(t, 1, cc4.MaxBFrames()) + require.Equal(t, int64(1_500_000), cc4.RateControlMaxRate()) + require.Equal(t, int64(1_500_000), cc4.RateControlMinRate()) + require.Equal(t, 1_500_000, cc4.RateControlBufferSize()) cc5 := AllocCodecContext(nil) require.NotNil(t, cc5)