• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

asticode / go-astiav / 13874473782

15 Mar 2025 04:05PM UTC coverage: 87.161% (+0.3%) from 86.878%
13874473782

push

github

asticode
Refactored frame/packet side data + added regions of interest to frame side data

96 of 98 new or added lines in 5 files covered. (97.96%)

2960 of 3396 relevant lines covered (87.16%)

54.75 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.74
/frame_side_data.go
1
package astiav
2

3
//#include <libavutil/frame.h>
4
//#include "frame_side_data.h"
5
import "C"
6
import (
7
        "errors"
8
        "math"
9
        "unsafe"
10
)
11

12
// https://ffmpeg.org/doxygen/7.0/structAVFrameSideData.html
13
// https://ffmpeg.org/doxygen/7.0/group__lavu__frame.html#gae01fa7e427274293aacdf2adc17076bc
14
type FrameSideData struct {
15
        sd   ***C.AVFrameSideData
16
        size *C.int
17
}
18

19
func newFrameSideDataFromC(sd ***C.AVFrameSideData, size *C.int) *FrameSideData {
6✔
20
        return &FrameSideData{
6✔
21
                sd:   sd,
6✔
22
                size: size,
6✔
23
        }
6✔
24
}
6✔
25

26
// https://ffmpeg.org/doxygen/7.0/group__lavu__frame.html#ggae01fa7e427274293aacdf2adc17076bcaf525ec92d2c5a78d44950bc3f29972aa
27
func (d *FrameSideData) RegionsOfInterest() *frameSideDataRegionsOfInterest {
15✔
28
        return newFrameSideDataRegionsOfInterest(d)
15✔
29
}
15✔
30

31
type frameSideDataRegionsOfInterest struct {
32
        d *FrameSideData
33
}
34

35
func newFrameSideDataRegionsOfInterest(d *FrameSideData) *frameSideDataRegionsOfInterest {
15✔
36
        return &frameSideDataRegionsOfInterest{d: d}
15✔
37
}
15✔
38

39
func (d *frameSideDataRegionsOfInterest) data(sd *C.AVFrameSideData) *[(math.MaxInt32 - 1) / C.sizeof_AVRegionOfInterest]C.AVRegionOfInterest {
12✔
40
        return (*[(math.MaxInt32 - 1) / C.sizeof_AVRegionOfInterest](C.AVRegionOfInterest))(unsafe.Pointer(C.astiavConvertRegionsOfInterestFrameSideData(sd)))
12✔
41
}
12✔
42

43
func (d *frameSideDataRegionsOfInterest) Add(rois []RegionOfInterest) error {
6✔
44
        sd := C.av_frame_side_data_new(d.d.sd, d.d.size, C.AV_FRAME_DATA_REGIONS_OF_INTEREST, C.size_t(C.sizeof_AVRegionOfInterest*len(rois)), 0)
6✔
45
        if sd == nil {
6✔
NEW
46
                return errors.New("astiav: nil pointer")
×
NEW
47
        }
×
48

49
        crois := d.data(sd)
6✔
50
        for i, roi := range rois {
18✔
51
                crois[i].bottom = C.int(roi.Bottom)
12✔
52
                crois[i].left = C.int(roi.Left)
12✔
53
                crois[i].qoffset = roi.QuantisationOffset.c
12✔
54
                crois[i].right = C.int(roi.Right)
12✔
55
                crois[i].self_size = C.sizeof_AVRegionOfInterest
12✔
56
                crois[i].top = C.int(roi.Top)
12✔
57
        }
12✔
58
        return nil
6✔
59
}
60

61
func (d *frameSideDataRegionsOfInterest) Get() ([]RegionOfInterest, error) {
9✔
62
        sd := C.av_frame_side_data_get(*d.d.sd, *d.d.size, C.AV_FRAME_DATA_REGIONS_OF_INTEREST)
9✔
63
        if sd == nil {
12✔
64
                return nil, nil
3✔
65
        }
3✔
66

67
        crois := d.data(sd)
6✔
68
        rois := make([]RegionOfInterest, int(sd.size/C.sizeof_AVRegionOfInterest))
6✔
69
        for i := range rois {
18✔
70
                rois[i] = RegionOfInterest{
12✔
71
                        Bottom:             int(crois[i].bottom),
12✔
72
                        Left:               int(crois[i].left),
12✔
73
                        QuantisationOffset: newRationalFromC(crois[i].qoffset),
12✔
74
                        Right:              int(crois[i].right),
12✔
75
                        Top:                int(crois[i].top),
12✔
76
                }
12✔
77
        }
12✔
78
        return rois, nil
6✔
79
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc