/
cover_art.go
50 lines (44 loc) · 1.11 KB
/
cover_art.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package thumbnailer
// #include "cover_art.h"
import "C"
import (
"bytes"
"image"
"unsafe"
)
// HasCoverArt return whether file has cover art in it
func (c *FFContext) HasCoverArt() bool {
return C.find_cover_art(c.avFormatCtx) != -1
}
// CoverArt extracts any attached image
func (c *FFContext) CoverArt() []byte {
img := C.retrieve_cover_art(c.avFormatCtx)
if img.size <= 0 || img.data == nil {
return nil
}
defer C.free(unsafe.Pointer(img.data))
return copyCBuffer(C.struct_Buffer{
data: img.data,
size: C.size_t(img.size),
})
}
func processCoverArt(buf []byte, opts Options) (thumb image.Image, err error) {
// Accept anything processable for cover art
opts.AcceptedMimeTypes = nil
_, thumb, err = Process(bytes.NewReader(buf), opts)
// Propagate allowed failure errors for retry on the container itself
// and wrap all other errors.
switch err {
case nil:
case ErrTooWide, ErrTooTall, ErrCantThumbnail, ErrGetFrame:
err = ErrCantThumbnail
default:
switch err.(type) {
case ErrUnsupportedMIME, ErrInvalidImage:
err = ErrCantThumbnail
default:
err = ErrCoverArt{err}
}
}
return
}