diff --git a/ffmpeg/ffmpeg_test.go b/ffmpeg/ffmpeg_test.go new file mode 100644 index 0000000..40e7223 --- /dev/null +++ b/ffmpeg/ffmpeg_test.go @@ -0,0 +1,74 @@ +package ffmpeg + +import ( + "context" + "encoding/json" + "github.com/cshum/imagor/vips" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "os" + "reflect" + "testing" +) + +var files = []struct { + file string +}{ + {file: "everybody-betray-me.mkv"}, + {file: "alpha-webm.webm"}, + {file: "schizo.flv"}, + {file: "macabre.mp4"}, + {file: "schizo_0.mp4"}, + {file: "schizo_90.mp4"}, + {file: "schizo_180.mp4"}, + {file: "schizo_270.mp4"}, +} + +var baseDir = "../testdata/" + +func TestAVContextMeta(t *testing.T) { + vips.Startup(nil) + require.NoError(t, os.MkdirAll(baseDir+"golden/meta", 0755)) + require.NoError(t, os.MkdirAll(baseDir+"golden/result", 0755)) + t.Parallel() + for _, tt := range files { + t.Run(tt.file, func(t *testing.T) { + ctx := context.Background() + path := baseDir + tt.file + reader, err := os.Open(path) + require.NoError(t, err) + stats, err := os.Stat(path) + require.NoError(t, err) + av, err := LoadAVContext(ctx, reader, stats.Size()) + require.NoError(t, err) + + meta := av.Metadata() + metaBuf, err := json.Marshal(meta) + require.NoError(t, err) + goldenFile := baseDir + "golden/meta/" + tt.file + ".meta.json" + if curr, err := os.ReadFile(goldenFile); err == nil { + assert.Equal(t, string(curr), string(metaBuf)) + } else { + require.NoError(t, os.WriteFile(goldenFile, metaBuf, 0666)) + } + + buf, err := av.Export() + require.NoError(t, err) + bands := 3 + if meta.HasAlpha { + bands = 4 + } + img, err := vips.LoadImageFromMemory(buf, meta.Width, meta.Height, bands) + require.NoError(t, err) + buf, err = img.ExportJpeg(nil) + require.NoError(t, err) + goldenFile = baseDir + "golden/result/" + tt.file + ".jpg" + if curr, err := os.ReadFile(goldenFile); err == nil { + assert.True(t, reflect.DeepEqual(curr, buf)) + } else { + require.NoError(t, os.WriteFile(goldenFile, buf, 0666)) + } + + }) + } +} diff --git a/testdata/alpha-webm.webm b/testdata/alpha-webm.webm new file mode 100644 index 0000000..add19f2 Binary files /dev/null and b/testdata/alpha-webm.webm differ diff --git a/testdata/everybody-betray-me.mkv b/testdata/everybody-betray-me.mkv new file mode 100644 index 0000000..3e58df8 Binary files /dev/null and b/testdata/everybody-betray-me.mkv differ diff --git a/testdata/golden/meta/alpha-webm.webm.meta.json b/testdata/golden/meta/alpha-webm.webm.meta.json new file mode 100644 index 0000000..a10a0e9 --- /dev/null +++ b/testdata/golden/meta/alpha-webm.webm.meta.json @@ -0,0 +1 @@ +{"orientation":1,"duration":12040000000,"width":720,"height":576,"has_video":true,"has_audio":false,"has_alpha":true} \ No newline at end of file diff --git a/testdata/golden/meta/everybody-betray-me.mkv.meta.json b/testdata/golden/meta/everybody-betray-me.mkv.meta.json new file mode 100644 index 0000000..d64a578 --- /dev/null +++ b/testdata/golden/meta/everybody-betray-me.mkv.meta.json @@ -0,0 +1 @@ +{"orientation":1,"duration":7407000000,"width":640,"height":480,"has_video":true,"has_audio":true,"has_alpha":false} \ No newline at end of file diff --git a/testdata/golden/meta/macabre.mp4.meta.json b/testdata/golden/meta/macabre.mp4.meta.json new file mode 100644 index 0000000..63fac20 --- /dev/null +++ b/testdata/golden/meta/macabre.mp4.meta.json @@ -0,0 +1 @@ +{"orientation":1,"duration":3925000000,"width":492,"height":360,"has_video":true,"has_audio":true,"has_alpha":false} \ No newline at end of file diff --git a/testdata/golden/meta/schizo.flv.meta.json b/testdata/golden/meta/schizo.flv.meta.json new file mode 100644 index 0000000..33cb162 --- /dev/null +++ b/testdata/golden/meta/schizo.flv.meta.json @@ -0,0 +1 @@ +{"orientation":1,"duration":2560000000,"width":480,"height":360,"has_video":true,"has_audio":true,"has_alpha":false} \ No newline at end of file diff --git a/testdata/golden/meta/schizo_0.mp4.meta.json b/testdata/golden/meta/schizo_0.mp4.meta.json new file mode 100644 index 0000000..11ac160 --- /dev/null +++ b/testdata/golden/meta/schizo_0.mp4.meta.json @@ -0,0 +1 @@ +{"orientation":1,"duration":2544000000,"width":480,"height":360,"has_video":true,"has_audio":true,"has_alpha":false} \ No newline at end of file diff --git a/testdata/golden/meta/schizo_180.mp4.meta.json b/testdata/golden/meta/schizo_180.mp4.meta.json new file mode 100644 index 0000000..4a2c30f --- /dev/null +++ b/testdata/golden/meta/schizo_180.mp4.meta.json @@ -0,0 +1 @@ +{"orientation":3,"duration":2544000000,"width":480,"height":360,"has_video":true,"has_audio":true,"has_alpha":false} \ No newline at end of file diff --git a/testdata/golden/meta/schizo_270.mp4.meta.json b/testdata/golden/meta/schizo_270.mp4.meta.json new file mode 100644 index 0000000..c6dc90f --- /dev/null +++ b/testdata/golden/meta/schizo_270.mp4.meta.json @@ -0,0 +1 @@ +{"orientation":6,"duration":2544000000,"width":360,"height":480,"has_video":true,"has_audio":true,"has_alpha":false} \ No newline at end of file diff --git a/testdata/golden/meta/schizo_90.mp4.meta.json b/testdata/golden/meta/schizo_90.mp4.meta.json new file mode 100644 index 0000000..ce6a96e --- /dev/null +++ b/testdata/golden/meta/schizo_90.mp4.meta.json @@ -0,0 +1 @@ +{"orientation":8,"duration":2544000000,"width":360,"height":480,"has_video":true,"has_audio":true,"has_alpha":false} \ No newline at end of file diff --git a/testdata/golden/result/alpha-webm.webm.jpg b/testdata/golden/result/alpha-webm.webm.jpg new file mode 100644 index 0000000..d887ab1 Binary files /dev/null and b/testdata/golden/result/alpha-webm.webm.jpg differ diff --git a/testdata/golden/result/everybody-betray-me.mkv.jpg b/testdata/golden/result/everybody-betray-me.mkv.jpg new file mode 100644 index 0000000..02a94a0 Binary files /dev/null and b/testdata/golden/result/everybody-betray-me.mkv.jpg differ diff --git a/testdata/golden/result/macabre.mp4.jpg b/testdata/golden/result/macabre.mp4.jpg new file mode 100644 index 0000000..4b4a16d Binary files /dev/null and b/testdata/golden/result/macabre.mp4.jpg differ diff --git a/testdata/golden/result/schizo.flv.jpg b/testdata/golden/result/schizo.flv.jpg new file mode 100644 index 0000000..895b026 Binary files /dev/null and b/testdata/golden/result/schizo.flv.jpg differ diff --git a/testdata/golden/result/schizo_0.mp4.jpg b/testdata/golden/result/schizo_0.mp4.jpg new file mode 100644 index 0000000..bde6e23 Binary files /dev/null and b/testdata/golden/result/schizo_0.mp4.jpg differ diff --git a/testdata/golden/result/schizo_180.mp4.jpg b/testdata/golden/result/schizo_180.mp4.jpg new file mode 100644 index 0000000..de2ac07 Binary files /dev/null and b/testdata/golden/result/schizo_180.mp4.jpg differ diff --git a/testdata/golden/result/schizo_270.mp4.jpg b/testdata/golden/result/schizo_270.mp4.jpg new file mode 100644 index 0000000..8ac4052 Binary files /dev/null and b/testdata/golden/result/schizo_270.mp4.jpg differ diff --git a/testdata/golden/result/schizo_90.mp4.jpg b/testdata/golden/result/schizo_90.mp4.jpg new file mode 100644 index 0000000..6a96a5f Binary files /dev/null and b/testdata/golden/result/schizo_90.mp4.jpg differ diff --git a/testdata/macabre.mp4 b/testdata/macabre.mp4 new file mode 100644 index 0000000..0177b9c Binary files /dev/null and b/testdata/macabre.mp4 differ diff --git a/testdata/schizo.flv b/testdata/schizo.flv new file mode 100644 index 0000000..2e3efa1 Binary files /dev/null and b/testdata/schizo.flv differ diff --git a/testdata/schizo_0.mp4 b/testdata/schizo_0.mp4 new file mode 100644 index 0000000..2047fc8 Binary files /dev/null and b/testdata/schizo_0.mp4 differ diff --git a/testdata/schizo_180.mp4 b/testdata/schizo_180.mp4 new file mode 100644 index 0000000..7ae8a74 Binary files /dev/null and b/testdata/schizo_180.mp4 differ diff --git a/testdata/schizo_270.mp4 b/testdata/schizo_270.mp4 new file mode 100644 index 0000000..1b6450e Binary files /dev/null and b/testdata/schizo_270.mp4 differ diff --git a/testdata/schizo_90.mp4 b/testdata/schizo_90.mp4 new file mode 100644 index 0000000..b110972 Binary files /dev/null and b/testdata/schizo_90.mp4 differ