Skip to content

Commit

Permalink
IOInterrupter is now a struct
Browse files Browse the repository at this point in the history
  • Loading branch information
asticode committed Dec 11, 2024
1 parent 8bf2b04 commit a29844a
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 20 deletions.
1 change: 1 addition & 0 deletions BREAKING_CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

- `CodecParameters`.`CodecType` and `CodecParameters`.`SetCodecType` have been removed, use `CodecParameters`.`MediaType` and `CodecParameters`.`SetMediaType` instead
- `HardwareFrameContext`.`SetPixelFormat` has been replaced with `HardwareFrameContext`.`SetHardwarePixelFormat`
- `FormatContext`.`SetInterruptCallback` has been replaced with `FormatContext`.`SetIOInterrupter`

# v0.24.0

Expand Down
10 changes: 6 additions & 4 deletions format_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,12 @@ func (fc *FormatContext) SetFlags(f FormatContextFlags) {
}

// https://ffmpeg.org/doxygen/7.0/structAVFormatContext.html#a5b37acfe4024d92ee510064e80920b40
func (fc *FormatContext) SetInterruptCallback() IOInterrupter {
i := newDefaultIOInterrupter()
fc.c.interrupt_callback = i.c
return i
func (fc *FormatContext) SetIOInterrupter(i *IOInterrupter) {
if i == nil {
fc.c.interrupt_callback = C.AVIOInterruptCB{}
} else {
fc.c.interrupt_callback = i.c
}
}

// https://ffmpeg.org/doxygen/7.0/structAVFormatContext.html#a6c01f25ef062e0398b0b55dd337246ed
Expand Down
12 changes: 11 additions & 1 deletion format_context_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,19 @@ func TestFormatContext(t *testing.T) {
fc4 := AllocFormatContext()
require.NotNil(t, fc4)
defer fc4.Free()
fc4.SetInterruptCallback().Interrupt()
ii1 := NewIOInterrupter()
fc4.SetIOInterrupter(ii1)
ii1.Interrupt()
require.ErrorIs(t, fc4.OpenInput("testdata/video.mp4", nil, nil), ErrExit)

fc9 := AllocFormatContext()
require.NotNil(t, fc9)
defer fc9.Free()
ii2 := NewIOInterrupter()
fc9.SetIOInterrupter(ii2)
fc9.SetIOInterrupter(nil)
require.NoError(t, fc4.OpenInput("testdata/video.mp4", nil, nil))

fc5 := AllocFormatContext()
require.NotNil(t, fc5)
defer fc5.Free()
Expand Down
19 changes: 9 additions & 10 deletions io_interrupter.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,25 @@ package astiav
//#include "io_interrupter.h"
import "C"

type IOInterrupter interface {
Interrupt()
Resume()
}

type defaultIOInterrupter struct {
type IOInterrupter struct {
c C.AVIOInterruptCB
i C.int
}

func newDefaultIOInterrupter() *defaultIOInterrupter {
i := &defaultIOInterrupter{}
func NewIOInterrupter() *IOInterrupter {
i := &IOInterrupter{}
i.c = C.astiavNewInterruptCallback(&i.i)
return i
}

func (i *defaultIOInterrupter) Interrupt() {
func (i *IOInterrupter) Interrupt() {
i.i = 1
}

func (i *defaultIOInterrupter) Resume() {
func (i *IOInterrupter) Interrupted() bool {
return i.i == 1
}

func (i *IOInterrupter) Resume() {
i.i = 0
}
10 changes: 5 additions & 5 deletions io_interrupter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import (
"github.com/stretchr/testify/require"
)

func TestDefaultIOInterrupter(t *testing.T) {
ii := newDefaultIOInterrupter()
require.Equal(t, 0, int(ii.i))
func TestIOInterrupter(t *testing.T) {
ii := NewIOInterrupter()
require.False(t, ii.Interrupted())
ii.Interrupt()
require.Equal(t, 1, int(ii.i))
require.True(t, ii.Interrupted())
ii.Resume()
require.Equal(t, 0, int(ii.i))
require.False(t, ii.Interrupted())
}

0 comments on commit a29844a

Please sign in to comment.