Skip to content

Commit 90e3f0f

Browse files
authored
Merge pull request #40 from mutablelogic/ffmpeg71
Updated chromaprint
2 parents 11832f7 + 2145678 commit 90e3f0f

40 files changed

+565
-4969
lines changed

Makefile

Lines changed: 83 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22
GO=$(shell which go)
33
DOCKER=$(shell which docker)
44

5-
# Current ffmpeg version and config
5+
# Source version
66
FFMPEG_VERSION=ffmpeg-7.1.1
7-
# Empty variable to collect FFmpeg configuration options - will be populated dynamically
8-
FFMPEG_CONFIG=
7+
CHROMAPRINT_VERSION=chromaprint-1.5.1
98

109
# Build flags
1110
BUILD_MODULE := $(shell cat go.mod | head -1 | cut -d ' ' -f 2)
@@ -32,17 +31,17 @@ PREFIX ?= ${BUILD_DIR}/install
3231
# TARGETS
3332

3433
.PHONY: all
35-
all: clean ffinstall cli
34+
all: clean ffmpeg cli
3635

3736
.PHONY: cmds
3837
cmds: $(CMD_DIR)
3938

4039
.PHONY: cli
41-
cli: go-dep mkdir
40+
cli: go-dep go-tidy mkdir
4241
@echo Build media tool
4342
@PKG_CONFIG_PATH="$(shell realpath ${PREFIX})/lib/pkgconfig" CGO_LDFLAGS_ALLOW="-(W|D).*" ${GO} build ${BUILD_FLAGS} -o ${BUILD_DIR}/media ./cmd/media
4443

45-
$(CMD_DIR): go-dep mkdir
44+
$(CMD_DIR): go-dep go-tidy mkdir
4645
@echo Build cmd $(notdir $@)
4746
@PKG_CONFIG_PATH="$(shell realpath ${PREFIX})/lib/pkgconfig" CGO_LDFLAGS_ALLOW="-(W|D).*" ${GO} build ${BUILD_FLAGS} -o ${BUILD_DIR}/$(notdir $@) ./$@
4847

@@ -60,8 +59,8 @@ ${BUILD_DIR}/${FFMPEG_VERSION}:
6059
fi
6160

6261
# Configure ffmpeg
63-
.PHONY: ffmpeg
64-
ffmpeg: mkdir ${BUILD_DIR}/${FFMPEG_VERSION} ffmpeg-dep
62+
.PHONY: ffmpeg-configure
63+
ffmpeg-configure: mkdir ${BUILD_DIR}/${FFMPEG_VERSION} ffmpeg-dep
6564
@echo "Configuring ${FFMPEG_VERSION} => ${PREFIX}"
6665
@cd ${BUILD_DIR}/${FFMPEG_VERSION} && ./configure \
6766
--enable-static --disable-doc --disable-programs \
@@ -71,17 +70,57 @@ ffmpeg: mkdir ${BUILD_DIR}/${FFMPEG_VERSION} ffmpeg-dep
7170
--enable-gpl --enable-nonfree ${FFMPEG_CONFIG}
7271

7372
# Build ffmpeg
74-
.PHONY: ffbuild
75-
ffbuild: ffmpeg
73+
.PHONY: ffmpeg-build
74+
ffmpeg-build: ffmpeg-configure
7675
@echo "Building ${FFMPEG_VERSION}"
77-
@cd $(BUILD_DIR)/$(FFMPEG_VERSION) && make
76+
@cd $(BUILD_DIR)/$(FFMPEG_VERSION) && make -j2
7877

7978
# Install ffmpeg
80-
.PHONY: ffinstall
81-
ffinstall: ffbuild
82-
@echo "Installing ${FFMPEG_VERSION}"
79+
.PHONY: ffmpeg
80+
ffmpeg: ffmpeg-build
81+
@echo "Installing ${FFMPEG_VERSION} => ${PREFIX}"
8382
@cd $(BUILD_DIR)/$(FFMPEG_VERSION) && make install
8483

84+
###############################################################################
85+
# CHROMAPRINT
86+
87+
# Download ffmpeg sources
88+
${BUILD_DIR}/${CHROMAPRINT_VERSION}:
89+
@if [ ! -d "$(BUILD_DIR)/$(CHROMAPRINT_VERSION)" ]; then \
90+
echo "Downloading $(CHROMAPRINT_VERSION)"; \
91+
mkdir -p $(BUILD_DIR)/${CHROMAPRINT_VERSION}; \
92+
curl -L -o $(BUILD_DIR)/chromaprint.tar.gz https://github.com/acoustid/chromaprint/releases/download/v1.5.1/$(CHROMAPRINT_VERSION).tar.gz; \
93+
tar -xzf $(BUILD_DIR)/chromaprint.tar.gz -C $(BUILD_DIR); \
94+
rm -f $(BUILD_DIR)/chromaprint.tar.gz; \
95+
fi
96+
97+
98+
# Configure chromaprint
99+
.PHONY: chromaprint-configure
100+
chromaprint-configure: mkdir ${BUILD_DIR}/${CHROMAPRINT_VERSION}
101+
@echo "Configuring ${CHROMAPRINT_VERSION} => ${PREFIX}"
102+
cmake \
103+
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
104+
-DCMAKE_BUILD_TYPE=Release \
105+
-DBUILD_SHARED_LIBS=0 \
106+
-DBUILD_TESTS=0 \
107+
-DBUILD_TOOLS=0 \
108+
--install-prefix "$(shell realpath ${PREFIX})" \
109+
-S ${BUILD_DIR}/${CHROMAPRINT_VERSION} \
110+
-B ${BUILD_DIR}
111+
112+
# Build chromaprint
113+
.PHONY: chromaprint-build
114+
chromaprint-build: chromaprint-configure
115+
@echo "Building ${CHROMAPRINT_VERSION}"
116+
@cd $(BUILD_DIR) && make -j2
117+
118+
# Install chromaprint
119+
.PHONY: chromaprint
120+
chromaprint: chromaprint-build
121+
@echo "Installing ${CHROMAPRINT_VERSION} => ${PREFIX}"
122+
@cd $(BUILD_DIR) && make install
123+
85124
###############################################################################
86125
# DOCKER
87126

@@ -102,11 +141,26 @@ docker-push: docker-dep
102141
###############################################################################
103142
# TESTS
104143

105-
test: go-dep
144+
.PHONY: test
145+
test: test-ffmpeg test-chromaprint
146+
147+
.PHONY: test-chromaprint
148+
test-chromaprint: go-dep go-tidy
149+
@echo Test
150+
@echo ... test sys/chromaprint
151+
@PKG_CONFIG_PATH=$(shell realpath ${PREFIX})/lib/pkgconfig ${GO} test ./sys/chromaprint
152+
153+
.PHONY: test-ffmpeg
154+
test-ffmpeg: go-dep go-tidy
106155
@echo Test
107-
@${GO} mod tidy
108156
@echo ... test sys/ffmpeg71
109-
@PKG_CONFIG_PATH=$(shell realpath ${PREFIX})/lib/pkgconfig ${GO} test ./sys/ffmpeg71
157+
@PKG_CONFIG_PATH="$(shell realpath ${PREFIX})/lib/pkgconfig" CGO_LDFLAGS_ALLOW="-(W|D).*" ${GO} test ./sys/ffmpeg71
158+
@echo ... test pkg/segmenter
159+
@PKG_CONFIG_PATH="$(shell realpath ${PREFIX})/lib/pkgconfig" CGO_LDFLAGS_ALLOW="-(W|D).*" ${GO} test ./pkg/segmenter
160+
@echo ... test pkg/chromaprint
161+
@PKG_CONFIG_PATH="$(shell realpath ${PREFIX})/lib/pkgconfig" CGO_LDFLAGS_ALLOW="-(W|D).*" ${GO} test ./pkg/chromaprint
162+
163+
110164
# @echo ... test pkg/ffmpeg
111165
# @${GO} test -v ./pkg/ffmpeg
112166
# @echo ... test sys/chromaprint
@@ -122,7 +176,7 @@ test: go-dep
122176
# @echo ... test pkg
123177
# @${GO} test ./pkg/...
124178

125-
container-test: go-dep
179+
container-test: go-dep go-tidy
126180
@echo Test
127181
@${GO} mod tidy
128182
@${GO} test --tags=container ./sys/ffmpeg71
@@ -134,22 +188,30 @@ container-test: go-dep
134188
###############################################################################
135189
# DEPENDENCIES, ETC
136190

191+
.PHONY: go-dep
137192
go-dep:
138193
@test -f "${GO}" && test -x "${GO}" || (echo "Missing go binary" && exit 1)
139194

195+
.PHONY: docker-dep
140196
docker-dep:
141197
@test -f "${DOCKER}" && test -x "${DOCKER}" || (echo "Missing docker binary" && exit 1)
142198

199+
.PHONY: mkdir
143200
mkdir:
144201
@echo Mkdir ${BUILD_DIR}
145202
@install -d ${BUILD_DIR}
146203
@install -d ${PREFIX}
147204

148-
clean:
205+
.PHONY: go-tidy
206+
go-tidy:
207+
@echo Tidy
208+
@${GO} mod tidy
209+
210+
.PHONY: clean
211+
clean: go-tidy
149212
@echo Clean
150213
@rm -fr $(BUILD_DIR)
151-
@${GO} mod tidy
152-
@${GO} clean
214+
@${GO} clean -cache
153215

154216
# Check for FFmpeg dependencies
155217
.PHONY: ffmpeg-dep

error.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package media
2+
3+
import (
4+
"fmt"
5+
"net/http"
6+
)
7+
8+
///////////////////////////////////////////////////////////////////////////////
9+
// TYPES
10+
11+
type Err uint
12+
13+
///////////////////////////////////////////////////////////////////////////////
14+
// GLOBALS
15+
16+
const (
17+
ErrBadParameter Err = http.StatusBadRequest
18+
ErrInternalError Err = http.StatusInternalServerError
19+
)
20+
21+
///////////////////////////////////////////////////////////////////////////////
22+
// ERROR
23+
24+
func (code Err) Code() uint {
25+
return uint(code)
26+
}
27+
28+
func (code Err) Error() string {
29+
switch code {
30+
case ErrBadParameter:
31+
return "bad parameter"
32+
case ErrInternalError:
33+
return "internal error"
34+
default:
35+
return fmt.Sprintf("error code %d", code.Code())
36+
}
37+
}
38+
39+
func (code Err) With(args ...interface{}) error {
40+
return fmt.Errorf("%w: %s", code, fmt.Sprint(args...))
41+
}
42+
43+
func (code Err) Withf(format string, args ...interface{}) error {
44+
return fmt.Errorf("%w: %s", code, fmt.Sprintf(format, args...))
45+
}

etc/docker/Dockerfile

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,19 @@ WORKDIR /usr/src/app
99
COPY . .
1010

1111
# Install dependencies
12-
RUN set -x \
13-
&& apt update -y \
12+
RUN set -x && apt update -y \
1413
&& apt install -y ca-certificates lsb-release nasm curl \
1514
&& apt install -y libfreetype-dev libmp3lame-dev libopus-dev libvorbis-dev libvpx-dev libx264-dev libx265-dev libnuma-dev
1615

1716
# Build all the commands
18-
RUN set -x \
19-
&& OS=${OS} ARCH=${ARCH} make ffinstall cli
17+
RUN set -x && OS=${OS} ARCH=${ARCH} make all
2018

2119
# Copy commands to /usr/local/bin
2220
FROM --platform=${OS}/${ARCH} debian:bookworm-slim
2321
ARG OS
2422
ARG ARCH
2523
ARG SOURCE
26-
RUN set -x \
27-
&& apt update -y \
24+
RUN set -x && apt update -y \
2825
&& apt install -y ca-certificates lsb-release \
2926
&& apt install -y libfreetype-dev libmp3lame-dev libopus-dev libvorbis-dev libvpx-dev libx264-dev libx265-dev libnuma-dev
3027

pkg/chromaprint/client.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package chromaprint
22

33
import (
4+
"context"
45
"fmt"
6+
"io"
57
"net/url"
68
"time"
9+
"unsafe"
710

811
// Packages
912
"github.com/mutablelogic/go-client"
13+
"github.com/mutablelogic/go-media"
14+
"github.com/mutablelogic/go-media/pkg/segmenter"
15+
"github.com/mutablelogic/go-media/sys/chromaprint"
1016

1117
// Namespace imports
1218
. "github.com/djthorpe/go-errors"
@@ -84,3 +90,48 @@ func (c *Client) Lookup(fingerprint string, duration time.Duration, flags Meta)
8490
return response.Results, nil
8591
}
8692
}
93+
94+
////////////////////////////////////////////////////////////////////////////////
95+
// FINGERPRINT
96+
97+
// Match a media file and lookup any matches
98+
func (c *Client) Match(ctx context.Context, r io.Reader) ([]*ResponseMatch, error) {
99+
// Create a segmenter
100+
segmenter, err := segmenter.NewReader(r, 0, 32000)
101+
if err != nil {
102+
return nil, err
103+
}
104+
defer segmenter.Close()
105+
106+
// Create a fingerprinting context
107+
fp := chromaprint.NewChromaprint(chromaprint.ALGORITHM_DEFAULT)
108+
if fp == nil {
109+
return nil, media.ErrInternalError.With("chromaprint.NewChromaprint")
110+
}
111+
defer fp.Free()
112+
113+
// Start the fingerprinting
114+
if err := fp.Start(32000, 1); err != nil {
115+
return nil, err
116+
}
117+
118+
// Perform fingerprinting
119+
if err := segmenter.DecodeInt16(ctx, func(timestamp time.Duration, data []int16) error {
120+
return fp.WritePtr(uintptr(unsafe.Pointer(&data[0])), len(data))
121+
}); err != nil {
122+
return nil, err
123+
}
124+
125+
// Complete fingerprinting
126+
if err := fp.Finish(); err != nil {
127+
return nil, err
128+
}
129+
130+
value, err := fp.GetFingerprint()
131+
if err != nil {
132+
return nil, err
133+
}
134+
135+
// Lookup fingerprint
136+
return c.Lookup(value, segmenter.Duration(), META_ALL)
137+
}

pkg/chromaprint/client_test.go

Lines changed: 15 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package chromaprint_test
22

33
import (
4+
"context"
45
"os"
56
"testing"
67
"time"
@@ -22,6 +23,7 @@ const (
2223
// SAMPLE_002_FINGERPRINT = "AQAAZMmShFmSJFSEHO-O6_ARcoc-5NrRB67RvMepI1KyXOihE21KpIc95UJlCV1TEf-RH43T4RFkDU32Izx6esiJW0ctBl8EzVSQRj3OBs8Djyd-pI5R7_gEfWLQKMKnHN-OD_XBPAzRVIk-_IfWSULTnXjPgSYdBP7wDXkUaMmOcA9K5pjyGl0zwl_QG6EO7Rly41taPMuOSVd2NLWR04J-IXyGl0XTTxmeHOfw5ciZQ1WmC_mUoz8ep2iMOctRHj7RPMgF_Qifw6obOD8-Sim8XaikPUF3IzYPSQCigBElEADCAIKwMABA4gDDQhBhiGCGUUEMIgYBA4EQAgAAlFKQMACYUAIIIAgDThCgBGJIEACQIhRAhAxgCiGBkKAE"
2324
SAMPLE_003_DURATION = 230 * time.Second
2425
SAMPLE_003_FINGERPRINT = "AQADtJmSiN0U4Q6mjEN-Cf5Q5HzwGdKHUON6vLiYqziDh0j74yeuCdnz4fmF4-UxS1mFf0gVqDz8RA9yZRdeH9jzBIG7H9KPXqnw8bhRbcRD8EYdCX0uRJeMX2iu4zueIMzxfZCrC2kc5fCPYz_6G_1B3SwqxugcFVNyJHmOnMN38FFxdUOfnPCPo8ceh0ZyhTzS469Q7cPazDiynMGn43swKdCJV8F3ND1y5cFP_Ef1w1R9_MKHzsd95DuUO8XBN6isYxN-QWx0XEZ-9MvxD42PeqOE3AqqG6J8nGKOWSkXlBny46QGKj--JBEu7aCWHf8K_grS-Aqeo5kgZcmzIy8Oiwt4ScaZBz1hEo1wFx8-uEsSnPgzqcizC82kC3UOVcdz9D5SqUYWXA_-QV-Ofse5IBd-wdISGV8Y9MjxQvuPMC7IHMd7ND5uOHQRLkxWoacSaImYIWxkodkafDiYE79gZYpR94j_48KP-9CVaEPdIwyZHT_OHL0SoXGOH3_APEGYfNC7I1dm4Xs0XAGTkUH748KH8A00PQgHR2MytGPBMlci4UaYpzaSfR_6o3ny4KSMXiH8HT0uJD9i5-hy-MyEagv-TMMzJ0iPRF0YfFFMMB-aSvLx42KO8NCibaIRX8bn4x-uLD2aos-FXDj-Q7uOM-OC-7CaHfma4VuO8_AVHL4ER-TxXXiYw26MXjl62DvOI80B8cUHe6h1oUfz1fiPH3eLPkcYJseJa9zBILyGTwmhKrODMNsldP6GSmoSguKPM0eYH9Jp5Fk2FP5w8tg-Gy6R9xCZfQjp-fjxadHgpil-4eiKMF846KKR58OP9MdL6DvxJDWMy9CzC9dz5Nj4WPiRZ4GUdEe4OxquHO9wEm7wXkKZXfBzIjQVPNlRUTukJDlOPcGjLMeVZLiO8kGY58MuXPCzDFeC6znCPDySSdmPoqmDJzMu5Xjy4TwafohEBnrC9PhAjcyGB0-Sj7jDHZKeQw8-B_mc5riSw_ky_IgLM6IP2eoc5NKKH_3x7CnMiEflXMHxiNGFcgqaIke7zAmaMzd0HWeEnGiOPphvPHuQi5kUaAmj4Q9yHiWFV8Wjp_gV5Fl2aGQR5sKXhLh8_OngkU6OT0eeELpS-BeuLMGha-GwnYWe4Ed4NIlZ_A-y54eWb0f4SC7K6Ck8PnCVPOgRiloyiGMQTsLDPHhIKXgTUMIb5NOgjMiV_Wgs9MQf5E126PwQwmEYEpeYwlzkBCVx9OUQKVGS7ArkSDm0XAif4xQ-V2iYo8eFI3-gbbzQpPWQ_UT_4KiPF28kIoycQHvO4MfJI9_xDP5AHGEiPsXERBn0Hc2vozre41agLz-OPAtyGm0OC3pjbNDn4cPxFzqc48d_-DnEe6iHHz_4C_WOJpZ1qNEYoV8PJr9wQd-JR8ir4WWIRuPxpzDHIfyHh4Tm5IKrH_2LvjihiceVMNMmPBseoXmOXgp4E49b6BOOGn6GPsyIfmjqFD96-MzwDPJx4Rn-Fz-mE_ehC9eO_MGUU-gvfKOEBp2WtXhQ0RTC3EiegyePx8Fz4TPhnMcnHLHmSEGtwz_6Dvl8_MeD08NFPBlOfMzRfPjhRoerRBbCC0l4oQ-sEM-T46LReTn6D1aOSD6meILmsbiGR_Ae4-GH5kedhogp4jkKF6E04cyNi8ePP9ih69Cu_GgmKclxZrgY9HQSNFQSSzgugpGzTPDBkoemBzN1I8-HR3LRWcGXBp5oIbyWQzdC-EPfDhedIzoO7Tny9HCFHj19-Dm-XCuaJkOiqUGWqA2FnsNT8DxOhUb5g8kj4ttx3oh-yBNTXEO-C9WF7bpQXJQQpjlqPcMPrSSYnMd9jI4EWaMlNPlR9sF1NE1jlFmG_9By1MoRayGLVeEPR0xFfMLV4wqYuMQfBmmlH-Yy9EW-zXhMnEmKa6iORk_xH1mfo41owc8R1sEV_ENjhIrGEJc2DpcC8Zl4XDqu5sSVUcJZIb2CL7jkAo0nSijJoJoSHame49eh40fJ4wrCwz8-HlS08LDUC5eUCn3Qp4N_XISd4A78zDiRB46oG8ym5MWPPyE0KxqaUT6C41JoXC7KHg7R57h25KugTZGONE5atD_KM3hk_Hhy5BfEkSqydNlRPsSOK8hziPMRPkFPoQmVKHhaFQ-6f9izjAijkJDBKngO8Tke5PqCJ9vh40Z26KIQUycc8_iOa0gvWeCJh5AZwcclZRae8QnC_KiV4BSOJjy6-MGVKMuRTyzx6bgO8SGRlccXHj-xVTye5EN86IlS4StyPBsjXDn6C1cW5Dy0vMeT5EdEGj-JMNIeod6l4wkOH88R-Vhnojl6CTnEZUMeJgp-_OiP5nvwPXjE4z2OR8smNGmGNjzQM83RhMqOH59e5IOWa-iFvDr-G3-wx0WYH21_6BUu5tgnHhqTI-RjVDeYPMEnXHHx8fB6Kci1H8mL2imaZRHOGzwOa0eeQz_CPIuDXgYqanjxgkwu5HoS-BHEB3mW4RL6B58uPMT1wWmGR4mM53CO7NASHaH1YXKa4iamJ8dL5EmTQ1-b4DsiPTp-RPsObUkiXHyCw3F26DGJXDyKZg8-HscvNBN1Ixz9Qv-E8Hnwo1ZwxsH3I8yTFFrHIDvT4zx-oTnRHzwAYBQVyDkjAGAMAKWIEQYAsBBADAgCjCCEEGYMAIIBYYwlFCCAJBCCEIMIEYYYZA0gDAAkhBJyC0IsQ4JMIxAxxkFkCHCCEAQIEAwAQoWQHCEFgBAEIKWEJUAwxBAQRAogjDDICsMQIEQBpJgBChhDnECEMCiAIs54IQmRlhghgRHEMAccMwIQwoikAADHFBPSAC8IEcgYghBgxAEAKBCGASCYERBgZJAARDBgJDEKEGyIYAQBAZQ0wAhBABMCSGIIE8IIoQjUhEijnEEEACUoEAZRQgRCAECCACOKEiGQEgIAQYQZxBADEREEGIaYAEACZAEgEAhACAJECQIJMIIwBIAwHBDCABAGKCSYIEoQIEQSCBiGGAAGAaaEAUYIJgQAQ3kgiAKSGMGAIYJYhAwUggFBhAEAEcMAAoQIZIEAQghBDCHMACWIQoQaAQRiQAFDnAAGCgAI1A5AAQESxAIGlDCCAKCogMcIQYBkSABhGFEAKScc4sBoxIAwykjrGHCAECAQEE4BRARxAhnghMKMMA2MAIo4AAgAAjDIkAEAAYKAQAAIJhCyDClijEIOACOkIIIBwoxoECEjBHEGCYEQQIIoyaWTRADECALCQAmMIwIIoAgSABlAjEHGAUGEQAIpYgCSQgADjGJEACKEEQAqoQwRwkFFqFAECuEUccwAhABhjCAiiGDMKGIIAEgIYKADgAFClBGIEUMAEUAIZQBCFlAEiABKKIcQYFIgD4AxoBhAIJJCAEAYAwwpA4VBxhgkkEfAGAUMOcI4MTRThCARjISAAGCUUwIAhBwTSBlFCETAIEYSMsIAwQBAQBBhAECWOgmBMAAxYIAVgDDjiAFCCCGUE4oBBCRAADmBgBAAAUIUNEAQA4AhwBCEmEOIGGAAYcYAJAhAQjCCDAWQgAGE4QIARARhjAACwCBGMGCIBAQQIAxjTAkAiACMGUWoBQ"
26+
SAMPLE_004_FILE = "../../etc/test/sample.mp4"
2527
)
2628

2729
////////////////////////////////////////////////////////////////////////////////
@@ -73,43 +75,21 @@ func Test_client_003(t *testing.T) {
7375
t.Log(matches)
7476
}
7577

76-
/*
77-
func Test_Client_004(t *testing.T) {
78-
key := os.Getenv("CHROMAPRINT_KEY")
79-
if key == "" {
80-
t.Skip("No API key set, set using environment variable CHROMAPRINT_KEY")
81-
}
82-
client, err := NewClientWithConfig(Config{Key: key})
83-
if err != nil {
84-
t.Fatal(err)
85-
}
86-
87-
if matches, err := client.Lookup(SAMPLE_002_FINGERPRINT, SAMPLE_002_DURATION, META_ALL); err != nil {
88-
t.Error(err)
89-
} else if len(matches) == 0 {
90-
t.Error("No matches")
91-
} else {
92-
t.Log(matches)
78+
func Test_client_004(t *testing.T) {
79+
assert := assert.New(t)
80+
client, err := NewClient(GetKey(t))
81+
if !assert.NoError(err) {
82+
t.SkipNow()
9383
}
94-
}
9584

96-
func Test_Client_005(t *testing.T) {
97-
key := os.Getenv("CHROMAPRINT_KEY")
98-
if key == "" {
99-
t.Skip("No API key set, set using environment variable CHROMAPRINT_KEY")
100-
}
101-
client, err := NewClientWithConfig(Config{Key: key})
102-
if err != nil {
103-
t.Fatal(err)
85+
// Open the file
86+
r, err := os.Open(SAMPLE_004_FILE)
87+
if !assert.NoError(err) {
88+
t.SkipNow()
10489
}
90+
defer r.Close()
10591

106-
if matches, err := client.Lookup(SAMPLE_003_FINGERPRINT, SAMPLE_003_DURATION, META_ALL); err != nil {
107-
t.Error(err)
108-
} else if len(matches) == 0 {
109-
t.Error("No matches")
110-
} else {
111-
t.Log(matches)
112-
}
92+
matches, err := client.Match(context.Background(), r)
93+
assert.NoError(err)
94+
t.Log(matches)
11395
}
114-
115-
*/

0 commit comments

Comments
 (0)