X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvf_signature.c;h=a345ad6ebdfb1578d181a5df09d5f5641d5d0b30;hb=a04ad248a05e7b613abe09b3bb067f555108d794;hp=d07b213f3125a0b5689393a6351586b543a92bd7;hpb=0c126431f9b290f5651ec62f45627632d94c51ea;p=ffmpeg diff --git a/libavfilter/vf_signature.c b/libavfilter/vf_signature.c index d07b213f312..a345ad6ebdf 100644 --- a/libavfilter/vf_signature.c +++ b/libavfilter/vf_signature.c @@ -132,8 +132,9 @@ static uint64_t get_block_sum(StreamContext *sc, uint64_t intpic[32][32], const return sum; } -static int cmp(const uint64_t *a, const uint64_t *b) +static int cmp(const void *x, const void *y) { + const uint64_t *a = x, *b = y; return *a < *b ? -1 : ( *a > *b ? 1 : 0 ); } @@ -291,7 +292,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *picref) } /* get threshold */ - qsort(sortsignature, elemcat->elem_count, sizeof(uint64_t), (void*) cmp); + qsort(sortsignature, elemcat->elem_count, sizeof(uint64_t), cmp); th = sortsignature[(int) (elemcat->elem_count*0.333)]; /* ternarize */ @@ -317,7 +318,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *picref) } /* confidence */ - qsort(conflist, DIFFELEM_SIZE, sizeof(uint64_t), (void*) cmp); + qsort(conflist, DIFFELEM_SIZE, sizeof(uint64_t), cmp); fs->confidence = FFMIN(conflist[DIFFELEM_SIZE/2], 255); /* coarsesignature */ @@ -559,9 +560,8 @@ static int binary_export(AVFilterContext *ctx, StreamContext *sc, const char* fi } } - avpriv_align_put_bits(&buf); flush_put_bits(&buf); - fwrite(buffer, 1, put_bits_count(&buf)/8, f); + fwrite(buffer, 1, put_bytes_output(&buf), f); fclose(f); av_freep(&buffer); return 0; @@ -664,6 +664,10 @@ static av_cold int init(AVFilterContext *ctx) if (!pad.name) return AVERROR(ENOMEM); + if ((ret = ff_insert_inpad(ctx, i, &pad)) < 0) { + av_freep(&pad.name); + return ret; + } sc = &(sic->streamcontexts[i]); @@ -680,11 +684,6 @@ static av_cold int init(AVFilterContext *ctx) sc->coarseend = sc->coarsesiglist; sc->coarsecount = 0; sc->midcoarse = 0; - - if ((ret = ff_insert_inpad(ctx, i, &pad)) < 0) { - av_freep(&pad.name); - return ret; - } } /* check filename */ @@ -731,6 +730,8 @@ static av_cold void uninit(AVFilterContext *ctx) } av_freep(&sic->streamcontexts); } + for (unsigned i = 0; i < ctx->nb_inputs; i++) + av_freep(&ctx->input_pads[i].name); } static int config_output(AVFilterLink *outlink) @@ -757,7 +758,7 @@ static const AVFilterPad signature_outputs[] = { { NULL } }; -AVFilter ff_vf_signature = { +const AVFilter ff_vf_signature = { .name = "signature", .description = NULL_IF_CONFIG_SMALL("Calculate the MPEG-7 video signature"), .priv_size = sizeof(SignatureContext),