Skip to content

Commit

Permalink
Check if the frame is writable before copyPlanes (#84)
Browse files Browse the repository at this point in the history
* check if the frame is writable before copyPlanes

* apply review

* make f2 writable
  • Loading branch information
kurochan authored and asticode committed Oct 23, 2024
1 parent 3e82d1a commit 308910a
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
11 changes: 8 additions & 3 deletions frame_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,12 @@ func (f *frameDataFrame) bytes(align int) ([]byte, error) {
return nil, errors.New("astiav: frame type not implemented")
}

func (f *frameDataFrame) copyPlanes(ps []frameDataPlane) (err error) {
func (f *frameDataFrame) copyPlanes(ps []frameDataPlane) error {
// Check writability
if !f.f.IsWritable() {
return errors.New("astiav: frame is not writable")
}

switch {
// Video
case f.height() > 0 && f.width() > 0:
Expand All @@ -300,9 +305,9 @@ func (f *frameDataFrame) copyPlanes(ps []frameDataPlane) (err error) {

// Copy image
C.av_image_copy(&f.f.c.data[0], &f.f.c.linesize[0], &cdata[0], &clinesizes[0], (C.enum_AVPixelFormat)(f.f.c.format), f.f.c.width, f.f.c.height)
return
return nil
}
return
return nil
}

func (f *frameDataFrame) height() int {
Expand Down
9 changes: 9 additions & 0 deletions frame_data_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -518,5 +518,14 @@ func TestFrameData(t *testing.T) {
require.NoError(t, err)
b9 := []byte(fmt.Sprintf("%+v", b8))
require.Equal(t, b3, b9)

f3 := AllocFrame()
defer f3.Free()
require.NoError(t, f3.Ref(f2))
require.Error(t, fd2.FromImage(i1))
require.Error(t, fd2.SetBytes(b1, align))
f2.MakeWritable()
require.NoError(t, fd2.FromImage(i1))
require.NoError(t, fd2.SetBytes(b1, align))
}
}

0 comments on commit 308910a

Please sign in to comment.