* [FFmpeg-devel] [PATCH 1/2] avcodec/apedec: remove unused variable @ 2023-08-26 16:53 Michael Niedermayer 2023-08-26 16:53 ` [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection Michael Niedermayer 0 siblings, 1 reply; 8+ messages in thread From: Michael Niedermayer @ 2023-08-26 16:53 UTC (permalink / raw) To: FFmpeg development discussions and patches Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> --- libavcodec/apedec.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c index a9d5eb7f33..8bd625ca05 100644 --- a/libavcodec/apedec.c +++ b/libavcodec/apedec.c @@ -145,8 +145,6 @@ typedef struct APEPredictor64 { uint64_t coeffsA[2][4]; ///< adaption coefficients uint64_t coeffsB[2][5]; ///< adaption coefficients int64_t historybuffer[HISTORY_SIZE + PREDICTOR_SIZE]; - - unsigned int sample_pos; } APEPredictor64; /** Decoder context */ @@ -860,8 +858,6 @@ static void init_predictor_decoder(APEContext *ctx) p64->lastA[0] = p64->lastA[1] = 0; p->sample_pos = 0; - - p64->sample_pos = 0; } /** Get inverse sign of integer (-1 for positive, 1 for negative and 0 for zero) */ -- 2.17.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 8+ messages in thread
* [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection 2023-08-26 16:53 [FFmpeg-devel] [PATCH 1/2] avcodec/apedec: remove unused variable Michael Niedermayer @ 2023-08-26 16:53 ` Michael Niedermayer 2023-08-26 17:29 ` Paul B Mahol ` (2 more replies) 0 siblings, 3 replies; 8+ messages in thread From: Michael Niedermayer @ 2023-08-26 16:53 UTC (permalink / raw) To: FFmpeg development discussions and patches Fixes: NoLegacy.ape Found-by: Matt Ashland <mail@monkeysaudio.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> --- libavcodec/apedec.c | 106 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 84 insertions(+), 22 deletions(-) diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c index 8bd625ca05..249fc22e24 100644 --- a/libavcodec/apedec.c +++ b/libavcodec/apedec.c @@ -171,6 +171,9 @@ typedef struct APEContext { int32_t *decoded_buffer; int decoded_size; int32_t *decoded[MAX_CHANNELS]; ///< decoded data for each channel + int32_t *interim_buffer; + int interim_size; + int32_t *interim[MAX_CHANNELS]; ///< decoded data for each channel int blocks_per_loop; ///< maximum number of samples to decode for each call int16_t* filterbuf[APE_FILTER_LEVELS]; ///< filter memory @@ -187,6 +190,7 @@ typedef struct APEContext { const uint8_t *ptr; ///< current position in frame data int error; + int interim_mode; void (*entropy_decode_mono)(struct APEContext *ctx, int blockstodecode); void (*entropy_decode_stereo)(struct APEContext *ctx, int blockstodecode); @@ -223,6 +227,7 @@ static av_cold int ape_decode_close(AVCodecContext *avctx) av_freep(&s->filterbuf[i]); av_freep(&s->decoded_buffer); + av_freep(&s->interim_buffer); av_freep(&s->data); s->decoded_size = s->data_size = 0; @@ -248,12 +253,15 @@ static av_cold int ape_decode_init(AVCodecContext *avctx) switch (s->bps) { case 8: avctx->sample_fmt = AV_SAMPLE_FMT_U8P; + s->interim_mode = 0; break; case 16: avctx->sample_fmt = AV_SAMPLE_FMT_S16P; + s->interim_mode = 0; break; case 24: avctx->sample_fmt = AV_SAMPLE_FMT_S32P; + s->interim_mode = -1; break; default: avpriv_request_sample(avctx, @@ -1181,7 +1189,7 @@ static av_always_inline int predictor_update_filter(APEPredictor64 *p, const int decoded, const int filter, const int delayA, const int delayB, const int adaptA, const int adaptB, - int compression_level) + int interim_mode) { int64_t predictionA, predictionB; int32_t sign; @@ -1209,7 +1217,7 @@ static av_always_inline int predictor_update_filter(APEPredictor64 *p, p->buf[delayB - 3] * p->coeffsB[filter][3] + p->buf[delayB - 4] * p->coeffsB[filter][4]; - if (compression_level < COMPRESSION_LEVEL_INSANE) { + if (interim_mode < 1) { predictionA = (int32_t)predictionA; predictionB = (int32_t)predictionB; p->lastA[filter] = decoded + ((int32_t)(predictionA + (predictionB >> 1)) >> 10); @@ -1234,33 +1242,74 @@ static av_always_inline int predictor_update_filter(APEPredictor64 *p, static void predictor_decode_stereo_3950(APEContext *ctx, int count) { - APEPredictor64 *p = &ctx->predictor64; - int32_t *decoded0 = ctx->decoded[0]; - int32_t *decoded1 = ctx->decoded[1]; + APEPredictor64 *p_default = &ctx->predictor64; + APEPredictor64 p_interim; + int lcount = count; + int num_passes = 1; ape_apply_filters(ctx, ctx->decoded[0], ctx->decoded[1], count); + if (ctx->interim_mode == -1) { + p_interim = *p_default; + num_passes ++; + memcpy(ctx->interim[0], ctx->decoded[0], sizeof(*ctx->interim[0])*count); + memcpy(ctx->interim[1], ctx->decoded[1], sizeof(*ctx->interim[1])*count); + } - while (count--) { - /* Predictor Y */ - *decoded0 = predictor_update_filter(p, *decoded0, 0, YDELAYA, YDELAYB, - YADAPTCOEFFSA, YADAPTCOEFFSB, - ctx->compression_level); - decoded0++; - *decoded1 = predictor_update_filter(p, *decoded1, 1, XDELAYA, XDELAYB, - XADAPTCOEFFSA, XADAPTCOEFFSB, - ctx->compression_level); - decoded1++; + for(int pass = 0; pass < num_passes; pass++) { + int32_t *decoded0, *decoded1; + int interim_mode = ctx->interim_mode > 0 || pass; + APEPredictor64 *p; - /* Combined */ - p->buf++; + if (pass) { + p = &p_interim; + decoded0 = ctx->interim[0]; + decoded1 = ctx->interim[1]; + } else { + p = p_default; + decoded0 = ctx->decoded[0]; + decoded1 = ctx->decoded[1]; + } + p->buf = p->historybuffer; + + count = lcount; + while (count--) { + /* Predictor Y */ + int32_t a0 = predictor_update_filter(p, *decoded0, 0, YDELAYA, YDELAYB, + YADAPTCOEFFSA, YADAPTCOEFFSB, + interim_mode); + int32_t a1 = predictor_update_filter(p, *decoded1, 1, XDELAYA, XDELAYB, + XADAPTCOEFFSA, XADAPTCOEFFSB, + interim_mode); + *decoded0++ = a0; + *decoded1++ = a1; + if (num_passes > 1) { + int32_t left = a1 - (unsigned)(a0 / 2); + int32_t right = left + a0; + + if (FFMAX(FFABS(left), FFABS(right)) > (1<<23)) { + ctx->interim_mode = !interim_mode; + av_log(ctx->avctx, AV_LOG_VERBOSE, "Interim mode: %d\n", ctx->interim_mode); + break; + } + } - /* Have we filled the history buffer? */ - if (p->buf == p->historybuffer + HISTORY_SIZE) { - memmove(p->historybuffer, p->buf, - PREDICTOR_SIZE * sizeof(*p->historybuffer)); - p->buf = p->historybuffer; + /* Combined */ + p->buf++; + + /* Have we filled the history buffer? */ + if (p->buf == p->historybuffer + HISTORY_SIZE) { + memmove(p->historybuffer, p->buf, + PREDICTOR_SIZE * sizeof(*p->historybuffer)); + p->buf = p->historybuffer; + } } } + if (num_passes > 1 && ctx->interim_mode > 0) { + memcpy(ctx->decoded[0], ctx->interim[0], sizeof(*ctx->interim[0])*lcount); + memcpy(ctx->decoded[1], ctx->interim[1], sizeof(*ctx->interim[1])*lcount); + *p_default = p_interim; + p_default->buf = p_default->historybuffer; + } } static void predictor_decode_mono_3950(APEContext *ctx, int count) @@ -1590,6 +1639,19 @@ static int ape_decode_frame(AVCodecContext *avctx, AVFrame *frame, s->decoded[0] = s->decoded_buffer; s->decoded[1] = s->decoded_buffer + FFALIGN(blockstodecode, 8); + if (s->interim_mode < 0) { + av_fast_malloc(&s->interim_buffer, &s->interim_size, decoded_buffer_size); + if (!s->interim_buffer) + return AVERROR(ENOMEM); + memset(s->interim_buffer, 0, decoded_buffer_size); + s->interim[0] = s->interim_buffer; + s->interim[1] = s->interim_buffer + FFALIGN(blockstodecode, 8); + } else { + av_freep(&s->interim_buffer); + s->interim_size = 0; + memset(s->interim, 0, sizeof(s->interim)); + } + s->error=0; if ((s->channels == 1) || (s->frameflags & APE_FRAMECODE_PSEUDO_STEREO)) -- 2.17.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection 2023-08-26 16:53 ` [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection Michael Niedermayer @ 2023-08-26 17:29 ` Paul B Mahol 2023-08-27 22:59 ` Michael Niedermayer 2023-08-26 17:55 ` Anton Khirnov 2023-08-27 23:29 ` Michael Niedermayer 2 siblings, 1 reply; 8+ messages in thread From: Paul B Mahol @ 2023-08-26 17:29 UTC (permalink / raw) To: FFmpeg development discussions and patches On Sat, Aug 26, 2023 at 6:54 PM Michael Niedermayer <michael@niedermayer.cc> wrote: > Fixes: NoLegacy.ape > Found-by: Matt Ashland <mail@monkeysaudio.com> > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> > --- > libavcodec/apedec.c | 106 +++++++++++++++++++++++++++++++++++--------- > 1 file changed, 84 insertions(+), 22 deletions(-) > > diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c > index 8bd625ca05..249fc22e24 100644 > --- a/libavcodec/apedec.c > +++ b/libavcodec/apedec.c > @@ -171,6 +171,9 @@ typedef struct APEContext { > int32_t *decoded_buffer; > int decoded_size; > int32_t *decoded[MAX_CHANNELS]; ///< decoded data for each > channel > + int32_t *interim_buffer; > + int interim_size; > + int32_t *interim[MAX_CHANNELS]; ///< decoded data for each > channel > int blocks_per_loop; ///< maximum number of > samples to decode for each call > > int16_t* filterbuf[APE_FILTER_LEVELS]; ///< filter memory > @@ -187,6 +190,7 @@ typedef struct APEContext { > const uint8_t *ptr; ///< current position in > frame data > > int error; > + int interim_mode; > > void (*entropy_decode_mono)(struct APEContext *ctx, int > blockstodecode); > void (*entropy_decode_stereo)(struct APEContext *ctx, int > blockstodecode); > @@ -223,6 +227,7 @@ static av_cold int ape_decode_close(AVCodecContext > *avctx) > av_freep(&s->filterbuf[i]); > > av_freep(&s->decoded_buffer); > + av_freep(&s->interim_buffer); > av_freep(&s->data); > s->decoded_size = s->data_size = 0; > > @@ -248,12 +253,15 @@ static av_cold int ape_decode_init(AVCodecContext > *avctx) > switch (s->bps) { > case 8: > avctx->sample_fmt = AV_SAMPLE_FMT_U8P; > + s->interim_mode = 0; > break; > case 16: > avctx->sample_fmt = AV_SAMPLE_FMT_S16P; > + s->interim_mode = 0; > break; > case 24: > avctx->sample_fmt = AV_SAMPLE_FMT_S32P; > + s->interim_mode = -1; > break; > default: > avpriv_request_sample(avctx, > @@ -1181,7 +1189,7 @@ static av_always_inline int > predictor_update_filter(APEPredictor64 *p, > const int decoded, > const int filter, > const int delayA, > const int delayB, > const int adaptA, > const int adaptB, > - int compression_level) > + int interim_mode) > { > int64_t predictionA, predictionB; > int32_t sign; > @@ -1209,7 +1217,7 @@ static av_always_inline int > predictor_update_filter(APEPredictor64 *p, > p->buf[delayB - 3] * p->coeffsB[filter][3] + > p->buf[delayB - 4] * p->coeffsB[filter][4]; > > - if (compression_level < COMPRESSION_LEVEL_INSANE) { > + if (interim_mode < 1) { > predictionA = (int32_t)predictionA; > predictionB = (int32_t)predictionB; > p->lastA[filter] = decoded + ((int32_t)(predictionA + > (predictionB >> 1)) >> 10); > @@ -1234,33 +1242,74 @@ static av_always_inline int > predictor_update_filter(APEPredictor64 *p, > > static void predictor_decode_stereo_3950(APEContext *ctx, int count) > { > - APEPredictor64 *p = &ctx->predictor64; > - int32_t *decoded0 = ctx->decoded[0]; > - int32_t *decoded1 = ctx->decoded[1]; > + APEPredictor64 *p_default = &ctx->predictor64; > + APEPredictor64 p_interim; > + int lcount = count; > + int num_passes = 1; > > ape_apply_filters(ctx, ctx->decoded[0], ctx->decoded[1], count); > + if (ctx->interim_mode == -1) { > + p_interim = *p_default; > + num_passes ++; > + memcpy(ctx->interim[0], ctx->decoded[0], > sizeof(*ctx->interim[0])*count); > + memcpy(ctx->interim[1], ctx->decoded[1], > sizeof(*ctx->interim[1])*count); > + } > > - while (count--) { > - /* Predictor Y */ > - *decoded0 = predictor_update_filter(p, *decoded0, 0, YDELAYA, > YDELAYB, > - YADAPTCOEFFSA, YADAPTCOEFFSB, > - ctx->compression_level); > - decoded0++; > - *decoded1 = predictor_update_filter(p, *decoded1, 1, XDELAYA, > XDELAYB, > - XADAPTCOEFFSA, XADAPTCOEFFSB, > - ctx->compression_level); > - decoded1++; > + for(int pass = 0; pass < num_passes; pass++) { > Please fix your style in patches. > + int32_t *decoded0, *decoded1; > + int interim_mode = ctx->interim_mode > 0 || pass; > + APEPredictor64 *p; > > - /* Combined */ > - p->buf++; > + if (pass) { > + p = &p_interim; > + decoded0 = ctx->interim[0]; > + decoded1 = ctx->interim[1]; > + } else { > + p = p_default; > + decoded0 = ctx->decoded[0]; > + decoded1 = ctx->decoded[1]; > + } > + p->buf = p->historybuffer; > + > + count = lcount; > + while (count--) { > + /* Predictor Y */ > + int32_t a0 = predictor_update_filter(p, *decoded0, 0, > YDELAYA, YDELAYB, > + YADAPTCOEFFSA, > YADAPTCOEFFSB, > + interim_mode); > + int32_t a1 = predictor_update_filter(p, *decoded1, 1, > XDELAYA, XDELAYB, > + XADAPTCOEFFSA, > XADAPTCOEFFSB, > + interim_mode); > + *decoded0++ = a0; > + *decoded1++ = a1; > + if (num_passes > 1) { > + int32_t left = a1 - (unsigned)(a0 / 2); > + int32_t right = left + a0; > + > + if (FFMAX(FFABS(left), FFABS(right)) > (1<<23)) { > + ctx->interim_mode = !interim_mode; > + av_log(ctx->avctx, AV_LOG_VERBOSE, "Interim mode: > %d\n", ctx->interim_mode); > + break; > + } > + } > > - /* Have we filled the history buffer? */ > - if (p->buf == p->historybuffer + HISTORY_SIZE) { > - memmove(p->historybuffer, p->buf, > - PREDICTOR_SIZE * sizeof(*p->historybuffer)); > - p->buf = p->historybuffer; > + /* Combined */ > + p->buf++; > + > + /* Have we filled the history buffer? */ > + if (p->buf == p->historybuffer + HISTORY_SIZE) { > + memmove(p->historybuffer, p->buf, > + PREDICTOR_SIZE * sizeof(*p->historybuffer)); > + p->buf = p->historybuffer; > + } > } > } > + if (num_passes > 1 && ctx->interim_mode > 0) { > + memcpy(ctx->decoded[0], ctx->interim[0], > sizeof(*ctx->interim[0])*lcount); > + memcpy(ctx->decoded[1], ctx->interim[1], > sizeof(*ctx->interim[1])*lcount); > + *p_default = p_interim; > + p_default->buf = p_default->historybuffer; > + } > } > > static void predictor_decode_mono_3950(APEContext *ctx, int count) > @@ -1590,6 +1639,19 @@ static int ape_decode_frame(AVCodecContext *avctx, > AVFrame *frame, > s->decoded[0] = s->decoded_buffer; > s->decoded[1] = s->decoded_buffer + FFALIGN(blockstodecode, 8); > > + if (s->interim_mode < 0) { > + av_fast_malloc(&s->interim_buffer, &s->interim_size, > decoded_buffer_size); > + if (!s->interim_buffer) > + return AVERROR(ENOMEM); > + memset(s->interim_buffer, 0, decoded_buffer_size); > + s->interim[0] = s->interim_buffer; > + s->interim[1] = s->interim_buffer + FFALIGN(blockstodecode, 8); > + } else { > + av_freep(&s->interim_buffer); > + s->interim_size = 0; > + memset(s->interim, 0, sizeof(s->interim)); > + } > + > s->error=0; > > if ((s->channels == 1) || (s->frameflags & > APE_FRAMECODE_PSEUDO_STEREO)) > -- > 2.17.1 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection 2023-08-26 17:29 ` Paul B Mahol @ 2023-08-27 22:59 ` Michael Niedermayer 0 siblings, 0 replies; 8+ messages in thread From: Michael Niedermayer @ 2023-08-27 22:59 UTC (permalink / raw) To: FFmpeg development discussions and patches [-- Attachment #1.1: Type: text/plain, Size: 5661 bytes --] On Sat, Aug 26, 2023 at 07:29:40PM +0200, Paul B Mahol wrote: > On Sat, Aug 26, 2023 at 6:54 PM Michael Niedermayer <michael@niedermayer.cc> > wrote: > > > Fixes: NoLegacy.ape > > Found-by: Matt Ashland <mail@monkeysaudio.com> > > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> > > --- > > libavcodec/apedec.c | 106 +++++++++++++++++++++++++++++++++++--------- > > 1 file changed, 84 insertions(+), 22 deletions(-) > > > > diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c > > index 8bd625ca05..249fc22e24 100644 > > --- a/libavcodec/apedec.c > > +++ b/libavcodec/apedec.c > > @@ -171,6 +171,9 @@ typedef struct APEContext { > > int32_t *decoded_buffer; > > int decoded_size; > > int32_t *decoded[MAX_CHANNELS]; ///< decoded data for each > > channel > > + int32_t *interim_buffer; > > + int interim_size; > > + int32_t *interim[MAX_CHANNELS]; ///< decoded data for each > > channel > > int blocks_per_loop; ///< maximum number of > > samples to decode for each call > > > > int16_t* filterbuf[APE_FILTER_LEVELS]; ///< filter memory > > @@ -187,6 +190,7 @@ typedef struct APEContext { > > const uint8_t *ptr; ///< current position in > > frame data > > > > int error; > > + int interim_mode; > > > > void (*entropy_decode_mono)(struct APEContext *ctx, int > > blockstodecode); > > void (*entropy_decode_stereo)(struct APEContext *ctx, int > > blockstodecode); > > @@ -223,6 +227,7 @@ static av_cold int ape_decode_close(AVCodecContext > > *avctx) > > av_freep(&s->filterbuf[i]); > > > > av_freep(&s->decoded_buffer); > > + av_freep(&s->interim_buffer); > > av_freep(&s->data); > > s->decoded_size = s->data_size = 0; > > > > @@ -248,12 +253,15 @@ static av_cold int ape_decode_init(AVCodecContext > > *avctx) > > switch (s->bps) { > > case 8: > > avctx->sample_fmt = AV_SAMPLE_FMT_U8P; > > + s->interim_mode = 0; > > break; > > case 16: > > avctx->sample_fmt = AV_SAMPLE_FMT_S16P; > > + s->interim_mode = 0; > > break; > > case 24: > > avctx->sample_fmt = AV_SAMPLE_FMT_S32P; > > + s->interim_mode = -1; > > break; > > default: > > avpriv_request_sample(avctx, > > @@ -1181,7 +1189,7 @@ static av_always_inline int > > predictor_update_filter(APEPredictor64 *p, > > const int decoded, > > const int filter, > > const int delayA, > > const int delayB, > > const int adaptA, > > const int adaptB, > > - int compression_level) > > + int interim_mode) > > { > > int64_t predictionA, predictionB; > > int32_t sign; > > @@ -1209,7 +1217,7 @@ static av_always_inline int > > predictor_update_filter(APEPredictor64 *p, > > p->buf[delayB - 3] * p->coeffsB[filter][3] + > > p->buf[delayB - 4] * p->coeffsB[filter][4]; > > > > - if (compression_level < COMPRESSION_LEVEL_INSANE) { > > + if (interim_mode < 1) { > > predictionA = (int32_t)predictionA; > > predictionB = (int32_t)predictionB; > > p->lastA[filter] = decoded + ((int32_t)(predictionA + > > (predictionB >> 1)) >> 10); > > @@ -1234,33 +1242,74 @@ static av_always_inline int > > predictor_update_filter(APEPredictor64 *p, > > > > static void predictor_decode_stereo_3950(APEContext *ctx, int count) > > { > > - APEPredictor64 *p = &ctx->predictor64; > > - int32_t *decoded0 = ctx->decoded[0]; > > - int32_t *decoded1 = ctx->decoded[1]; > > + APEPredictor64 *p_default = &ctx->predictor64; > > + APEPredictor64 p_interim; > > + int lcount = count; > > + int num_passes = 1; > > > > ape_apply_filters(ctx, ctx->decoded[0], ctx->decoded[1], count); > > + if (ctx->interim_mode == -1) { > > + p_interim = *p_default; > > + num_passes ++; > > + memcpy(ctx->interim[0], ctx->decoded[0], > > sizeof(*ctx->interim[0])*count); > > + memcpy(ctx->interim[1], ctx->decoded[1], > > sizeof(*ctx->interim[1])*count); > > + } > > > > - while (count--) { > > - /* Predictor Y */ > > - *decoded0 = predictor_update_filter(p, *decoded0, 0, YDELAYA, > > YDELAYB, > > - YADAPTCOEFFSA, YADAPTCOEFFSB, > > - ctx->compression_level); > > - decoded0++; > > - *decoded1 = predictor_update_filter(p, *decoded1, 1, XDELAYA, > > XDELAYB, > > - XADAPTCOEFFSA, XADAPTCOEFFSB, > > - ctx->compression_level); > > - decoded1++; > > + for(int pass = 0; pass < num_passes; pass++) { > > > > Please fix your style in patches. Noone can know from this what exactly you meant but ill apply with the whitespace issue i found, which may be what you meant. No need to be precisse, thats ok with me if you prefer that but a inprecisse review comment will result in inprecisse results thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Its not that you shouldnt use gotos but rather that you should write readable code and code with gotos often but not always is less readable [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 195 bytes --] [-- Attachment #2: Type: text/plain, Size: 251 bytes --] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection 2023-08-26 16:53 ` [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection Michael Niedermayer 2023-08-26 17:29 ` Paul B Mahol @ 2023-08-26 17:55 ` Anton Khirnov 2023-08-26 18:07 ` Michael Niedermayer 2023-08-27 23:29 ` Michael Niedermayer 2 siblings, 1 reply; 8+ messages in thread From: Anton Khirnov @ 2023-08-26 17:55 UTC (permalink / raw) To: FFmpeg development discussions and patches Quoting Michael Niedermayer (2023-08-26 18:53:50) > Fixes: NoLegacy.ape Can you make a FATE test? -- Anton Khirnov _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection 2023-08-26 17:55 ` Anton Khirnov @ 2023-08-26 18:07 ` Michael Niedermayer 2023-08-27 23:05 ` Michael Niedermayer 0 siblings, 1 reply; 8+ messages in thread From: Michael Niedermayer @ 2023-08-26 18:07 UTC (permalink / raw) To: FFmpeg development discussions and patches [-- Attachment #1.1: Type: text/plain, Size: 563 bytes --] On Sat, Aug 26, 2023 at 07:55:10PM +0200, Anton Khirnov wrote: > Quoting Michael Niedermayer (2023-08-26 18:53:50) > > Fixes: NoLegacy.ape > > Can you make a FATE test? The file seems 34mb, ill try to cut it down to something smaller thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB When the tyrant has disposed of foreign enemies by conquest or treaty, and there is nothing more to fear from them, then he is always stirring up some war or other, in order that the people may require a leader. -- Plato [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 195 bytes --] [-- Attachment #2: Type: text/plain, Size: 251 bytes --] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection 2023-08-26 18:07 ` Michael Niedermayer @ 2023-08-27 23:05 ` Michael Niedermayer 0 siblings, 0 replies; 8+ messages in thread From: Michael Niedermayer @ 2023-08-27 23:05 UTC (permalink / raw) To: FFmpeg development discussions and patches [-- Attachment #1.1: Type: text/plain, Size: 2093 bytes --] On Sat, Aug 26, 2023 at 08:07:14PM +0200, Michael Niedermayer wrote: > On Sat, Aug 26, 2023 at 07:55:10PM +0200, Anton Khirnov wrote: > > Quoting Michael Niedermayer (2023-08-26 18:53:50) > > > Fixes: NoLegacy.ape > > > > Can you make a FATE test? > > The file seems 34mb, ill try to cut it down to something smaller ive been able to cut it down to 100kb tested on mips/arm/mingw32/64 and linux32/64 x86 test seems trivial, so ill apply it with my next push, test is below for reference commit 2c1ade30ad8f523d816a853f90512808b0c039e1 (HEAD -> master) Author: Michael Niedermayer <michael@niedermayer.cc> Date: Sat Aug 26 20:21:32 2023 +0200 tests/fate: Add NoLegacy-cut.ape test Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> diff --git a/tests/fate/monkeysaudio.mak b/tests/fate/monkeysaudio.mak index d75937ec02..03c646cd47 100644 --- a/tests/fate/monkeysaudio.mak +++ b/tests/fate/monkeysaudio.mak @@ -16,5 +16,8 @@ $(foreach N,$(APE_VERSIONS),$(eval $(call FATE_APE_SUITE,$(N)))) FATE_APE += fate-lossless-monkeysaudio-399 fate-lossless-monkeysaudio-399: CMD = md5 -i $(TARGET_SAMPLES)/lossless-audio/luckynight-partial.ape -f s16le -af aresample +FATE_APE += fate-lossless-monkeysaudio-legacy +fate-lossless-monkeysaudio-legacy: CMD = md5 -i $(TARGET_SAMPLES)/lossless-audio/NoLegacy-cut.ape -f s32le -af aresample + FATE_SAMPLES_AVCONV-$(call DEMDEC, APE, APE) += $(FATE_APE) fate-lossless-monkeysaudio: $(FATE_APE) diff --git a/tests/ref/fate/lossless-monkeysaudio-legacy b/tests/ref/fate/lossless-monkeysaudio-legacy new file mode 100644 index 0000000000..33d4b56204 --- /dev/null +++ b/tests/ref/fate/lossless-monkeysaudio-legacy @@ -0,0 +1 @@ +2cd8a60478c77382dfed8b8bdf1f70e4 [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB The day soldiers stop bringing you their problems is the day you have stopped leading them. They have either lost confidence that you can help or concluded you do not care. Either case is a failure of leadership. - Colin Powell [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 195 bytes --] [-- Attachment #2: Type: text/plain, Size: 251 bytes --] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection 2023-08-26 16:53 ` [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection Michael Niedermayer 2023-08-26 17:29 ` Paul B Mahol 2023-08-26 17:55 ` Anton Khirnov @ 2023-08-27 23:29 ` Michael Niedermayer 2 siblings, 0 replies; 8+ messages in thread From: Michael Niedermayer @ 2023-08-27 23:29 UTC (permalink / raw) To: FFmpeg development discussions and patches [-- Attachment #1.1: Type: text/plain, Size: 1368 bytes --] On Sat, Aug 26, 2023 at 06:53:50PM +0200, Michael Niedermayer wrote: > Fixes: NoLegacy.ape > Found-by: Matt Ashland <mail@monkeysaudio.com> > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> > --- > libavcodec/apedec.c | 106 +++++++++++++++++++++++++++++++++++--------- > 1 file changed, 84 insertions(+), 22 deletions(-) Also, the same issue should exists in the mono codepath. I have no testcase for mono, so left this unchanged for now, as i cannot test it. But if someone has a testcase, tell me It also may be needed to wait till one of the CRCs to distinguish between the 2 decoding forms. (this is how the SDK does it) Waiting for some CRC is a bit inconvenient as we return data before currently. And this quicker variant here works for all files i have We also differ from the SDK by decoding both forms in parallel until one fails. The advantage here is that if only one is decoded then a random failure cannot be distinguished from "interim mode" which would result in a bitstream error causing a switch to the wrong mode. Above is how its done ATM in git master. As more issues get submitted that may change thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I do not agree with what you have to say, but I'll defend to the death your right to say it. -- Voltaire [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 195 bytes --] [-- Attachment #2: Type: text/plain, Size: 251 bytes --] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-08-27 23:29 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-08-26 16:53 [FFmpeg-devel] [PATCH 1/2] avcodec/apedec: remove unused variable Michael Niedermayer 2023-08-26 16:53 ` [FFmpeg-devel] [PATCH 2/2] avcodec/apedec: Implement interim mode detection Michael Niedermayer 2023-08-26 17:29 ` Paul B Mahol 2023-08-27 22:59 ` Michael Niedermayer 2023-08-26 17:55 ` Anton Khirnov 2023-08-26 18:07 ` Michael Niedermayer 2023-08-27 23:05 ` Michael Niedermayer 2023-08-27 23:29 ` Michael Niedermayer
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git