diff --git a/go.mod b/go.mod index 6ff131a..d7d199d 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/cshum/imagorvideo go 1.18 require ( - github.com/cshum/imagor v1.1.10-0.20221010125033-19ba144615af + github.com/cshum/imagor v1.1.10-0.20221011084155-100ed56d3c84 github.com/gabriel-vasile/mimetype v1.4.1 github.com/stretchr/testify v1.8.0 go.uber.org/zap v1.23.0 @@ -14,7 +14,7 @@ require ( cloud.google.com/go/compute v1.7.0 // indirect cloud.google.com/go/iam v0.3.0 // indirect cloud.google.com/go/storage v1.27.0 // indirect - github.com/aws/aws-sdk-go v1.44.106 // indirect + github.com/aws/aws-sdk-go v1.44.114 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect diff --git a/go.sum b/go.sum index 72d43e7..20b5f37 100644 --- a/go.sum +++ b/go.sum @@ -66,8 +66,8 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 h1:iW0a5ljuFxkLGPNem5Ui+KBjFJzKg4Fv2fnxe4dvzpM= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aws/aws-sdk-go v1.44.106 h1:FzINxRGt0gAzz01ixtKfkjiDOnnpd/uNbstW/qPW2QE= -github.com/aws/aws-sdk-go v1.44.106/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.114 h1:plIkWc/RsHr3DXBj4MEw9sEW4CcL/e2ryokc+CKyq1I= +github.com/aws/aws-sdk-go v1.44.114/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -85,8 +85,8 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cshum/imagor v1.1.10-0.20221010125033-19ba144615af h1:56ja1GAbhJ4AFDfnxQawcdAl1Ni010WOtdylJWOwD00= -github.com/cshum/imagor v1.1.10-0.20221010125033-19ba144615af/go.mod h1:7DEd2qtXj469uYoAj5SskR7GZKzwFowIhqYw/x3tlM4= +github.com/cshum/imagor v1.1.10-0.20221011084155-100ed56d3c84 h1:MQSxty/I5LxE3LXWbm9gUhI9UqusQVB3Sr2wCef2nzA= +github.com/cshum/imagor v1.1.10-0.20221011084155-100ed56d3c84/go.mod h1:6HJX2R4KlDkAtjXgWI42k1efPYRV179Ud4K7RTI0OMo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/processor.go b/processor.go index d44ad86..66c848b 100644 --- a/processor.go +++ b/processor.go @@ -8,7 +8,6 @@ import ( "github.com/gabriel-vasile/mimetype" "go.uber.org/zap" "io" - "os" "strings" ) @@ -78,48 +77,40 @@ func (p *Processor) Process(ctx context.Context, in *imagor.Blob, params imagorp out = in return } - var reader io.ReadCloser + var r io.ReadCloser + var rs io.ReadSeekCloser var size int64 switch mime { case "video/webm", "video/x-matroska": // media types that does not require seek - if reader, size, err = in.NewReader(); err != nil { + if r, size, err = in.NewReader(); err != nil { return } - default: - reader, size, err = in.NewReadSeeker() + if size <= 0 { + // size must be known + _ = r.Close() + r = nil + } } - if reader == nil || size <= 0 { - // write to temp file if read seeker not available or size unknown - if reader == nil { - if reader, _, err = in.NewReader(); err != nil { - return - } - } - var file *os.File - if file, err = os.CreateTemp("", "imagor-"); err != nil { - return - } - var filename = file.Name() - defer func() { - _ = os.Remove(filename) - p.Logger.Debug("cleanup", zap.String("file", filename)) - }() - if size, err = io.Copy(file, reader); err != nil { - return - } - p.Logger.Debug("temp", - zap.String("file", filename), - zap.Int64("size", size)) - _ = file.Close() - if reader, err = os.Open(filename); err != nil { + if r == nil { + if rs, size, err = in.NewReadSeeker(); err != nil { return } + r = rs } defer func() { - _ = reader.Close() + _ = r.Close() }() - av, err := ffmpeg.LoadAVContext(ctx, reader, size) + if size <= 0 && rs != nil { + // size must be known + if size, err = rs.Seek(0, io.SeekEnd); err != nil { + return + } + if _, err = rs.Seek(0, io.SeekStart); err != nil { + return + } + } + av, err := ffmpeg.LoadAVContext(ctx, r, size) if err != nil { return }