Removed args from NewXXXFilterContext()

This commit is contained in:
Quentin Renard
2024-12-19 17:18:09 +01:00
parent bb96c18192
commit 2025e88729
3 changed files with 36 additions and 27 deletions

2
go.mod
View File

@@ -3,7 +3,7 @@ module github.com/asticode/go-astiencoder
go 1.13
require (
github.com/asticode/go-astiav v0.27.0
github.com/asticode/go-astiav v0.29.0
github.com/asticode/go-astikit v0.42.0
github.com/shirou/gopsutil/v3 v3.21.10
github.com/stretchr/testify v1.7.0

4
go.sum
View File

@@ -1,7 +1,7 @@
github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8=
github.com/asticode/go-astiav v0.27.0 h1:DBOEEhCzBcBWiycxMdmA6+ENUoLLGAjjXqPgy7pGuQI=
github.com/asticode/go-astiav v0.27.0/go.mod h1:K7D8UC6GeQt85FUxk2KVwYxHnotrxuEnp5evkkudc2s=
github.com/asticode/go-astiav v0.29.0 h1:6HsG9SQFV7NKQX+60VQfwlENkpbXZudEcys72k5WdcY=
github.com/asticode/go-astiav v0.29.0/go.mod h1:K7D8UC6GeQt85FUxk2KVwYxHnotrxuEnp5evkkudc2s=
github.com/asticode/go-astikit v0.42.0 h1:pnir/2KLUSr0527Tv908iAH6EGYYrYta132vvjXsH5w=
github.com/asticode/go-astikit v0.42.0/go.mod h1:h4ly7idim1tNhaVkdVBeXQZEE3L0xblP7fCWbgwipF0=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=

View File

@@ -4,7 +4,6 @@ import (
"context"
"errors"
"fmt"
"strconv"
"strings"
"sync/atomic"
"time"
@@ -60,9 +59,9 @@ type filtererFrameHandler interface {
}
type filtererInput struct {
ctx Context
buffersrcContexts []*astiav.BuffersrcFilterContext
name string
ctx Context
buffersrcCtxs []*astiav.BuffersrcFilterContext
name string
}
type filtererItem struct {
@@ -266,7 +265,7 @@ func (f *Filterer) createGraph(ctxs map[astiencoder.Node]Context) (err error) {
// Create buffersink context
var buffersinkContext *astiav.BuffersinkFilterContext
if buffersinkContext, err = g.NewBuffersinkFilterContext(buffersink, "out", nil); err != nil {
if buffersinkContext, err = g.NewBuffersinkFilterContext(buffersink, "out"); err != nil {
err = fmt.Errorf("astilibav: creating buffersink context failed: %w", err)
return
}
@@ -312,25 +311,23 @@ func (f *Filterer) createGraph(ctxs map[astiencoder.Node]Context) (err error) {
return
}
// Create args
var args astiav.FilterArgs
// Create buffersrc context parameters
buffersrcCtxParameters := astiav.AllocBuffersrcFilterContextParameters()
defer buffersrcCtxParameters.Free()
switch ctx.MediaType {
case astiav.MediaTypeAudio:
args = astiav.FilterArgs{
"channel_layout": ctx.ChannelLayout.String(),
"sample_fmt": ctx.SampleFormat.String(),
"sample_rate": strconv.Itoa(ctx.SampleRate),
"time_base": ctx.TimeBase.String(),
}
buffersrcCtxParameters.SetChannelLayout(ctx.ChannelLayout)
buffersrcCtxParameters.SetSampleFormat(ctx.SampleFormat)
buffersrcCtxParameters.SetSampleRate(ctx.SampleRate)
buffersrcCtxParameters.SetTimeBase(ctx.TimeBase)
case astiav.MediaTypeVideo:
args = astiav.FilterArgs{
"pix_fmt": strconv.Itoa(int(ctx.PixelFormat)),
"pixel_aspect": ctx.SampleAspectRatio.String(),
"time_base": ctx.TimeBase.String(),
"video_size": strconv.Itoa(ctx.Width) + "x" + strconv.Itoa(ctx.Height),
}
buffersrcCtxParameters.SetHeight(ctx.Height)
buffersrcCtxParameters.SetPixelFormat(ctx.PixelFormat)
buffersrcCtxParameters.SetSampleAspectRatio(ctx.SampleAspectRatio)
buffersrcCtxParameters.SetTimeBase(ctx.TimeBase)
buffersrcCtxParameters.SetWidth(ctx.Width)
if ctx.FrameRate.Num() > 0 {
args["frame_rate"] = ctx.FrameRate.String()
buffersrcCtxParameters.SetFramerate(ctx.FrameRate)
}
default:
err = fmt.Errorf("astilibav: media type %s is not handled by filterer", ctx.MediaType)
@@ -339,7 +336,7 @@ func (f *Filterer) createGraph(ctxs map[astiencoder.Node]Context) (err error) {
// Create buffersrc ctx
var buffersrcCtx *astiav.BuffersrcFilterContext
if buffersrcCtx, err = g.NewBuffersrcFilterContext(buffersrc, "in", args); err != nil {
if buffersrcCtx, err = g.NewBuffersrcFilterContext(buffersrc, "in"); err != nil {
err = fmt.Errorf("astilibav: creating buffersrc context failed: %w", err)
return
}
@@ -347,6 +344,18 @@ func (f *Filterer) createGraph(ctxs map[astiencoder.Node]Context) (err error) {
// Make sure buffersrc context is freed
c.Add(buffersrcCtx.FilterContext().Free)
// Set buffersrc context parameters
if err = buffersrcCtx.SetParameters(buffersrcCtxParameters); err != nil {
err = fmt.Errorf("main: setting buffersrc context parameters failed: %w", err)
return
}
// Initialize buffersrc context
if err = buffersrcCtx.Initialize(); err != nil {
err = fmt.Errorf("main: initializing buffersrc context failed: %w", err)
return
}
// Create outputs
o := astiav.AllocFilterInOut()
o.SetName(i.name)
@@ -385,7 +394,7 @@ func (f *Filterer) createGraph(ctxs map[astiencoder.Node]Context) (err error) {
f.buffersinkContext = buffersinkContext
for _, u := range inputUpdates {
u.i.ctx = u.ctx
u.i.buffersrcContexts = u.ctxs
u.i.buffersrcCtxs = u.ctxs
}
f.g = g
f.gc = c
@@ -596,9 +605,9 @@ func (f *Filterer) HandleFrame(p FrameHandlerPayload) {
// Loop through frames to add
for _, v := range framesToAdd {
// Loop through buffer ctxs
for _, buffersrcContext := range v.i.buffersrcContexts {
for _, buffersrcCtx := range v.i.buffersrcCtxs {
// Add frame
if err := buffersrcContext.AddFrame(v.f, astiav.NewBuffersrcFlags(astiav.BuffersrcFlagKeepRef)); err != nil {
if err := buffersrcCtx.AddFrame(v.f, astiav.NewBuffersrcFlags(astiav.BuffersrcFlagKeepRef)); err != nil {
// TODO Fill intput frame when frame handler strategy is pts?
emitError(f, f.eh, err, "adding frame to buffersrc")
continue