On Sun, 06. Oct 01:49, Andriy Gelman wrote: > From: Andriy Gelman <andriy.gel...@gmail.com> > > The pointer fp after the call to chromaprint_get_raw_fingerpoint() points to > an array of uint32_t whereas the current code assumed just a char stream. > Thus when writing the raw fingerprint, the output would be truncated by a > factor of 4. This is fixed in the commit. > > For reference the declaration of the function from chromaprint.h is: > int chromaprint_get_raw_fingerprint(ChromaprintContext *ctx, uint32_t > **fingerprint, int *size); > --- > libavformat/chromaprint.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/libavformat/chromaprint.c b/libavformat/chromaprint.c > index a4c0b97d99..faa92ca0db 100644 > --- a/libavformat/chromaprint.c > +++ b/libavformat/chromaprint.c > @@ -136,7 +136,7 @@ static int write_trailer(AVFormatContext *s) > > switch (cpr->fp_format) { > case FINGERPRINT_RAW: > - avio_write(pb, fp, size); > + avio_write(pb, fp, size * 4); //fp points to array of uint32_t > break; > case FINGERPRINT_COMPRESSED: > case FINGERPRINT_BASE64: > -- > 2.23.0
ping To reproduce the error, we can compare the results to fpcalc (chromaprint utility https://acoustid.org/chromaprint) $ ffmpeg -f lavfi -i sine=d=4 -f s16le testsample.raw $ fpcalc -format s16le -raw -plain testsample.raw 558758263,558758263,558758263,558758263,558758263,558758263,558758263,558758263,558758263,558758263,558758263 #with ffmpeg (need to typecast output bytesteam to uint32 to compare) $ ffmpeg -f lavfi -i sine=d=4 -f s16le -f chromaprint -fp_format raw fingerprint.raw $ python3 -c "import numpy; print(numpy.fromfile(\"fingerprint.raw\", dtype=numpy.uint32))" [558758263 558758263] Applying this commit makes the outputs same size -- Andriy _______________________________________________ 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".