Could maybe use some kind of compile-time assert that FLAC_STREAMINFO_SIZE == MD5_BYTE_SIZE + 18. I'm thinking putting in st- >codecpar->extradata + st->codecpar->extradata_size - MD5_BYTE_SIZE for the offset
Spotify comments ---------------- Make it possible to verify sample checksum for FLAC files Possible other solutions: • Make ffmpeg FLAC demuxer capable of optionally check sample checksum. One tricky thing is that we currently have heuristics to not trust the checksums based on other metadata (known broken transcoding software) /Tomas
From b102a409e1c62dcf3907536021f8b455d9e760a3 Mon Sep 17 00:00:00 2001 From: Mattias Wadman <wa...@spotify.com> Date: Mon, 11 Oct 2021 15:38:13 +0200 Subject: [PATCH 05/15] libavformat/flacdec: Export samples md5 as metadata Will be used by mal to compare metadat md5 with decoded samples md5. Part of fixing https://jira.spotify.net/browse/GOL-681 --- libavformat/flacdec.c | 6 ++++++ tests/ref/fate/cover-art-aiff-id3v2-remux | 5 +++-- tests/ref/fate/cover-art-flac-remux | 1 + tests/ref/fate/id3v2-utf16-bom | 5 +++-- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/libavformat/flacdec.c b/libavformat/flacdec.c index 3c317acaee..9f65c25864 100644 --- a/libavformat/flacdec.c +++ b/libavformat/flacdec.c @@ -33,6 +33,7 @@ #include "replaygain.h" #define SEEKPOINT_SIZE 18 +#define MD5_BYTE_SIZE 16 typedef struct FLACDecContext { FFRawDemuxerContext rawctx; @@ -109,6 +110,7 @@ static int flac_read_header(AVFormatContext *s) if (metadata_type == FLAC_METADATA_TYPE_STREAMINFO) { uint32_t samplerate; uint64_t samples; + char md5hex[MD5_BYTE_SIZE*2+1]; // hex representation plus null terminator /* STREAMINFO can only occur once */ if (found_streaminfo) { @@ -133,6 +135,10 @@ static int flac_read_header(AVFormatContext *s) if (samples > 0) st->duration = samples; } + + ff_data_to_hex(md5hex, st->codecpar->extradata+18, MD5_BYTE_SIZE, 1 /* lowercase */); + md5hex[sizeof(md5hex)-1] = '\0'; + av_dict_set(&s->metadata, "samples_md5", md5hex, 0); } else if (metadata_type == FLAC_METADATA_TYPE_CUESHEET) { uint8_t isrc[13]; uint64_t start; diff --git a/tests/ref/fate/cover-art-aiff-id3v2-remux b/tests/ref/fate/cover-art-aiff-id3v2-remux index a59ba37c65..57c5a9f387 100644 --- a/tests/ref/fate/cover-art-aiff-id3v2-remux +++ b/tests/ref/fate/cover-art-aiff-id3v2-remux @@ -1,5 +1,5 @@ -330ad2bf538e91a31752b38024461df1 *tests/data/fate/cover-art-aiff-id3v2-remux.aiff -608914 tests/data/fate/cover-art-aiff-id3v2-remux.aiff +d8caddad3af3879f5957f71adcaedd23 *tests/data/fate/cover-art-aiff-id3v2-remux.aiff +608970 tests/data/fate/cover-art-aiff-id3v2-remux.aiff #tb 0: 1/44100 #media_type 0: audio #codec_id 0: pcm_s16be @@ -68,6 +68,7 @@ TAG:comment=Composer [/STREAM] [FORMAT] TAG:artist=Мельница +TAG:samples_md5=03462731b2dba8e6a9da639b07054121 TAG:RATING=0 TAG:album=Ангелофрения TAG:title=Дороги diff --git a/tests/ref/fate/cover-art-flac-remux b/tests/ref/fate/cover-art-flac-remux index fa91975881..109bf7395e 100644 --- a/tests/ref/fate/cover-art-flac-remux +++ b/tests/ref/fate/cover-art-flac-remux @@ -90,6 +90,7 @@ TAG:comment=Publisher/Studio logotype TAG:title=White King Granulated Soap [/STREAM] [FORMAT] +TAG:samples_md5=496206705f222f9a63bf23dc874d9d71 TAG:major_brand=M4A TAG:minor_version=0 TAG:compatible_brands=M4A mp42isom diff --git a/tests/ref/fate/id3v2-utf16-bom b/tests/ref/fate/id3v2-utf16-bom index dd2566de2b..a1adb4730d 100644 --- a/tests/ref/fate/id3v2-utf16-bom +++ b/tests/ref/fate/id3v2-utf16-bom @@ -1,5 +1,5 @@ -9b8bfdf87a8d3d089819ef9f6f264ec4 *tests/data/fate/id3v2-utf16-bom.aiff -885482 tests/data/fate/id3v2-utf16-bom.aiff +b712d97d4ab0cfd77d79235c312c438a *tests/data/fate/id3v2-utf16-bom.aiff +885538 tests/data/fate/id3v2-utf16-bom.aiff #tb 0: 1/90000 #media_type 0: video #codec_id 0: mjpeg @@ -31,6 +31,7 @@ TAG:comment=Other [/STREAM] [FORMAT] TAG:artist=Мельница +TAG:samples_md5=03462731b2dba8e6a9da639b07054121 TAG:RATING=0 TAG:album=Ангелофрения TAG:title=Дороги -- 2.39.2
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".