Added error recognition flags

This commit is contained in:
Quentin Renard
2025-09-23 14:15:49 +02:00
parent 3cf710387d
commit a7292eff12
6 changed files with 60 additions and 0 deletions

View File

@@ -140,6 +140,16 @@ func (cc *CodecContext) SetColorTransferCharacteristic(tc ColorTransferCharacter
cc.c.color_trc = C.enum_AVColorTransferCharacteristic(tc)
}
// https://ffmpeg.org/doxygen/7.0/structAVCodecContext.html#af9978d9bd6ac80a494ef1b78fe1d004f
func (cc *CodecContext) ErrorRecognitionFlags() ErrorRecognitionFlags {
return ErrorRecognitionFlags(cc.c.err_recognition)
}
// https://ffmpeg.org/doxygen/7.0/structAVCodecContext.html#af9978d9bd6ac80a494ef1b78fe1d004f
func (cc *CodecContext) SetErrorRecognitionFlags(fs ErrorRecognitionFlags) {
cc.c.err_recognition = C.int(fs)
}
// https://ffmpeg.org/doxygen/7.0/structAVCodecContext.html#abe964316aaaa61967b012efdcced79c4
func (cc *CodecContext) ExtraData() []byte {
return bytesFromC(func(size *C.size_t) *C.uint8_t {

View File

@@ -87,6 +87,7 @@ func TestCodecContext(t *testing.T) {
cc4.SetColorRange(ColorRangeJpeg)
cc4.SetColorSpace(ColorSpaceBt2020Cl)
cc4.SetColorTransferCharacteristic(ColorTransferCharacteristicAribStdB67)
cc4.SetErrorRecognitionFlags(NewErrorRecognitionFlags(ErrorRecognitionFlagAggressive))
cc4.SetFlags(NewCodecContextFlags(4))
cc4.SetFlags2(NewCodecContextFlags2(5))
cc4.SetFramerate(NewRational(6, 1))
@@ -115,6 +116,7 @@ func TestCodecContext(t *testing.T) {
require.Equal(t, ColorRangeJpeg, cc4.ColorRange())
require.Equal(t, ColorSpaceBt2020Cl, cc4.ColorSpace())
require.Equal(t, ColorTransferCharacteristicAribStdB67, cc4.ColorTransferCharacteristic())
require.True(t, cc4.ErrorRecognitionFlags().Has(ErrorRecognitionFlagAggressive))
require.Equal(t, NewCodecContextFlags(4), cc4.Flags())
require.Equal(t, NewCodecContextFlags2(5), cc4.Flags2())
require.Equal(t, NewRational(6, 1), cc4.Framerate())

18
error_recognition_flag.go Normal file
View File

@@ -0,0 +1,18 @@
package astiav
//#include <libavcodec/defs.h>
import "C"
// https://ffmpeg.org/doxygen/7.0/defs_8h.html#a16258b3283a3d34c893dd9a39e29e369
type ErrorRecognitionFlag int64
const (
ErrorRecognitionFlagAggressive = ErrorRecognitionFlag(C.AV_EF_AGGRESSIVE)
ErrorRecognitionFlagBitstream = ErrorRecognitionFlag(C.AV_EF_BITSTREAM)
ErrorRecognitionFlagBuffer = ErrorRecognitionFlag(C.AV_EF_BUFFER)
ErrorRecognitionFlagCareful = ErrorRecognitionFlag(C.AV_EF_CAREFUL)
ErrorRecognitionFlagCompliant = ErrorRecognitionFlag(C.AV_EF_COMPLIANT)
ErrorRecognitionFlagCRCCheck = ErrorRecognitionFlag(C.AV_EF_CRCCHECK)
ErrorRecognitionFlagExplode = ErrorRecognitionFlag(C.AV_EF_EXPLODE)
ErrorRecognitionFlagIgnoreErr = ErrorRecognitionFlag(C.AV_EF_IGNORE_ERR)
)

View File

@@ -145,6 +145,26 @@ func (fs DispositionFlags) Del(f DispositionFlag) DispositionFlags {
func (fs DispositionFlags) Has(f DispositionFlag) bool { return astikit.BitFlags(fs).Has(uint64(f)) }
type ErrorRecognitionFlags astikit.BitFlags
func NewErrorRecognitionFlags(fs ...ErrorRecognitionFlag) ErrorRecognitionFlags {
o := ErrorRecognitionFlags(0)
for _, f := range fs {
o = o.Add(f)
}
return o
}
func (fs ErrorRecognitionFlags) Add(f ErrorRecognitionFlag) ErrorRecognitionFlags {
return ErrorRecognitionFlags(astikit.BitFlags(fs).Add(uint64(f)))
}
func (fs ErrorRecognitionFlags) Del(f ErrorRecognitionFlag) ErrorRecognitionFlags {
return ErrorRecognitionFlags(astikit.BitFlags(fs).Del(uint64(f)))
}
func (fs ErrorRecognitionFlags) Has(f ErrorRecognitionFlag) bool { return astikit.BitFlags(fs).Has(uint64(f)) }
type FilterFlags astikit.BitFlags
func NewFilterFlags(fs ...FilterFlag) FilterFlags {

View File

@@ -69,6 +69,15 @@ func TestDispositionFlags(t *testing.T) {
require.False(t, fs.Has(DispositionFlag(2)))
}
func TestErrorRecognitionFlags(t *testing.T) {
fs := NewErrorRecognitionFlags(ErrorRecognitionFlag(1))
require.True(t, fs.Has(ErrorRecognitionFlag(1)))
fs = fs.Add(ErrorRecognitionFlag(2))
require.True(t, fs.Has(ErrorRecognitionFlag(2)))
fs = fs.Del(ErrorRecognitionFlag(2))
require.False(t, fs.Has(ErrorRecognitionFlag(2)))
}
func TestFilterFlags(t *testing.T) {
fs := NewFilterFlags(FilterFlag(1))
require.True(t, fs.Has(FilterFlag(1)))

View File

@@ -21,6 +21,7 @@ var list = []listItem{
{Name: "CodecHardwareConfigMethod"},
{Name: "Dictionary"},
{Name: "Disposition"},
{Name: "ErrorRecognition"},
{Name: "Filter"},
{Name: "FilterCommand"},
{Name: "FormatContext"},