Re: [FFmpeg-devel] [PATCH v7] libavfilter/x86/vf_convolution: add sobel filter optimization and unit test with intel AVX512 VNNI

2022-11-06 Thread Xiang, Haihao
On Fri, 2022-11-04 at 16:29 +0800, bin.wang-at-intel@ffmpeg.org wrote:
> From: bwang30 
> 
> This commit enabled assembly code with intel AVX512 VNNI and added unit test
> for sobel filter
> 
> sobel_c: 4537
> sobel_avx512icl 2136
> 
> Signed-off-by: bwang30 
> ---
>  libavfilter/convolution.h |  74 +
>  libavfilter/vf_convolution.c  |  91 +++-
>  libavfilter/x86/vf_convolution.asm| 147 ++
>  libavfilter/x86/vf_convolution_init.c |  18 
>  tests/checkasm/Makefile   |   1 +
>  tests/checkasm/checkasm.c |   3 +
>  tests/checkasm/checkasm.h |   1 +
>  tests/checkasm/vf_convolution.c   | 104 ++
>  tests/fate/checkasm.mak   |   1 +
>  9 files changed, 362 insertions(+), 78 deletions(-)
>  create mode 100644 tests/checkasm/vf_convolution.c
> 
> diff --git a/libavfilter/convolution.h b/libavfilter/convolution.h
> index 88aabe9a20..e44bfb5da8 100644
> --- a/libavfilter/convolution.h
> +++ b/libavfilter/convolution.h
> @@ -21,6 +21,7 @@
>  #ifndef AVFILTER_CONVOLUTION_H
>  #define AVFILTER_CONVOLUTION_H
>  #include "avfilter.h"
> +#include "libavutil/intreadwrite.h"
>  
>  enum MatrixMode {
>  MATRIX_SQUARE,
> @@ -61,4 +62,77 @@ typedef struct ConvolutionContext {
>  } ConvolutionContext;
>  
>  void ff_convolution_init_x86(ConvolutionContext *s);
> +void ff_sobel_init_x86(ConvolutionContext *s, int depth, int nb_planes);
> +
> +static void setup_3x3(int radius, const uint8_t *c[], const uint8_t *src, int
> stride,
> +  int x, int w, int y, int h, int bpc)
> +{
> +int i;
> +
> +for (i = 0; i < 9; i++) {
> +int xoff = FFABS(x + ((i % 3) - 1));
> +int yoff = FFABS(y + (i / 3) - 1);
> +
> +xoff = xoff >= w ? 2 * w - 1 - xoff : xoff;
> +yoff = yoff >= h ? 2 * h - 1 - yoff : yoff;
> +
> +c[i] = src + xoff * bpc + yoff * stride;
> +}
> +}
> +
> +static void filter_sobel(uint8_t *dst, int width,
> + float scale, float delta, const int *const matrix,
> + const uint8_t *c[], int peak, int radius,
> + int dstride, int stride, int size)
> +{
> +const uint8_t *c0 = c[0], *c1 = c[1], *c2 = c[2];
> +const uint8_t *c3 = c[3], *c5 = c[5];
> +const uint8_t *c6 = c[6], *c7 = c[7], *c8 = c[8];
> +int x;
> +
> +for (x = 0; x < width; x++) {
> +float suma = c0[x] * -1 + c1[x] * -2 + c2[x] * -1 +
> + c6[x] *  1 + c7[x] *  2 + c8[x] *  1;
> +float sumb = c0[x] * -1 + c2[x] *  1 + c3[x] * -2 +
> + c5[x] *  2 + c6[x] * -1 + c8[x] *  1;
> +
> +dst[x] = av_clip_uint8(sqrtf(suma*suma + sumb*sumb) * scale + delta);
> +}
> +}
> +
> +static void filter16_sobel(uint8_t *dstp, int width,
> +   float scale, float delta, const int *const matrix,
> +   const uint8_t *c[], int peak, int radius,
> +   int dstride, int stride, int size)
> +{
> +uint16_t *dst = (uint16_t *)dstp;
> +int x;
> +
> +for (x = 0; x < width; x++) {
> +float suma = AV_RN16A([0][2 * x]) * -1 + AV_RN16A([1][2 * x]) *
> -2 + AV_RN16A([2][2 * x]) * -1 +
> + AV_RN16A([6][2 * x]) *  1 + AV_RN16A([7][2 * x])
> *  2 + AV_RN16A([8][2 * x]) *  1;
> +float sumb = AV_RN16A([0][2 * x]) * -1 + AV_RN16A([2][2 * x])
> *  1 + AV_RN16A([3][2 * x]) * -2 +
> + AV_RN16A([5][2 * x]) *  2 + AV_RN16A([6][2 * x]) *
> -1 + AV_RN16A([8][2 * x]) *  1;
> +
> +dst[x] = av_clip(sqrtf(suma*suma + sumb*sumb) * scale + delta, 0,
> peak);
> +}
> +}
> +
> +static av_unused void ff_sobel_init(ConvolutionContext *s, int depth, int
> nb_planes)
> +{
> +for (int i = 0; i < 4; i++) {
> +s->filter[i] = filter_sobel;
> +s->copy[i] = !((1 << i) & s->planes);
> +s->size[i] = 3;
> +s->setup[i] = setup_3x3;
> +s->rdiv[i] = s->scale;
> +s->bias[i] = s->delta;
> +}
> +if (s->depth > 8)
> +for (int i = 0; i < 4; i++)
> +s->filter[i] = filter16_sobel;
> +#if ARCH_X86_64
> +ff_sobel_init_x86(s, depth, nb_planes);
> +#endif
> +}
>  #endif
> diff --git a/libavfilter/vf_convolution.c b/libavfilter/vf_convolution.c
> index 9a9c099e6d..7762fa2a05 100644
> --- a/libavfilter/vf_convolution.c
> +++ b/libavfilter/vf_convolution.c
> @@ -139,24 +139,6 @@ static void filter16_roberts(uint8_t *dstp, int width,
>  }
>  }
>  
> -static void filter16_sobel(uint8_t *dstp, int width,
> -   float scale, float delta, const int *const matrix,
> -   const uint8_t *c[], int peak, int radius,
> -   int dstride, int stride, int size)
> -{
> -uint16_t *dst = (uint16_t *)dstp;
> -int x;
> -
> -for (x = 0; x < width; x++) {
> -float suma = AV_RN16A([0][2 

Re: [FFmpeg-devel] [PATCH v2 01/11] avfilter/overlay_vaapi: use FILTER_SINGLE_PIXFMT

2022-11-06 Thread Xiang, Haihao
On Fri, 2022-11-04 at 02:07 +, Xiang, Haihao wrote:
> On Mon, 2022-10-31 at 06:19 +, softworkz wrote:
> > From: softworkz 
> > 
> > Signed-off-by: softworkz 
> > ---
> >  libavfilter/vf_overlay_vaapi.c | 30 +-
> >  1 file changed, 1 insertion(+), 29 deletions(-)
> > 
> > diff --git a/libavfilter/vf_overlay_vaapi.c b/libavfilter/vf_overlay_vaapi.c
> > index 3e6a0de13f..218daf571f 100644
> > --- a/libavfilter/vf_overlay_vaapi.c
> > +++ b/libavfilter/vf_overlay_vaapi.c
> > @@ -38,34 +38,6 @@ typedef struct OverlayVAAPIContext {
> >  floatalpha;
> >  } OverlayVAAPIContext;
> >  
> > -static int overlay_vaapi_query_formats(AVFilterContext *ctx)
> > -{
> > -int ret;
> > -enum {
> > -MAIN= 0,
> > -OVERLAY = 1,
> > -};
> > -
> > -static const enum AVPixelFormat pix_fmts[] = {
> > -AV_PIX_FMT_VAAPI,
> > -AV_PIX_FMT_NONE
> > -};
> > -
> > -ret = ff_formats_ref(ff_make_format_list(pix_fmts), >inputs[MAIN]-
> > > outcfg.formats);
> > -if (ret < 0)
> > -return ret;
> > -
> > -ret = ff_formats_ref(ff_make_format_list(pix_fmts), 
> > > inputs[OVERLAY]->outcfg.formats);
> > -if (ret < 0)
> > -return ret;
> > -
> > -ret = ff_formats_ref(ff_make_format_list(pix_fmts), >outputs[0]-
> > > incfg.formats);
> > -if (ret < 0)
> > -return ret;
> > -
> > -return 0;
> > -}
> > -
> >  static int overlay_vaapi_build_filter_params(AVFilterContext *avctx)
> >  {
> >  VAAPIVPPContext *vpp_ctx   = avctx->priv;
> > @@ -418,6 +390,6 @@ const AVFilter ff_vf_overlay_vaapi = {
> >  .activate= _vaapi_activate,
> >  FILTER_INPUTS(overlay_vaapi_inputs),
> >  FILTER_OUTPUTS(overlay_vaapi_outputs),
> > -FILTER_QUERY_FUNC(overlay_vaapi_query_formats),
> > +FILTER_SINGLE_PIXFMT(AV_PIX_FMT_VAAPI),
> >  .flags_internal  = FF_FILTER_FLAG_HWFRAME_AWARE,
> >  };
> 
> Patchset LGTM, will apply
> 

Pushed,

-Haihao

___
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".


Re: [FFmpeg-devel] [PATCH 1/2] libavcodec/qsvenc_hevc: add tier option

2022-11-06 Thread Xiang, Haihao
On Wed, 2022-11-02 at 01:58 +0800, nyanmisaka wrote:
> Without this change, MSDK/VPL always defaults the HEVC tier to MAIN if the
> -level is specified.
> Also, according to the HEVC specs, only level >= 4 can support High Tier.
> 
> Signed-off-by: nyanmisaka 
> ---
>  libavcodec/qsvenc.c  | 5 -
>  libavcodec/qsvenc.h  | 1 +
>  libavcodec/qsvenc_hevc.c | 3 +++
>  3 files changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
> index 15e6936a65..5250717f0b 100644
> --- a/libavcodec/qsvenc.c
> +++ b/libavcodec/qsvenc.c
> @@ -614,8 +614,11 @@ static int init_video_param(AVCodecContext *avctx,
> QSVEncContext *q)
>  return AVERROR_BUG;
>  q->param.mfx.CodecId = ret;
>  
> -if (avctx->level > 0)
> +if (avctx->level > 0) {
>  q->param.mfx.CodecLevel = avctx->level;
> +if (avctx->codec_id == AV_CODEC_ID_HEVC && avctx->level >=
> MFX_LEVEL_HEVC_4)
> +q->param.mfx.CodecLevel |= q->tier;
> +}
>  
>  if (avctx->compression_level == FF_COMPRESSION_DEFAULT) {
>  avctx->compression_level = q->preset;
> diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h
> index d77bc0aee1..d64af90235 100644
> --- a/libavcodec/qsvenc.h
> +++ b/libavcodec/qsvenc.h
> @@ -180,6 +180,7 @@ typedef struct QSVEncContext {
>  int async_depth;
>  int idr_interval;
>  int profile;
> +int tier;
>  int preset;
>  int avbr_accuracy;
>  int avbr_convergence;
> diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c
> index 2a3f34b915..845fb93e9d 100644
> --- a/libavcodec/qsvenc_hevc.c
> +++ b/libavcodec/qsvenc_hevc.c
> @@ -258,6 +258,9 @@ static const AVOption options[] = {
>  #if QSV_VERSION_ATLEAST(1, 32)
>  { "scc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 =
> MFX_PROFILE_HEVC_SCC }, INT_MIN, INT_MAX, VE, "profile" },
>  #endif
> +{ "tier","Set the encoding tier (only level >= 4 can support high
> tier)", OFFSET(qsv.tier), AV_OPT_TYPE_INT, { .i64 = MFX_TIER_HEVC_HIGH },
> MFX_TIER_HEVC_MAIN, MFX_TIER_HEVC_HIGH, VE, "tier" },
> +{ "main",NULL, 0, AV_OPT_TYPE_CONST, { .i64 =
> MFX_TIER_HEVC_MAIN   }, INT_MIN, INT_MAX, VE, "tier" },
> +{ "high",NULL, 0, AV_OPT_TYPE_CONST, { .i64 =
> MFX_TIER_HEVC_HIGH   }, INT_MIN, INT_MAX, VE, "tier" },
>  
>  { "gpb", "1: GPB (generalized P/B frame); 0: regular P frame",
> OFFSET(qsv.gpb), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE},

Patchset applied, thx

-Haihao
 
___
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".


Re: [FFmpeg-devel] [PATCH] libavcodec/qsvenc: Add skip_frame support to qsvenc

2022-11-06 Thread Xiang, Haihao
On Wed, 2022-11-02 at 16:11 +0800, wenbin.chen-at-intel@ffmpeg.org wrote:
> From: Wenbin Chen 
> 
> Add skip_frame support to qsvenc. Use per-frame metadata
> "qsv_skip_frame" to control it. skip_frame option defines the behavior
> of qsv_skip_frame.
> no_skip: Frame skipping is disabled.
> insert_dummy: Encoder inserts into bitstream frame where all macroblocks
> are encoded as skipped.
> insert_nothing: Similar to insert_dummy, but encoder inserts nothing.
> The skipped frames are still used in brc. For example, gop still include
> skipped frames, and the frames after skipped frames will be larger in
> size.
> brc_only: skip_frame metadata indicates the number of missed frames
> before the current frame.
> 
> Signed-off-by: Wenbin Chen 
> ---
>  doc/encoders.texi| 36 
>  libavcodec/qsvenc.c  | 36 
>  libavcodec/qsvenc.h  | 13 +
>  libavcodec/qsvenc_h264.c |  1 +
>  libavcodec/qsvenc_hevc.c |  1 +
>  5 files changed, 87 insertions(+)
> 
> diff --git a/doc/encoders.texi b/doc/encoders.texi
> index 53dd02fd28..59f39d18f6 100644
> --- a/doc/encoders.texi
> +++ b/doc/encoders.texi
> @@ -3564,6 +3564,24 @@ bitrate, @var{target_bitrate}, within the accuracy
> range @var{avbr_accuracy},
>  after a @var{avbr_Convergence} period. This method does not follow HRD and
> the
>  instant bitrate is not capped or padded.
>  
> +@item @var{skip_frame}
> +Use per-frame metadata "qsv_skip_frame" to skip frame when encoding. This
> option
> +defines the usage of this metadata.
> +@table @samp
> +@item no_skip
> +Frame skipping is disabled.
> +@item insert_dummy
> +Encoder inserts into bitstream frame where all macroblocks are encoded as
> +skipped.
> +@item insert_nothing
> +Similar to insert_dummy, but encoder inserts nothing into bitstream. The
> skipped
> +frames are still used in brc. For example, gop still include skipped frames,
> and
> +the frames after skipped frames will be larger in size.
> +@item brc_only
> +skip_frame metadata indicates the number of missed frames before the current
> +frame.
> +@end table
> +
>  @end table
>  
>  @subsection HEVC Options
> @@ -3742,6 +3760,24 @@ bitrate, @var{target_bitrate}, within the accuracy
> range @var{avbr_accuracy},
>  after a @var{avbr_Convergence} period. This method does not follow HRD and
> the
>  instant bitrate is not capped or padded.
>  
> +@item @var{skip_frame}
> +Use per-frame metadata "qsv_skip_frame" to skip frame when encoding. This
> option
> +defines the usage of this metadata.
> +@table @samp
> +@item no_skip
> +Frame skipping is disabled.
> +@item insert_dummy
> +Encoder inserts into bitstream frame where all macroblocks are encoded as
> +skipped.
> +@item insert_nothing
> +Similar to insert_dummy, but encoder inserts nothing into bitstream. The
> skipped
> +frames are still used in brc. For example, gop still include skipped frames,
> and
> +the frames after skipped frames will be larger in size.
> +@item brc_only
> +skip_frame metadata indicates the number of missed frames before the current
> +frame.
> +@end table
> +
>  @end table
>  
>  @subsection MPEG2 Options
> diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
> index 0db774ea63..4bfa65c575 100644
> --- a/libavcodec/qsvenc.c
> +++ b/libavcodec/qsvenc.c
> @@ -329,6 +329,22 @@ static void dump_video_param(AVCodecContext *avctx,
> QSVEncContext *q,
> "MinQPI: %"PRIu8"; MaxQPI: %"PRIu8"; MinQPP: %"PRIu8"; MaxQPP:
> %"PRIu8"; MinQPB: %"PRIu8"; MaxQPB: %"PRIu8"\n",
> co2->MinQPI, co2->MaxQPI, co2->MinQPP, co2->MaxQPP, co2-
> >MinQPB, co2->MaxQPB);
>  av_log(avctx, AV_LOG_VERBOSE, "DisableDeblockingIdc: %"PRIu32" \n",
> co2->DisableDeblockingIdc);
> +
> +switch (co2->SkipFrame) {
> +case MFX_SKIPFRAME_NO_SKIP:
> +av_log(avctx, AV_LOG_VERBOSE, "SkipFrame: no_skip\n");
> +break;
> +case MFX_SKIPFRAME_INSERT_DUMMY:
> +av_log(avctx, AV_LOG_VERBOSE, "SkipFrame: insert_dummy\n");
> +break;
> +case MFX_SKIPFRAME_INSERT_NOTHING:
> +av_log(avctx, AV_LOG_VERBOSE, "SkipFrame: insert_nothing\n");
> +break;
> +case MFX_SKIPFRAME_BRC_ONLY:
> +av_log(avctx, AV_LOG_VERBOSE, "SkipFrame: brc_only\n");
> +break;
> +default: break;
> +}
>  }
>  
>  if (co3) {
> @@ -991,6 +1007,8 @@ static int init_video_param(AVCodecContext *avctx,
> QSVEncContext *q)
>  q->old_max_qp_b = q->max_qp_b;
>  if (q->mbbrc >= 0)
>  q->extco2.MBBRC = q->mbbrc ? MFX_CODINGOPTION_ON :
> MFX_CODINGOPTION_OFF;
> +if (q->skip_frame >= 0)
> +q->extco2.SkipFrame = q->skip_frame;
>  
>  q->extco2.Header.BufferId = MFX_EXTBUFF_CODING_OPTION2;
>  q->extco2.Header.BufferSz = sizeof(q->extco2);
> @@ -1911,6 +1929,19 @@ static int 

Re: [FFmpeg-devel] [PATCH v3 05/10] avformat: add demuxer and probe support for H266/VVC

2022-11-06 Thread myp...@gmail.com
On Thu, Nov 3, 2022 at 8:23 PM Thomas Siedel  wrote:
>
> Add demuxer to probe raw vvc and parse vvcc byte stream format.
>
> Signed-off-by: Thomas Siedel 
> ---
>  libavformat/Makefile |   1 +
>  libavformat/allformats.c |   1 +
>  libavformat/demux.c  |   7 +-
>  libavformat/vvc.c| 919 +++
>  libavformat/vvc.h|  99 +
>  libavformat/vvcdec.c |  61 +++
>  6 files changed, 1086 insertions(+), 2 deletions(-)
>  create mode 100644 libavformat/vvc.c
>  create mode 100644 libavformat/vvc.h
>  create mode 100644 libavformat/vvcdec.c
>
> diff --git a/libavformat/Makefile b/libavformat/Makefile
> index d7f198bf39..00ab4ded89 100644
> --- a/libavformat/Makefile
> +++ b/libavformat/Makefile
> @@ -595,6 +595,7 @@ OBJS-$(CONFIG_VOC_MUXER) += vocenc.o voc.o
>  OBJS-$(CONFIG_VPK_DEMUXER)   += vpk.o
>  OBJS-$(CONFIG_VPLAYER_DEMUXER)   += vplayerdec.o subtitles.o
>  OBJS-$(CONFIG_VQF_DEMUXER)   += vqf.o
> +OBJS-$(CONFIG_VVC_DEMUXER)   += vvcdec.o rawdec.o
>  OBJS-$(CONFIG_W64_DEMUXER)   += wavdec.o w64.o pcm.o
>  OBJS-$(CONFIG_W64_MUXER) += wavenc.o w64.o
>  OBJS-$(CONFIG_WAV_DEMUXER)   += wavdec.o pcm.o
> diff --git a/libavformat/allformats.c b/libavformat/allformats.c
> index 47c419a009..a4e3822681 100644
> --- a/libavformat/allformats.c
> +++ b/libavformat/allformats.c
> @@ -474,6 +474,7 @@ extern const AVOutputFormat ff_voc_muxer;
>  extern const AVInputFormat  ff_vpk_demuxer;
>  extern const AVInputFormat  ff_vplayer_demuxer;
>  extern const AVInputFormat  ff_vqf_demuxer;
> +extern const AVInputFormat  ff_vvc_demuxer;
>  extern const AVInputFormat  ff_w64_demuxer;
>  extern const AVOutputFormat ff_w64_muxer;
>  extern const AVInputFormat  ff_wav_demuxer;
> diff --git a/libavformat/demux.c b/libavformat/demux.c
> index 2dfd82a63c..8dbde23fcd 100644
> --- a/libavformat/demux.c
> +++ b/libavformat/demux.c
> @@ -120,6 +120,7 @@ static int set_codec_from_probe_data(AVFormatContext *s, 
> AVStream *st,
>  { "mp3",AV_CODEC_ID_MP3,  AVMEDIA_TYPE_AUDIO},
>  { "mpegvideo",  AV_CODEC_ID_MPEG2VIDEO,   AVMEDIA_TYPE_VIDEO},
>  { "truehd", AV_CODEC_ID_TRUEHD,   AVMEDIA_TYPE_AUDIO},
> +{ "vvc",AV_CODEC_ID_VVC,  AVMEDIA_TYPE_VIDEO},
>  { 0 }
>  };
>  int score;
> @@ -743,7 +744,8 @@ static int64_t select_from_pts_buffer(AVStream *st, 
> int64_t *pts_buffer, int64_t
>  {
>  FFStream *const sti = ffstream(st);
>  int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
> -   st->codecpar->codec_id != AV_CODEC_ID_HEVC;
> +   st->codecpar->codec_id != AV_CODEC_ID_HEVC &&
> +   st->codecpar->codec_id != AV_CODEC_ID_VVC;
>
>  if (!onein_oneout) {
>  int delay = sti->avctx->has_b_frames;
> @@ -933,7 +935,8 @@ static void compute_pkt_fields(AVFormatContext *s, 
> AVStream *st,
>  int64_t offset;
>  AVRational duration;
>  int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
> -   st->codecpar->codec_id != AV_CODEC_ID_HEVC;
> +   st->codecpar->codec_id != AV_CODEC_ID_HEVC &&
> +   st->codecpar->codec_id != AV_CODEC_ID_VVC;
>
>  if (s->flags & AVFMT_FLAG_NOFILLIN)
>  return;
> diff --git a/libavformat/vvc.c b/libavformat/vvc.c
> new file mode 100644
> index 00..b27a522009
> --- /dev/null
> +++ b/libavformat/vvc.c
> @@ -0,0 +1,919 @@
> +/*
> + * VVC helper functions for muxers
> + *
> + * Copyright (C) 2022, Thomas Siedel
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 
> USA
> + */
> +
> +#include "libavcodec/get_bits.h"
> +#include "libavcodec/golomb.h"
> +#include "libavcodec/vvc.h"
> +#include "libavutil/intreadwrite.h"
> +#include "avc.h"
> +#include "avio.h"
> +#include "avio_internal.h"
> +#include "vvc.h"
> +
> +typedef struct VVCCNALUnitArray {
> +uint8_t  array_completeness;
> +uint8_t  NAL_unit_type;
> +uint16_t num_nalus;
> +uint16_t *nal_unit_length;
> +uint8_t  **nal_unit;
> +} VVCCNALUnitArray;
> +
> +typedef 

[FFmpeg-devel] [PATCH 5/5] avcodec/clearvideo: Avoid allocations when decoding tiles

2022-11-06 Thread Andreas Rheinhardt
Up until now, the ClearVideo decoder separates parsing tiles
and actually using the parsed information: The information is
instead stored in structures which are constantly allocated
and freed. This commit changes this to use the information
immediately, avoiding said allocations. This e.g. reduced
the amount of allocations for [1] from 2,866,462 to 24,720.
For said sample decoding speed improved by 143%.

[1]: https://samples.ffmpeg.org/V-codecs/UCOD/AccordianDance-300.avi

Signed-off-by: Andreas Rheinhardt 
---
 libavcodec/clearvideo.c | 99 +
 1 file changed, 31 insertions(+), 68 deletions(-)

diff --git a/libavcodec/clearvideo.c b/libavcodec/clearvideo.c
index d3cbd71f72..e77661d187 100644
--- a/libavcodec/clearvideo.c
+++ b/libavcodec/clearvideo.c
@@ -59,13 +59,6 @@ typedef struct MVInfo {
 MV  *mv;
 } MVInfo;
 
-typedef struct TileInfo {
-uint16_tflags;
-int16_t bias;
-MV  mv;
-struct TileInfo *child[4];
-} TileInfo;
-
 typedef struct CLVContext {
 AVCodecContext *avctx;
 IDCTDSPContext idsp;
@@ -383,12 +376,16 @@ static int tile_do_block(AVCodecContext *avctx, AVFrame 
*dst, const AVFrame *src
 return ret;
 }
 
-static TileInfo *decode_tile_info(GetBitContext *gb, const LevelCodes *lc)
+static int decode_tile(AVCodecContext *avctx, GetBitContext *gb,
+   const LevelCodes *lc,
+   AVFrame *dst, const AVFrame *src,
+   int plane, int x, int y, int size,
+   MV root_mv, MV *pred)
 {
-TileInfo *ti;
 int i, flags = 0;
 int16_t bias = 0;
 MV mv = { 0 };
+int err;
 
 if (lc->flags_cb.table)
 flags = get_vlc2(gb, lc->flags_cb.table, CLV_VLC_BITS, 2);
@@ -403,7 +400,11 @@ static TileInfo *decode_tile_info(GetBitContext *gb, const 
LevelCodes *lc)
 mv.x = get_sbits(gb, 8);
 mv.y = get_sbits(gb, 8);
 }
+if (pred)
+mvi_update_prediction(pred, mv);
 }
+mv.x += root_mv.x;
+mv.y += root_mv.y;
 
 if (lc->bias_cb.table) {
 uint16_t bias_val = get_vlc2(gb, lc->bias_cb.table, CLV_VLC_BITS, 2);
@@ -415,55 +416,29 @@ static TileInfo *decode_tile_info(GetBitContext *gb, 
const LevelCodes *lc)
 }
 }
 
-ti = av_calloc(1, sizeof(*ti));
-if (!ti)
-return NULL;
-
-ti->flags = flags;
-ti->mv = mv;
-ti->bias = bias;
-
-if (ti->flags) {
-for (i = 0; i < 4; i++) {
-if (ti->flags & (1 << i)) {
-TileInfo *subti = decode_tile_info(gb, lc + 1);
-ti->child[i] = subti;
-}
-}
-}
-
-return ti;
-}
-
-static int restore_tree(AVCodecContext *avctx, AVFrame *dst, AVFrame *src,
-int plane, int x, int y, int size,
-TileInfo *tile, MV root_mv)
-{
-int ret;
-MV mv;
-
-mv.x = root_mv.x + tile->mv.x;
-mv.y = root_mv.y + tile->mv.y;
-
-if (!tile->flags) {
-ret = tile_do_block(avctx, dst, src, plane, x, y, mv.x, mv.y, size, 
tile->bias);
-} else {
-int i, hsize = size >> 1;
-
+if (flags) {
+int hsize = size >> 1;
 for (i = 0; i < 4; i++) {
 int xoff = (i & 2) == 0 ? 0 : hsize;
 int yoff = (i & 1) == 0 ? 0 : hsize;
 
-if (tile->child[i]) {
-ret = restore_tree(avctx, dst, src, plane, x + xoff, y + yoff, 
hsize, tile->child[i], root_mv);
-av_freep(>child[i]);
+if (flags & (1 << i)) {
+err = decode_tile(avctx, gb, lc + 1, dst, src, plane,
+  x + xoff, y + yoff, hsize, root_mv, NULL);
 } else {
-ret = tile_do_block(avctx, dst, src, plane, x + xoff, y + 
yoff, mv.x, mv.y, hsize, tile->bias);
+err = tile_do_block(avctx, dst, src, plane, x + xoff, y + yoff,
+mv.x, mv.y, hsize, bias);
 }
+if (err < 0)
+return err;
 }
+} else {
+err = tile_do_block(avctx, dst, src, plane, x, y, mv.x, mv.y, size, 
bias);
+if (err < 0)
+return err;
 }
 
-return ret;
+return 0;
 }
 
 static void extend_edges(AVFrame *buf, int tile_size)
@@ -604,38 +579,26 @@ static int clv_decode_frame(AVCodecContext *avctx, 
AVFrame *rframe,
 int x = i << c->tile_shift;
 int y = j << c->tile_shift;
 int size = 1 << c->tile_shift;
-TileInfo *tile;
 MV cmv;
 
-tile = decode_tile_info(>gb, [0]); // Y
-if (!tile)
-return AVERROR(ENOMEM);
-ret = restore_tree(avctx, c->pic, c->prev, 0, x, y, size, 
tile, mv);
+ret = decode_tile(avctx, >gb, [0], c->pic, c->prev, 
 // Y
+

[FFmpeg-devel] [PATCH 4/5] avcodec/clearvideo: Use const where appropriate

2022-11-06 Thread Andreas Rheinhardt
Signed-off-by: Andreas Rheinhardt 
---
 libavcodec/clearvideo.c | 15 ---
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/libavcodec/clearvideo.c b/libavcodec/clearvideo.c
index 11ae6ca9ad..d3cbd71f72 100644
--- a/libavcodec/clearvideo.c
+++ b/libavcodec/clearvideo.c
@@ -222,14 +222,15 @@ static int decode_mb(CLVContext *c, int x, int y)
 return 0;
 }
 
-static int copy_block(AVCodecContext *avctx, AVFrame *dst, AVFrame *src,
+static int copy_block(AVCodecContext *avctx, AVFrame *dst, const AVFrame *src,
   int plane, int x, int y, int dx, int dy, int size)
 {
 int shift = plane > 0;
 int sx = x + dx;
 int sy = y + dy;
 int sstride, dstride, soff, doff;
-uint8_t *sbuf, *dbuf;
+uint8_t *dbuf;
+const uint8_t *sbuf;
 int i;
 
 if (x < 0 || sx < 0 || y < 0 || sy < 0 ||
@@ -248,7 +249,7 @@ static int copy_block(AVCodecContext *avctx, AVFrame *dst, 
AVFrame *src,
 
 for (i = 0; i < size; i++) {
 uint8_t *dptr = [doff];
-uint8_t *sptr = [soff];
+const uint8_t *sptr = [soff];
 
 memcpy(dptr, sptr, size);
 doff += dstride;
@@ -258,7 +259,7 @@ static int copy_block(AVCodecContext *avctx, AVFrame *dst, 
AVFrame *src,
 return 0;
 }
 
-static int copyadd_block(AVCodecContext *avctx, AVFrame *dst, AVFrame *src,
+static int copyadd_block(AVCodecContext *avctx, AVFrame *dst, const AVFrame 
*src,
  int plane, int x, int y, int dx, int dy, int size, 
int bias)
 {
 int shift = plane > 0;
@@ -267,7 +268,7 @@ static int copyadd_block(AVCodecContext *avctx, AVFrame 
*dst, AVFrame *src,
 int sstride   = src->linesize[plane];
 int dstride   = dst->linesize[plane];
 int soff  = sx + sy * sstride;
-uint8_t *sbuf = src->data[plane];
+const uint8_t *sbuf = src->data[plane];
 int doff  = x + y * dstride;
 uint8_t *dbuf = dst->data[plane];
 int i, j;
@@ -281,7 +282,7 @@ static int copyadd_block(AVCodecContext *avctx, AVFrame 
*dst, AVFrame *src,
 
 for (j = 0; j < size; j++) {
 uint8_t *dptr = [doff];
-uint8_t *sptr = [soff];
+const uint8_t *sptr = [soff];
 
 for (i = 0; i < size; i++) {
 int val = sptr[i] + bias;
@@ -368,7 +369,7 @@ static void mvi_update_row(MVInfo *mvi)
 }
 }
 
-static int tile_do_block(AVCodecContext *avctx, AVFrame *dst, AVFrame *src,
+static int tile_do_block(AVCodecContext *avctx, AVFrame *dst, const AVFrame 
*src,
  int plane, int x, int y, int dx, int dy, int size, 
int bias)
 {
 int ret;
-- 
2.34.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 3/5] avcodec/clearvideo: Redo updating predicition

2022-11-06 Thread Andreas Rheinhardt
This is in preparation for further commits.

Signed-off-by: Andreas Rheinhardt 
---
 libavcodec/clearvideo.c | 24 
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/libavcodec/clearvideo.c b/libavcodec/clearvideo.c
index 6ea3d7b6a2..11ae6ca9ad 100644
--- a/libavcodec/clearvideo.c
+++ b/libavcodec/clearvideo.c
@@ -296,7 +296,7 @@ static int copyadd_block(AVCodecContext *avctx, AVFrame 
*dst, AVFrame *src,
 return 0;
 }
 
-static MV mvi_predict(MVInfo *mvi, int mb_x, int mb_y, MV diff)
+static MV *mvi_predict(MVInfo *mvi, int mb_x, int mb_y)
 {
 MV res, pred_mv;
 int left_mv, right_mv, top_mv, bot_mv;
@@ -336,10 +336,16 @@ static MV mvi_predict(MVInfo *mvi, int mb_x, int mb_y, MV 
diff)
 res.y = bot_mv;
 }
 
-mvi->mv[mvi->mb_stride + mb_x].x = res.x + diff.x;
-mvi->mv[mvi->mb_stride + mb_x].y = res.y + diff.y;
+mvi->mv[mvi->mb_stride + mb_x].x = res.x;
+mvi->mv[mvi->mb_stride + mb_x].y = res.y;
 
-return res;
+return >mv[mvi->mb_stride + mb_x];
+}
+
+static void mvi_update_prediction(MV *mv, MV diff)
+{
+mv->x += diff.x;
+mv->y += diff.y;
 }
 
 static void mvi_reset(MVInfo *mvi, int mb_w, int mb_h, int mb_size)
@@ -575,11 +581,13 @@ static int clv_decode_frame(AVCodecContext *avctx, 
AVFrame *rframe,
 
 for (j = 0; j < c->pmb_height; j++) {
 for (i = 0; i < c->pmb_width; i++) {
+MV *mvp, mv;
 if (get_bits_left(>gb) <= 0)
 return AVERROR_INVALIDDATA;
-if (get_bits1(>gb)) {
-MV mv = mvi_predict(>mvi, i, j, zero_mv);
 
+mvp = mvi_predict(>mvi, i, j);
+mv  = *mvp;
+if (get_bits1(>gb)) {
 for (plane = 0; plane < 3; plane++) {
 int16_t x = plane == 0 ? i << c->tile_shift : i << 
(c->tile_shift - 1);
 int16_t y = plane == 0 ? j << c->tile_shift : j << 
(c->tile_shift - 1);
@@ -596,15 +604,15 @@ static int clv_decode_frame(AVCodecContext *avctx, 
AVFrame *rframe,
 int y = j << c->tile_shift;
 int size = 1 << c->tile_shift;
 TileInfo *tile;
-MV mv, cmv;
+MV cmv;
 
 tile = decode_tile_info(>gb, [0]); // Y
 if (!tile)
 return AVERROR(ENOMEM);
-mv = mvi_predict(>mvi, i, j, tile->mv);
 ret = restore_tree(avctx, c->pic, c->prev, 0, x, y, size, 
tile, mv);
 if (ret < 0)
 mb_ret = ret;
+mvi_update_prediction(mvp, tile->mv);
 x = i << (c->tile_shift - 1);
 y = j << (c->tile_shift - 1);
 size = 1 << (c->tile_shift - 1);
-- 
2.34.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 2/5] avcodec/clearvideo: Move tile_do_block() upwards

2022-11-06 Thread Andreas Rheinhardt
Will avoid a forward-declaration later.

Signed-off-by: Andreas Rheinhardt 
---
 libavcodec/clearvideo.c | 28 ++--
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/libavcodec/clearvideo.c b/libavcodec/clearvideo.c
index 82311bc645..6ea3d7b6a2 100644
--- a/libavcodec/clearvideo.c
+++ b/libavcodec/clearvideo.c
@@ -362,6 +362,20 @@ static void mvi_update_row(MVInfo *mvi)
 }
 }
 
+static int tile_do_block(AVCodecContext *avctx, AVFrame *dst, AVFrame *src,
+ int plane, int x, int y, int dx, int dy, int size, 
int bias)
+{
+int ret;
+
+if (!bias) {
+ret = copy_block(avctx, dst, src, plane, x, y, dx, dy, size);
+} else {
+ret = copyadd_block(avctx, dst, src, plane, x, y, dx, dy, size, bias);
+}
+
+return ret;
+}
+
 static TileInfo *decode_tile_info(GetBitContext *gb, const LevelCodes *lc)
 {
 TileInfo *ti;
@@ -414,20 +428,6 @@ static TileInfo *decode_tile_info(GetBitContext *gb, const 
LevelCodes *lc)
 return ti;
 }
 
-static int tile_do_block(AVCodecContext *avctx, AVFrame *dst, AVFrame *src,
- int plane, int x, int y, int dx, int dy, int size, 
int bias)
-{
-int ret;
-
-if (!bias) {
-ret = copy_block(avctx, dst, src, plane, x, y, dx, dy, size);
-} else {
-ret = copyadd_block(avctx, dst, src, plane, x, y, dx, dy, size, bias);
-}
-
-return ret;
-}
-
 static int restore_tree(AVCodecContext *avctx, AVFrame *dst, AVFrame *src,
 int plane, int x, int y, int size,
 TileInfo *tile, MV root_mv)
-- 
2.34.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 1/5] avcodec/clearvideo: Remove unnecessary level parameter

2022-11-06 Thread Andreas Rheinhardt
Signed-off-by: Andreas Rheinhardt 
---
 libavcodec/clearvideo.c | 23 +++
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/libavcodec/clearvideo.c b/libavcodec/clearvideo.c
index 4d6549560b..82311bc645 100644
--- a/libavcodec/clearvideo.c
+++ b/libavcodec/clearvideo.c
@@ -362,19 +362,18 @@ static void mvi_update_row(MVInfo *mvi)
 }
 }
 
-static TileInfo *decode_tile_info(GetBitContext *gb, const LevelCodes *lc, int 
level)
+static TileInfo *decode_tile_info(GetBitContext *gb, const LevelCodes *lc)
 {
 TileInfo *ti;
 int i, flags = 0;
 int16_t bias = 0;
 MV mv = { 0 };
 
-if (lc[level].flags_cb.table) {
-flags = get_vlc2(gb, lc[level].flags_cb.table, CLV_VLC_BITS, 2);
-}
+if (lc->flags_cb.table)
+flags = get_vlc2(gb, lc->flags_cb.table, CLV_VLC_BITS, 2);
 
-if (lc[level].mv_cb.table) {
-uint16_t mv_code = get_vlc2(gb, lc[level].mv_cb.table, CLV_VLC_BITS, 
2);
+if (lc->mv_cb.table) {
+uint16_t mv_code = get_vlc2(gb, lc->mv_cb.table, CLV_VLC_BITS, 2);
 
 if (mv_code != MV_ESC) {
 mv.x = (int8_t)(mv_code & 0xff);
@@ -385,8 +384,8 @@ static TileInfo *decode_tile_info(GetBitContext *gb, const 
LevelCodes *lc, int l
 }
 }
 
-if (lc[level].bias_cb.table) {
-uint16_t bias_val = get_vlc2(gb, lc[level].bias_cb.table, 
CLV_VLC_BITS, 2);
+if (lc->bias_cb.table) {
+uint16_t bias_val = get_vlc2(gb, lc->bias_cb.table, CLV_VLC_BITS, 2);
 
 if (bias_val != BIAS_ESC) {
 bias = (int16_t)(bias_val);
@@ -406,7 +405,7 @@ static TileInfo *decode_tile_info(GetBitContext *gb, const 
LevelCodes *lc, int l
 if (ti->flags) {
 for (i = 0; i < 4; i++) {
 if (ti->flags & (1 << i)) {
-TileInfo *subti = decode_tile_info(gb, lc, level + 1);
+TileInfo *subti = decode_tile_info(gb, lc + 1);
 ti->child[i] = subti;
 }
 }
@@ -599,7 +598,7 @@ static int clv_decode_frame(AVCodecContext *avctx, AVFrame 
*rframe,
 TileInfo *tile;
 MV mv, cmv;
 
-tile = decode_tile_info(>gb, [0], 0); // Y
+tile = decode_tile_info(>gb, [0]); // Y
 if (!tile)
 return AVERROR(ENOMEM);
 mv = mvi_predict(>mvi, i, j, tile->mv);
@@ -614,14 +613,14 @@ static int clv_decode_frame(AVCodecContext *avctx, 
AVFrame *rframe,
 cmv.x /= 2;
 cmv.y /= 2;
 av_freep();
-tile = decode_tile_info(>gb, [4], 0); // U
+tile = decode_tile_info(>gb, [4]); // U
 if (!tile)
 return AVERROR(ENOMEM);
 ret = restore_tree(avctx, c->pic, c->prev, 1, x, y, size, 
tile, cmv);
 if (ret < 0)
 mb_ret = ret;
 av_freep();
-tile = decode_tile_info(>gb, [7], 0); // V
+tile = decode_tile_info(>gb, [7]); // V
 if (!tile)
 return AVERROR(ENOMEM);
 ret = restore_tree(avctx, c->pic, c->prev, 2, x, y, size, 
tile, cmv);
-- 
2.34.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-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH] fftools/ffprobe: Loop over correct number of streams when flushing decoders

2022-11-06 Thread Stefano Sabatini
On Sun, Nov 6, 2022 at 12:23 PM Derek Buitenhuis
 wrote:
>
> On 11/3/2022 3:17 PM, Derek Buitenhuis wrote:
> > ---
> >  fftools/ffprobe.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
>
> Ping.

>FFprobe does check for this an reallocate
anD reallocate

LGTM, thanks.
___
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".


Re: [FFmpeg-devel] [PATCH 1/4] avcodec/dts2pts_bsf: Check ctx for NULL before ff_cbs_flush()

2022-11-06 Thread James Almer

On 11/5/2022 5:16 PM, Michael Niedermayer wrote:

Fixes: null pointer dereference
Fixes: 
52155/clusterfuzz-testcase-minimized-ffmpeg_BSF_DTS2PTS_fuzzer-5760107527143424

Found-by: continuous fuzzing process 
https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer 
---
  libavcodec/dts2pts_bsf.c | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavcodec/dts2pts_bsf.c b/libavcodec/dts2pts_bsf.c
index bf20b1ec8a..8142562d2c 100644
--- a/libavcodec/dts2pts_bsf.c
+++ b/libavcodec/dts2pts_bsf.c
@@ -505,7 +505,8 @@ static void dts2pts_flush(AVBSFContext *ctx)
  s->root = NULL;
  
  ff_cbs_fragment_reset(>au);

-ff_cbs_flush(s->cbc);
+if (s->cbc)
+ff_cbs_flush(s->cbc);
  }
  
  static void dts2pts_close(AVBSFContext *ctx)


Should be ok.
___
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".


Re: [FFmpeg-devel] [PATCH] avformat/movenc: Remove experimental status of TrueHD-in-MP4 muxing (mlpa)

2022-11-06 Thread Carl Eugen Hoyos
Am Sa., 5. Nov. 2022 um 22:31 Uhr schrieb Nomis101 :
>
> Support for mlpa muxing was added back in 2019:
> http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=808a6717e0c584738c60a109afd6d47f4973d619
> But it was hidden back then behind FF_COMPLIANCE_EXPERIMENTAL, because it was 
> new and there was no
> support from other applications.
>
> In the meantime there is support in MediaInfo: MediaArea/MediaInfoLib#1258
> For VLC: videolan/vlc@9c49f40
> Since version 7.3.4 for Infuse: 
> https://community.firecore.com/t/dolby-mlp-mlpa-codec-support/26100/31
> And mpv does support this as well.

If there was ever a good reason to make this feature experimental,
I don't think these applications change the situation.

Carl Eugen
___
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".


Re: [FFmpeg-devel] [RFC]lavc/tiff: Support dng cropping

2022-11-06 Thread Carl Eugen Hoyos
Am Mo., 31. Okt. 2022 um 13:39 Uhr schrieb Anton Khirnov :
>
> Quoting Carl Eugen Hoyos (2022-10-23 20:46:57)
> > Am So., 23. Okt. 2022 um 16:35 Uhr schrieb Carl Eugen Hoyos
> > :
> > >
> > > Hi!
> > >
> > > I tried to implement dng cropping, it unfortunately can only work with
> > > -flags +unaligned, is there an alternative to simply print a warning
> > > if the flag was not supplied?
> >
> > New patch with more parentheses attached.
> >
> > Please comment, Carl Eugen
> >
> > From 1bfe065564604659b7703e75b1bb750c031fdc81 Mon Sep 17 00:00:00 2001
> > From: Carl Eugen Hoyos 
> > Date: Sun, 23 Oct 2022 16:31:53 +0200
> > Subject: [PATCH] lavc/tiff: Support dng cropping,
>
> A FATE test would be nice.
>
> > needs -flags +unaligned
>
> AFAICT this is not entirely correct. Applying left cropping in
> libavcodec might need AV_CODEC_FLAG_UNALIGNED, but not always. Users may
> also set apply_cropping=0 and apply cropping themselves.
>
> The decoder should not care about it in any case, since it's handled in
> the generic code.
>
> >
> > Fixes samples mentioned in ticket #4364.
> > ---
> >  libavcodec/tiff.c | 83 +++
> >  libavcodec/tiff.h |  3 ++
> >  2 files changed, 86 insertions(+)
> >
> > diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
> > index fd9db18c0b..33edff8213 100644
> > --- a/libavcodec/tiff.c
> > +++ b/libavcodec/tiff.c
> > @@ -1492,6 +1492,89 @@ static int tiff_decode_tag(TiffContext *s, AVFrame 
> > *frame)
> >  case DNG_WHITE_LEVEL:
> >  s->white_level = value;
> >  break;
> > +case DNG_CROP_ORIGIN:
> > +if (count != 2 || type != TIFF_SHORT && type != TIFF_LONG && type 
> > != TIFF_RATIONAL) {
>
> This condition could definitely use more parentheses. Same in two checks
> below.
>
> > +av_log(s->avctx, AV_LOG_WARNING, "Invalid crop origin (count: 
> > %d, type: %d)\n", count, type);
> > +break;
> > +}
> > +if (type == TIFF_RATIONAL) {
> > +unsigned denum1, denum2;
> > +value  = ff_tget(>gb, TIFF_LONG, s->le);
> > +denum1 = ff_tget(>gb, TIFF_LONG, s->le);
> > +value2 = ff_tget(>gb, TIFF_LONG, s->le);
> > +denum2 = ff_tget(>gb, TIFF_LONG, s->le);
> > +if (denum1 != 1 || denum2 != 1) {
> > +av_log(s->avctx, AV_LOG_WARNING, "Unsupported crop 
> > origin\n");
> > +break;
> > +}
> > +} else {
> > +value  = ff_tget(>gb, type, s->le);
> > +value2 = ff_tget(>gb, type, s->le);
> > +}
>
> This entire block is duplicated for DNG_CROP_ORIGIN and DNG_CROP_SIZE,
> you could split it into a function.
>
> > +av_log(s->avctx, AV_LOG_DEBUG, "dng crop origin: %d/%d\n", value, 
> > value2);
> > +if (value >= s->width || value2 >= s->height) {
> > +av_log(s->avctx, AV_LOG_WARNING, "Invalid crop origin 
> > (%d/%d)\n", value, value2);
> > +break;
> > +}
> > +if ((value || value2) && !(s->avctx->flags & 
> > AV_CODEC_FLAG_UNALIGNED)) {
> > +av_log(s->avctx, AV_LOG_WARNING,"Correct DNG cropping needs 
> > -flags +unaligned\n");
> > +} else {
> > +frame->crop_left = value;
> > +frame->crop_top = value2;
> > +}
> > +break;
> > +case DNG_CROP_SIZE:
> > +if (count != 2 || type != TIFF_SHORT && type != TIFF_LONG && type 
> > != TIFF_RATIONAL) {
> > +av_log(s->avctx, AV_LOG_WARNING, "Invalid crop size (count: 
> > %d, type: %d)\n", count, type);
> > +break;
> > +}
> > +if (type == TIFF_RATIONAL) {
> > +unsigned denum1, denum2;
> > +value  = ff_tget(>gb, TIFF_LONG, s->le);
> > +denum1 = ff_tget(>gb, TIFF_LONG, s->le);
> > +value2 = ff_tget(>gb, TIFF_LONG, s->le);
> > +denum2 = ff_tget(>gb, TIFF_LONG, s->le);
> > +if (denum1 != 1 || denum2 != 1) {
> > +av_log(s->avctx, AV_LOG_WARNING, "Unsupported crop 
> > size\n");
> > +break;
> > +}
> > +} else {
> > +value  = ff_tget(>gb, type, s->le);
> > +value2 = ff_tget(>gb, type, s->le);
> > +}
> > +av_log(s->avctx, AV_LOG_DEBUG, "dng crop size %d x %d\n", value, 
> > value2);
> > +if (value + frame->crop_left >= s->width || value2 + 
> > frame->crop_top >= s->height) {
>
> value/value2 can be arbitrary 32bit integers, so the addition can
> overflow. Move crop_left/top to the other side of the comparison, since
> they are known to be smaller than width/height. Analogously for
> DNG_ACTIVE_AREA.

New patch attached.

Please comment, Carl Eugen


0001-lavc-tiff-Support-dng-cropping.patch
Description: Binary data
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link 

Re: [FFmpeg-devel] [PATCH] avformat/movenc: Remove experimental status of TrueHD-in-MP4 muxing (mlpa)

2022-11-06 Thread James Almer

On 11/5/2022 6:31 PM, Nomis101 wrote:
Support for mlpa muxing was added back in 2019: 
http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=808a6717e0c584738c60a109afd6d47f4973d619
But it was hidden back then behind FF_COMPLIANCE_EXPERIMENTAL, because 
it was new and there was no support from other applications.


In the meantime there is support in MediaInfo: MediaArea/MediaInfoLib#1258

For VLC: videolan/vlc@9c49f40

Since version 7.3.4 for Infuse: 
https://community.firecore.com/t/dolby-mlp-mlpa-codec-support/26100/31

And mpv does support this as well.
So, there is no need anymore to hide this behind 
FF_COMPLIANCE_EXPERIMENTAL. Also, it should be the user's responsibility 
to choose this only if the user's software/hardware supports it.
Therefore, this patch removes the experimental status of TrueHD-in-MP4 
muxing.


Signed-off-by: Nomis101 
---
  libavformat/movenc.c | 1 -
  1 file changed, 1 deletion(-)

diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 754f95912a..50f1831860 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -7157,7 +7157,6 @@ static int mov_init(AVFormatContext *s)
  }
  }
  if (track->par->codec_id == AV_CODEC_ID_FLAC ||
-    track->par->codec_id == AV_CODEC_ID_TRUEHD ||
  track->par->codec_id == AV_CODEC_ID_OPUS) {
  if (track->mode != MODE_MP4) {
  av_log(s, AV_LOG_ERROR, "%s only supported in 
MP4.\n", avcodec_get_name(track->par->codec_id));


This is wrong. You want to remove the check for experimental flag when 
using truehd that's after this.
This patch as is is preventing other checks from being done (like 
ensuring truehd is only muxed on mp4 output).

___
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".


Re: [FFmpeg-devel] [PATCH] avformat/movenc: Remove experimental status of TrueHD-in-MP4 muxing (mlpa)

2022-11-06 Thread James Almer

On 11/6/2022 6:40 PM, Nomis101 wrote:

Am 05.11.22 um 21:31 schrieb Nomis101:
Support for mlpa muxing was added back in 2019: 
http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=808a6717e0c584738c60a109afd6d47f4973d619
But it was hidden back then behind FF_COMPLIANCE_EXPERIMENTAL, because 
it was new and there was no support from other applications.


In the meantime there is support in MediaInfo: 
MediaArea/MediaInfoLib#1258


For VLC: videolan/vlc@9c49f40

Since version 7.3.4 for Infuse: 
https://community.firecore.com/t/dolby-mlp-mlpa-codec-support/26100/31

And mpv does support this as well.
So, there is no need anymore to hide this behind 
FF_COMPLIANCE_EXPERIMENTAL. Also, it should be the user's 
responsibility to choose this only if the user's software/hardware 
supports it.
Therefore, this patch removes the experimental status of TrueHD-in-MP4 
muxing.


Signed-off-by: Nomis101 
---
  libavformat/movenc.c | 1 -
  1 file changed, 1 deletion(-)

diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 754f95912a..50f1831860 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -7157,7 +7157,6 @@ static int mov_init(AVFormatContext *s)
  }
  }
  if (track->par->codec_id == AV_CODEC_ID_FLAC ||
-    track->par->codec_id == AV_CODEC_ID_TRUEHD ||
  track->par->codec_id == AV_CODEC_ID_OPUS) {
  if (track->mode != MODE_MP4) {
  av_log(s, AV_LOG_ERROR, "%s only supported in 
MP4.\n", avcodec_get_name(track->par->codec_id));



Hi all. Patchwork does say something about "Failed to apply patch". Is 
this somehing I should worry about? And if yes, how to fix it? It has 
been properly generated using git format-patch.


Did you make the patch on top of latest git head (master branch)? It 
definitely doesn't apply as is.

___
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".


Re: [FFmpeg-devel] [PATCH] avformat/movenc: Remove experimental status of TrueHD-in-MP4 muxing (mlpa)

2022-11-06 Thread Nomis101

Am 05.11.22 um 21:31 schrieb Nomis101:
Support for mlpa muxing was added back in 2019: 
http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=808a6717e0c584738c60a109afd6d47f4973d619
But it was hidden back then behind FF_COMPLIANCE_EXPERIMENTAL, because it was new and there was no 
support from other applications.


In the meantime there is support in MediaInfo: MediaArea/MediaInfoLib#1258

For VLC: videolan/vlc@9c49f40

Since version 7.3.4 for Infuse: 
https://community.firecore.com/t/dolby-mlp-mlpa-codec-support/26100/31
And mpv does support this as well.
So, there is no need anymore to hide this behind FF_COMPLIANCE_EXPERIMENTAL. Also, it should be the 
user's responsibility to choose this only if the user's software/hardware supports it.

Therefore, this patch removes the experimental status of TrueHD-in-MP4 muxing.

Signed-off-by: Nomis101 
---
  libavformat/movenc.c | 1 -
  1 file changed, 1 deletion(-)

diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 754f95912a..50f1831860 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -7157,7 +7157,6 @@ static int mov_init(AVFormatContext *s)
  }
  }
  if (track->par->codec_id == AV_CODEC_ID_FLAC ||
-    track->par->codec_id == AV_CODEC_ID_TRUEHD ||
  track->par->codec_id == AV_CODEC_ID_OPUS) {
  if (track->mode != MODE_MP4) {
  av_log(s, AV_LOG_ERROR, "%s only supported in MP4.\n", 
avcodec_get_name(track->par->codec_id));



Hi all. Patchwork does say something about "Failed to apply patch". Is this somehing I should worry 
about? And if yes, how to fix it? It has been properly generated using git format-patch.

___
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".


[FFmpeg-devel] [PATCH 2/2] avdevice/avfoundation: convert to new channel layout-API

2022-11-06 Thread James Almer
Signed-off-by: James Almer 
---
Untested.

 libavdevice/avfoundation.m | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/libavdevice/avfoundation.m b/libavdevice/avfoundation.m
index c9de93f774..36ad834753 100644
--- a/libavdevice/avfoundation.m
+++ b/libavdevice/avfoundation.m
@@ -706,8 +706,7 @@ static int get_audio_config(AVFormatContext *s)
 
 stream->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
 stream->codecpar->sample_rate= basic_desc->mSampleRate;
-stream->codecpar->channels   = basic_desc->mChannelsPerFrame;
-stream->codecpar->channel_layout = 
av_get_default_channel_layout(stream->codecpar->channels);
+av_channel_layout_default(>codecpar->ch_layout, 
basic_desc->mChannelsPerFrame);
 
 ctx->audio_channels= basic_desc->mChannelsPerFrame;
 ctx->audio_bits_per_sample = basic_desc->mBitsPerChannel;
-- 
2.38.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 1/2] avdevice/audiotoolbox: convert to new channel layout-API

2022-11-06 Thread James Almer
Signed-off-by: James Almer 
---
Untested.

 libavdevice/audiotoolbox.m | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/libavdevice/audiotoolbox.m b/libavdevice/audiotoolbox.m
index 0cb97b5e46..27a1fd4a78 100644
--- a/libavdevice/audiotoolbox.m
+++ b/libavdevice/audiotoolbox.m
@@ -173,7 +173,7 @@ static av_cold int at_write_header(AVFormatContext *avctx)
 device_format.mFormatFlags  |= (codecpar->codec_id == 
AV_CODEC_ID_PCM_S16BE) ? kAudioFormatFlagIsBigEndian : 0;
 device_format.mFormatFlags  |= (codecpar->codec_id == 
AV_CODEC_ID_PCM_S24BE) ? kAudioFormatFlagIsBigEndian : 0;
 device_format.mFormatFlags  |= (codecpar->codec_id == 
AV_CODEC_ID_PCM_S32BE) ? kAudioFormatFlagIsBigEndian : 0;
-device_format.mChannelsPerFrame  = codecpar->channels;
+device_format.mChannelsPerFrame  = codecpar->ch_layout.nb_channels;
 device_format.mBitsPerChannel= (codecpar->codec_id == 
AV_NE(AV_CODEC_ID_PCM_S24BE, AV_CODEC_ID_PCM_S24LE)) ? 24 : 
(av_get_bytes_per_sample(codecpar->format) << 3);
 device_format.mBytesPerFrame = (device_format.mBitsPerChannel >> 3) * 
device_format.mChannelsPerFrame;
 device_format.mFramesPerPacket   = 1;
@@ -193,9 +193,9 @@ static av_cold int at_write_header(AVFormatContext *avctx)
 av_log(ctx, AV_LOG_DEBUG, "device_format.mFormatFlags  |= %s\n", 
(codecpar->codec_id == AV_CODEC_ID_PCM_S24BE) ? "kAudioFormatFlagIsBigEndian" : 
"0");
 av_log(ctx, AV_LOG_DEBUG, "device_format.mFormatFlags  |= %s\n", 
(codecpar->codec_id == AV_CODEC_ID_PCM_S32BE) ? "kAudioFormatFlagIsBigEndian" : 
"0");
 av_log(ctx, AV_LOG_DEBUG, "device_format.mFormatFlags  == %i\n", 
device_format.mFormatFlags);
-av_log(ctx, AV_LOG_DEBUG, "device_format.mChannelsPerFrame  = %i\n", 
codecpar->channels);
+av_log(ctx, AV_LOG_DEBUG, "device_format.mChannelsPerFrame  = %i\n", 
codecpar->ch_layout.nb_channels);
 av_log(ctx, AV_LOG_DEBUG, "device_format.mBitsPerChannel= %i\n", 
av_get_bytes_per_sample(codecpar->format) << 3);
-av_log(ctx, AV_LOG_DEBUG, "device_format.mBytesPerFrame = %i\n", 
(device_format.mBitsPerChannel >> 3) * codecpar->channels);
+av_log(ctx, AV_LOG_DEBUG, "device_format.mBytesPerFrame = %i\n", 
(device_format.mBitsPerChannel >> 3) * codecpar->ch_layout.nb_channels);
 av_log(ctx, AV_LOG_DEBUG, "device_format.mBytesPerPacket= %i\n", 
device_format.mBytesPerFrame);
 av_log(ctx, AV_LOG_DEBUG, "device_format.mFramesPerPacket   = %i\n", 1);
 av_log(ctx, AV_LOG_DEBUG, "device_format.mReserved  = %i\n", 0);
-- 
2.38.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 2/2]lavc/audiotoolboxdec: Support 20/24/32bit Apple Lossless decoding

2022-11-06 Thread Carl Eugen Hoyos
Hi!

Attached patch allows default decoding to s32 for 20-, 24- and 32-bit alac.

Please comment, Carl Eugen


0002-lavc-audiotoolboxdec-Support-20-24-32bit-Apple-Lossl.patch
Description: Binary data
___
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".


[FFmpeg-devel] [PATCH 1/2]lavc/audiotoolboxdec: Reorder decoder initialization

2022-11-06 Thread Carl Eugen Hoyos
Hi!

Attached patch should not change decoder behaviour, it is only meant
to simplify the second patch.

Please comment, Carl Eugen


0001-lavc-audiotoolboxdec-Reorder-decoder-initialization.patch
Description: Binary data
___
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".


Re: [FFmpeg-devel] [PATCH v9 00/25] Subtitle Filtering 2022

2022-11-06 Thread Soft Works



> -Original Message-
> From: ffmpegagent 
> Sent: Tuesday, October 25, 2022 11:13 AM
> To: ffmpeg-devel@ffmpeg.org
> Cc: softworkz 
> Subject: [PATCH v9 00/25] Subtitle Filtering 2022
> 
> 
> Subtitle Filtering 2022
> ===
> 
> This is a substantial update to the earlier subtitle filtering patch
> series.
> A primary goal has been to address others' concerns as much as
> possible on
> one side and to provide more clarity and control over the way things
> are
> working. Clarity is is specifically important to allow for a better
> understanding of the need for a subtitle start pts value that can be
> different from the frame's pts value. This is done by refactoring the
> subtitle timing fields in AVFrame, adding a frame field to indicate
> repeated
> subtitle frames, and finally the full removal of the heartbeat
> functionality, replaced by a new 'subfeed' filter that provides
> different
> modes for arbitrating subtitle frames in a filter graph. Finally,
> each
> subtitle filter's documentation has been amended by a section
> describing the
> filter's timeline behavior (in v3 update).

Another PING.

I'm not aware of any unanswered questions or pending objections.

Thanks,
softworkz
___
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".


Re: [FFmpeg-devel] Rework color quantization in palette{gen,use}

2022-11-06 Thread Soft Works


> -Original Message-
> From: ffmpeg-devel  On Behalf Of
> Clément Bœsch
> Sent: Saturday, November 5, 2022 4:26 PM
> To: ffmpeg-devel@ffmpeg.org
> Subject: [FFmpeg-devel] Rework color quantization in palette{gen,use}
> 
> Hi,
> 
> This patchset essentially fixes a few core problems in these filters
> and
> switches to a perceptual model.
> 
> I've generated a report for each key commit on this (temporary) page:
> http://big.pkh.me/pal/ (warning: heavy page, ~500M; I did try to add
> some lazy
> loading of the images but I'm not sure it's actually working as
> expected).

Comparing the results for the known and simple "rainbow O" example reveals
that the proposed implementation seems to be even inferior to the current 
code and even farther away from what is possible to achieve:

https://gist.github.com/softworkz/e310e3c84a338f98977d70b09e3e3f4f

Regards,
softworkz
___
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".


[FFmpeg-devel] [PATCH] avcodec: Remove unnecessary fft, dct inclusions

2022-11-06 Thread Andreas Rheinhardt
Also remove some internal.h inclusions which have been
unnecessarily added recently.

Signed-off-by: Andreas Rheinhardt 
---
 libavcodec/ac3enc.c | 1 -
 libavcodec/ac3enc_fixed.c   | 1 -
 libavcodec/atrac3plusdsp.c  | 2 --
 libavcodec/proresenc_anatoliy.c | 1 -
 libavcodec/synth_filter.c   | 1 -
 libavcodec/twinvq.c | 1 -
 libavcodec/twinvq.h | 1 -
 7 files changed, 8 deletions(-)

diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index f8ec4e199e..3cb4e5f029 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -48,7 +48,6 @@
 #include "ac3.h"
 #include "ac3defs.h"
 #include "ac3tab.h"
-#include "fft.h"
 #include "ac3enc.h"
 #include "eac3enc.h"
 
diff --git a/libavcodec/ac3enc_fixed.c b/libavcodec/ac3enc_fixed.c
index f1f573bb72..5a5f1cc2e9 100644
--- a/libavcodec/ac3enc_fixed.c
+++ b/libavcodec/ac3enc_fixed.c
@@ -27,7 +27,6 @@
  */
 
 #define AC3ENC_FLOAT 0
-#include "internal.h"
 #include "audiodsp.h"
 #include "ac3enc.h"
 #include "codec_internal.h"
diff --git a/libavcodec/atrac3plusdsp.c b/libavcodec/atrac3plusdsp.c
index 7dd3d7a728..802f12aec5 100644
--- a/libavcodec/atrac3plusdsp.c
+++ b/libavcodec/atrac3plusdsp.c
@@ -31,9 +31,7 @@
 #include "libavutil/libm.h"
 #include "libavutil/mem_internal.h"
 
-#include "avcodec.h"
 #include "sinewin.h"
-#include "fft.h"
 #include "atrac3plus.h"
 
 /**
diff --git a/libavcodec/proresenc_anatoliy.c b/libavcodec/proresenc_anatoliy.c
index 5fa5f1fd69..bd1b70cc5d 100644
--- a/libavcodec/proresenc_anatoliy.c
+++ b/libavcodec/proresenc_anatoliy.c
@@ -31,7 +31,6 @@
 #include "libavutil/opt.h"
 #include "avcodec.h"
 #include "codec_internal.h"
-#include "dct.h"
 #include "encode.h"
 #include "internal.h"
 #include "profiles.h"
diff --git a/libavcodec/synth_filter.c b/libavcodec/synth_filter.c
index d6c4d1bf10..f90c6be7a7 100644
--- a/libavcodec/synth_filter.c
+++ b/libavcodec/synth_filter.c
@@ -19,7 +19,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "fft.h"
 #include "dcadct.h"
 #include "dcamath.h"
 #include "synth_filter.h"
diff --git a/libavcodec/twinvq.c b/libavcodec/twinvq.c
index 85eca9fc5c..4cc0583f8a 100644
--- a/libavcodec/twinvq.c
+++ b/libavcodec/twinvq.c
@@ -26,7 +26,6 @@
 #include "libavutil/float_dsp.h"
 #include "avcodec.h"
 #include "decode.h"
-#include "fft.h"
 #include "lsp.h"
 #include "metasound_twinvq_data.h"
 #include "sinewin.h"
diff --git a/libavcodec/twinvq.h b/libavcodec/twinvq.h
index 3ce096f90a..84f4e51438 100644
--- a/libavcodec/twinvq.h
+++ b/libavcodec/twinvq.h
@@ -30,7 +30,6 @@
 #include "libavutil/common.h"
 #include "libavutil/float_dsp.h"
 #include "avcodec.h"
-#include "internal.h"
 
 enum TwinVQCodec {
 TWINVQ_CODEC_VQF,
-- 
2.34.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-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 1/7] avcodec/bonk: Use unsigned in predictor_calc_error() to avoid undefined overflows

2022-11-06 Thread Paul B Mahol
On 11/6/22, Michael Niedermayer  wrote:
> Fixes: signed integer overflow: 22 * -2107998208 cannot be represented in
> type 'int'
> Fixes:
> 51363/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_BONK_fuzzer-5660734784143360
>
> Found-by: continuous fuzzing process
> https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> Signed-off-by: Michael Niedermayer 
> ---
>  libavcodec/bonk.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/libavcodec/bonk.c b/libavcodec/bonk.c
> index 1695229dbd..9e8892e4db 100644
> --- a/libavcodec/bonk.c
> +++ b/libavcodec/bonk.c
> @@ -278,7 +278,7 @@ static int predictor_calc_error(int *k, int *state, int
> order, int error)
>  *state_ptr = &(state[order-2]);
>
>  for (i = order-2; i >= 0; i--, k_ptr--, state_ptr--) {
> -int k_value = *k_ptr, state_value = *state_ptr;
> +unsigned k_value = *k_ptr, state_value = *state_ptr;
>
>  x -= shift_down(k_value * state_value, LATTICE_SHIFT);
>  state_ptr[1] = state_value + shift_down(k_value * x,
> LATTICE_SHIFT);
> --
> 2.17.1
>

probably fine.

> ___
> 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".
>
___
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".


Re: [FFmpeg-devel] [PATCH 2/7] avcodec/bonk: Simplify read_uint_max()

2022-11-06 Thread Paul B Mahol
On 11/6/22, Michael Niedermayer  wrote:
> The max == 0 case can be removed too but i left it as 50% of the cases use
> it
>
> Signed-off-by: Michael Niedermayer 
> ---
>  libavcodec/bonk.c | 11 ++-
>  1 file changed, 2 insertions(+), 9 deletions(-)
>
> diff --git a/libavcodec/bonk.c b/libavcodec/bonk.c
> index 9e8892e4db..04ea4def2f 100644
> --- a/libavcodec/bonk.c
> +++ b/libavcodec/bonk.c
> @@ -132,7 +132,6 @@ static av_cold int bonk_init(AVCodecContext *avctx)
>  static unsigned read_uint_max(BonkContext *s, uint32_t max)
>  {
>  unsigned value = 0;
> -int i, bits;
>
>  if (max == 0)
>  return 0;
> @@ -140,15 +139,9 @@ static unsigned read_uint_max(BonkContext *s, uint32_t
> max)
>  if (max >> 31)
>  return 32;
>
> -bits = 32 - ff_clz(max);
> -
> -for (i = 0; i < bits - 1; i++)
> -if (get_bits1(>gb))
> -value += 1 << i;
> -
> -if ((value | (1 << (bits - 1))) <= max)
> +for (unsigned i = 1; i <= max - value; i+=i)
>  if (get_bits1(>gb))
> -value += 1 << (bits - 1);
> +value += i;
>
>  return value;
>  }
> --
> 2.17.1
>

probably ok.

> ___
> 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".
>
___
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".


Re: [FFmpeg-devel] [PATCH 3/7] avcodec/bonk: Remove special 32bit case from read_uint_max()

2022-11-06 Thread Paul B Mahol
On 11/6/22, Michael Niedermayer  wrote:
> This case seems not to match the reference decoder and it also
> seems not reachable
>
> Signed-off-by: Michael Niedermayer 
> ---
>  libavcodec/bonk.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/libavcodec/bonk.c b/libavcodec/bonk.c
> index 04ea4def2f..fca8c246aa 100644
> --- a/libavcodec/bonk.c
> +++ b/libavcodec/bonk.c
> @@ -136,8 +136,7 @@ static unsigned read_uint_max(BonkContext *s, uint32_t
> max)
>  if (max == 0)
>  return 0;
>
> -if (max >> 31)
> -return 32;
> +av_assert0(max >> 31 == 0);
>
>  for (unsigned i = 1; i <= max - value; i+=i)
>  if (get_bits1(>gb))
> --
> 2.17.1


Not sure, at your risk.

Test lossy mode too.

>
> ___
> 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".
>
___
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".


Re: [FFmpeg-devel] [PATCH 4/7] avcodec/bonk: actual_run seems not able to become negative

2022-11-06 Thread Paul B Mahol
On 11/6/22, Michael Niedermayer  wrote:
> Signed-off-by: Michael Niedermayer 
> ---
>  libavcodec/bonk.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/libavcodec/bonk.c b/libavcodec/bonk.c
> index fca8c246aa..99dac0b951 100644
> --- a/libavcodec/bonk.c
> +++ b/libavcodec/bonk.c
> @@ -184,8 +184,7 @@ static int intlist_read(BonkContext *s, int *buf, int
> entries, int base_2_part)
>  } else if (steplet > 0) {
>  int actual_run = read_uint_max(s, steplet - 1);
>
> -if (actual_run < 0)
> -break;
> +av_assert0(actual_run >= 0);
>
>  if (actual_run > 0) {
>  bits[x  ].bit   = dominant;
> --
> 2.17.1
>

Not sure, at your risk.

> ___
> 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".
>
___
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".


Re: [FFmpeg-devel] [PATCH 5/7] avcodec/bonk: step cannot become 0 without overflowing which is undefined

2022-11-06 Thread Paul B Mahol
On 11/6/22, Michael Niedermayer  wrote:
> also the original reference code does not contain a 0 check
>
> Signed-off-by: Michael Niedermayer 
> ---
>  libavcodec/bonk.c | 2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/libavcodec/bonk.c b/libavcodec/bonk.c
> index 99dac0b951..37ad7854b6 100644
> --- a/libavcodec/bonk.c
> +++ b/libavcodec/bonk.c
> @@ -203,8 +203,6 @@ static int intlist_read(BonkContext *s, int *buf, int
> entries, int base_2_part)
>  }
>
>  if (step < 256) {
> -if (step == 0)
> -return AVERROR_INVALIDDATA;
>  step = 65536 / step;
>  dominant = !dominant;
>  }
> --
> 2.17.1
>


Not sure, at your risk.

> ___
> 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".
>
___
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".


Re: [FFmpeg-devel] [PATCH 6/7] avcodec/bonk: Check step against overflow

2022-11-06 Thread Paul B Mahol
On 11/6/22, Michael Niedermayer  wrote:
> No testcase
>
> Signed-off-by: Michael Niedermayer 
> ---
>  libavcodec/bonk.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/libavcodec/bonk.c b/libavcodec/bonk.c
> index 37ad7854b6..f2427de4f1 100644
> --- a/libavcodec/bonk.c
> +++ b/libavcodec/bonk.c
> @@ -180,6 +180,8 @@ static int intlist_read(BonkContext *s, int *buf, int
> entries, int base_2_part)
>  if (!dominant)
>  n_zeros += steplet;
>
> +if (step > INT32_MAX*8LL/9 + 1)
> +return AVERROR_INVALIDDATA;
>  step += step / 8;
>  } else if (steplet > 0) {
>  int actual_run = read_uint_max(s, steplet - 1);
> --
> 2.17.1

probably ok

>
> ___
> 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".
>
___
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".


Re: [FFmpeg-devel] [PATCH 7/7] avcodec/bonk: steplet cannot become negative

2022-11-06 Thread Paul B Mahol
On 11/6/22, Michael Niedermayer  wrote:
> Signed-off-by: Michael Niedermayer 
> ---
>  libavcodec/bonk.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/libavcodec/bonk.c b/libavcodec/bonk.c
> index f2427de4f1..c775ed5ddf 100644
> --- a/libavcodec/bonk.c
> +++ b/libavcodec/bonk.c
> @@ -169,8 +169,7 @@ static int intlist_read(BonkContext *s, int *buf, int
> entries, int base_2_part)
>  return AVERROR_INVALIDDATA;
>
>  if (!get_bits1(>gb)) {
> -if (steplet < 0)
> -break;
> +av_assert0(steplet >= 0);
>
>  if (steplet > 0) {
>  bits[x  ].bit   = dominant;
> --
> 2.17.1
>

probably fine

> ___
> 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".
>
___
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".


[FFmpeg-devel] [PATCH]lavf/ass: Allow empty Layer field

2022-11-06 Thread Carl Eugen Hoyos
Hi!

Attached patch fixes ticket #9581 for me.

Please comment, Carl Eugen


0001-lavf-ass-Allow-empty-Layer-field.patch
Description: Binary data
___
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".


[FFmpeg-devel] [PATCH] avcodec/wmaprodec: Remove unused variable

2022-11-06 Thread Andreas Rheinhardt
Unused since 5fe42ea7763d24d74b596285f5daeaa203f7
(replaced by a new "err" variable).

Signed-off-by: Andreas Rheinhardt 
---
Will apply this soon.

 libavcodec/wmaprodec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavcodec/wmaprodec.c b/libavcodec/wmaprodec.c
index 68e17e0743..fbfe75ee33 100644
--- a/libavcodec/wmaprodec.c
+++ b/libavcodec/wmaprodec.c
@@ -360,7 +360,7 @@ static av_cold int decode_init(WMAProDecodeCtx *s, 
AVCodecContext *avctx, int nu
 static AVOnce init_static_once = AV_ONCE_INIT;
 uint8_t *edata_ptr = avctx->extradata;
 unsigned int channel_mask;
-int i, bits, ret;
+int i, bits;
 int log2_max_num_subframes;
 int num_possible_block_sizes;
 
-- 
2.34.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 7/7] avfilter/vf_hqdn3d: Fix left-shift of negative numbers

2022-11-06 Thread Andreas Rheinhardt
Affected filter-hqdn3d and filter-hqdn3d-sample FATE-tests.

Signed-off-by: Andreas Rheinhardt 
---
 libavfilter/vf_hqdn3d.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavfilter/vf_hqdn3d.c b/libavfilter/vf_hqdn3d.c
index ce2b9a2974..c796ea9ab4 100644
--- a/libavfilter/vf_hqdn3d.c
+++ b/libavfilter/vf_hqdn3d.c
@@ -180,7 +180,7 @@ static void precalc_coefs(double dist25, int depth, int16_t 
*ct)
 gamma = log(0.25) / log(1.0 - FFMIN(dist25,252.0)/255.0 - 0.1);
 
 for (i = -(256

[FFmpeg-devel] [PATCH 6/7] avfilter/phase_template: Fix left-shift of negative numbers

2022-11-06 Thread Andreas Rheinhardt
Affected the filter-phase FATE-test.

Signed-off-by: Andreas Rheinhardt 
---
 libavfilter/phase_template.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavfilter/phase_template.c b/libavfilter/phase_template.c
index 491612b826..8450670234 100644
--- a/libavfilter/phase_template.c
+++ b/libavfilter/phase_template.c
@@ -46,7 +46,7 @@
  *
  * (The result is actually multiplied by 25)
  */
-#define DIFF(a, as, b, bs) ((t) = ((*(a) - (b)[bs]) << 2) + (a)[(as) << 1] - 
(b)[-(bs)], (t) * (t))
+#define DIFF(a, as, b, bs) ((t) = ((*(a) - (b)[bs]) * 4) + (a)[(as) * 2] - 
(b)[-(bs)], (t) * (t))
 
 /*
  * Find which field combination has the smallest average squared difference
-- 
2.34.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 5/7] avfilter/vf_qp: Don't store NAN in int

2022-11-06 Thread Andreas Rheinhardt
Affected the filter-pp2 FATE-test.

Signed-off-by: Andreas Rheinhardt 
---
 libavfilter/vf_qp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavfilter/vf_qp.c b/libavfilter/vf_qp.c
index 7c9d60fe21..a771b51ae1 100644
--- a/libavfilter/vf_qp.c
+++ b/libavfilter/vf_qp.c
@@ -143,7 +143,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
 for (x = 0; x < s->qstride; x++) {
 unsigned int block_idx = y * s->qstride + x;
 AVVideoBlockParams *b = av_video_enc_params_block(par_out, 
block_idx);
-int qp = sd_in ? in_qp_global + BLOCK_QP_DELTA(block_idx) : 
NAN;
+double qp = sd_in ? in_qp_global + BLOCK_QP_DELTA(block_idx) : 
NAN;
 double var_values[] = { !!sd_in, qp, x, y, s->qstride, s->h, 
0};
 double temp_val;
 
-- 
2.34.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 4/7] postproc/postprocess_template: Fix alignment

2022-11-06 Thread Andreas Rheinhardt
postProcess in postprocess_template.c copies a PPContext
to the stack, works with this copy and then copies
it back again. Said local copy uses a hardcoded alignment
of eight, although PPContext has alignment 32 since
cbe27006cee0099076d1d68af646f3ef914167d8
(this commit was in anticipation of AVX2 code that never landed).
This leads to misalignment in the filter-(pp|pp1|pp2|pp3|qp)
FATE-tests which UBSan complains about. So avoid the local copy.

Signed-off-by: Andreas Rheinhardt 
---
 libpostproc/postprocess_template.c | 156 ++---
 1 file changed, 77 insertions(+), 79 deletions(-)

diff --git a/libpostproc/postprocess_template.c 
b/libpostproc/postprocess_template.c
index bcf7bdad66..ade1d6ce2b 100644
--- a/libpostproc/postprocess_template.c
+++ b/libpostproc/postprocess_template.c
@@ -2860,14 +2860,13 @@ static inline void RENAME(prefetcht2)(const void *p)
  * Filter array of bytes (Y or U or V values)
  */
 static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t 
dst[], int dstStride, int width, int height,
-const int8_t QPs[], int QPStride, int isColor, 
PPContext *c2)
+const int8_t QPs[], int QPStride, int isColor, 
PPContext *c)
 {
-DECLARE_ALIGNED(8, PPContext, c)= *c2; //copy to stack for faster access
 int x,y;
 #ifdef TEMPLATE_PP_TIME_MODE
 const int mode= TEMPLATE_PP_TIME_MODE;
 #else
-const int mode= isColor ? c.ppMode.chromMode : c.ppMode.lumMode;
+const int mode = isColor ? c->ppMode.chromMode : c->ppMode.lumMode;
 #endif
 int black=0, white=255; // blackest black and whitest white in the picture
 int QPCorrecture= 256*256;
@@ -2877,29 +2876,29 @@ static void RENAME(postProcess)(const uint8_t src[], 
int srcStride, uint8_t dst[
 int i;
 #endif
 
-const int qpHShift= isColor ? 4-c.hChromaSubSample : 4;
-const int qpVShift= isColor ? 4-c.vChromaSubSample : 4;
+const int qpHShift = isColor ? 4 - c->hChromaSubSample : 4;
+const int qpVShift = isColor ? 4 - c->vChromaSubSample : 4;
 
 //FIXME remove
-uint64_t * const yHistogram= c.yHistogram;
-uint8_t * const tempSrc= srcStride > 0 ? c.tempSrc : c.tempSrc - 
23*srcStride;
-uint8_t * const tempDst= (dstStride > 0 ? c.tempDst : c.tempDst - 
23*dstStride) + 32;
+uint64_t * const yHistogram= c->yHistogram;
+uint8_t * const tempSrc =  srcStride > 0 ? c->tempSrc : c->tempSrc - 
23*srcStride;
+uint8_t * const tempDst = (dstStride > 0 ? c->tempDst : c->tempDst - 
23*dstStride) + 32;
 //const int mbWidth= isColor ? (width+7)>>3 : (width+15)>>4;
 
 if (mode & VISUALIZE){
 if(!(mode & (V_A_DEBLOCK | H_A_DEBLOCK)) || TEMPLATE_PP_MMX) {
-av_log(c2, AV_LOG_WARNING, "Visualization is currently only 
supported with the accurate deblock filter without SIMD\n");
+av_log(c, AV_LOG_WARNING, "Visualization is currently only 
supported with the accurate deblock filter without SIMD\n");
 }
 }
 
 #if TEMPLATE_PP_MMX
 for(i=0; i<57; i++){
-int offset= ((i*c.ppMode.baseDcDiff)>>8) + 1;
+int offset = ((i * c->ppMode.baseDcDiff) >> 8) + 1;
 int threshold= offset*2 + 1;
-c.mmxDcOffset[i]= 0x7F - offset;
-c.mmxDcThreshold[i]= 0x7F - threshold;
-c.mmxDcOffset[i]*= 0x0101010101010101LL;
-c.mmxDcThreshold[i]*= 0x0101010101010101LL;
+c->mmxDcOffset[i] = 0x7F - offset;
+c->mmxDcThreshold[i]  = 0x7F - threshold;
+c->mmxDcOffset[i]*= 0x0101010101010101LL;
+c->mmxDcThreshold[i] *= 0x0101010101010101LL;
 }
 #endif
 
@@ -2925,16 +2924,18 @@ static void RENAME(postProcess)(const uint8_t src[], 
int srcStride, uint8_t dst[
 uint64_t clipped;
 AVRational scale;
 
-c.frameNum++;
+c->frameNum++;
 // first frame is fscked so we ignore it
-if(c.frameNum == 1) yHistogram[0]= width*(uint64_t)height/64*15/256;
+if (c->frameNum == 1)
+yHistogram[0] = width * (uint64_t)height/64*15/256;
 
 for(i=0; i<256; i++){
 sum+= yHistogram[i];
 }
 
 /* We always get a completely black picture first. */
-maxClipped= av_rescale(sum, c.ppMode.maxClippedThreshold.num, 
c.ppMode.maxClippedThreshold.den);
+maxClipped = av_rescale(sum, c->ppMode.maxClippedThreshold.num,
+ c->ppMode.maxClippedThreshold.den);
 
 clipped= sum;
 for(black=255; black>0; black--){
@@ -2948,27 +2949,27 @@ static void RENAME(postProcess)(const uint8_t src[], 
int srcStride, uint8_t dst[
 clipped-= yHistogram[white];
 }
 
-scale = (AVRational){c.ppMode.maxAllowedY - c.ppMode.minAllowedY, 
white - black};
+scale = (AVRational){c->ppMode.maxAllowedY - c->ppMode.minAllowedY, 
white - black};
 
 #if TEMPLATE_PP_MMXEXT
-c.packedYScale = (uint16_t)av_rescale(scale.num, 256, scale.den);
-

[FFmpeg-devel] [PATCH 3/7] swscale/utils: Remove obsolete 3DNow reference

2022-11-06 Thread Andreas Rheinhardt
swscale does not use 3DNow any more since commit
608319a311a31f7d85333a7b08286c00be38eab6.

Signed-off-by: Andreas Rheinhardt 
---
 libswscale/utils.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/libswscale/utils.c b/libswscale/utils.c
index 45baa22b23..85640a143f 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -1966,8 +1966,6 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter 
*srcFilter,
 
 if (INLINE_MMXEXT(cpu_flags))
 cpucaps = "MMXEXT";
-else if (INLINE_AMD3DNOW(cpu_flags))
-cpucaps = "3DNOW";
 else if (INLINE_MMX(cpu_flags))
 cpucaps = "MMX";
 else if (PPC_ALTIVEC(cpu_flags))
-- 
2.34.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 2/7] avcodec/x86/cavsdsp: Remove unused 3DNow-macro

2022-11-06 Thread Andreas Rheinhardt
Forgotten in 3221aba87989742ea22b639a7bb4af69f4eaa0e7.

Signed-off-by: Andreas Rheinhardt 
---
 libavcodec/x86/cavsdsp.c | 4 
 1 file changed, 4 deletions(-)

diff --git a/libavcodec/x86/cavsdsp.c b/libavcodec/x86/cavsdsp.c
index 4ad977a034..96680836a1 100644
--- a/libavcodec/x86/cavsdsp.c
+++ b/libavcodec/x86/cavsdsp.c
@@ -308,10 +308,6 @@ static void OPNAME ## cavs_qpel ## SIZE ## _mc03_ ## 
MMX(uint8_t *dst, const uin
 }\
 
 #define PUT_OP(a,b,temp, size) "mov" #size " " #a ", " #b "\n\t"
-#define AVG_3DNOW_OP(a,b,temp, size) \
-"mov" #size " " #b ", " #temp "   \n\t"\
-"pavgusb " #temp ", " #a "\n\t"\
-"mov" #size " " #a ", " #b "  \n\t"
 #define AVG_MMXEXT_OP(a, b, temp, size) \
 "mov" #size " " #b ", " #temp "   \n\t"\
 "pavgb " #temp ", " #a "  \n\t"\
-- 
2.34.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 1/7] postproc/postprocess: Remove obsolete MMX(EXT)/3Dnow functions

2022-11-06 Thread Andreas Rheinhardt
postprocess.c currently has C, MMX, MMXEXT, 3DNow as well as
SSE2 versions of its internal functions. But given that only
ancient 32-bit x86 CPUs don't support SSE2, the MMX, MMXEXT
and 3DNow versions are obsolete and are therefore removed by
this commit. This saves about 56KB here.

(The SSE2 version in particular is not really complete,
so that it often falls back to MMXEXT (which means that
there were some identical (apart from the name) MMXEXT
and SSE2 functions; this duplication no longer exists
with this commit.)

Signed-off-by: Andreas Rheinhardt 
---
The PP_CPU_CAPS_MMX(2)/3DNOW could now be deprecated.

 libpostproc/postprocess.c  |  69 ++--
 libpostproc/postprocess_template.c | 521 ++---
 2 files changed, 57 insertions(+), 533 deletions(-)

diff --git a/libpostproc/postprocess.c b/libpostproc/postprocess.c
index 383c691cb4..0586e458b4 100644
--- a/libpostproc/postprocess.c
+++ b/libpostproc/postprocess.c
@@ -26,28 +26,27 @@
  */
 
 /*
-C   MMX MMX23DNow   AltiVec
-isVertDCEc  Ec  Ec
-isVertMinMaxOk  Ec  Ec  Ec
-doVertLowPass   E   e   e   Ec
-doVertDefFilter Ec  Ec  e   e   Ec
-isHorizDC   Ec  Ec  Ec
-isHorizMinMaxOk a   E   Ec
-doHorizLowPass  E   e   e   Ec
-doHorizDefFilterEc  Ec  e   e   Ec
-do_a_deblockEc  E   Ec  E
-deRing  E   e   e*  Ecp
-Vertical RKAlgo1E   a   a
-Horizontal RKAlgo1  a   a
-Vertical X1#a   E   E
-Horizontal X1#  a   E   E
-LinIpolDeinterlace  e   E   E*
-CubicIpolDeinterlacea   e   e*
-LinBlendDeinterlace e   E   E*
+C   MMX MMX2AltiVec
+isVertDCEc  Ec  Ec
+isVertMinMaxOk  Ec  Ec  Ec
+doVertLowPass   E   e   Ec
+doVertDefFilter Ec  Ec  e   Ec
+isHorizDC   Ec  Ec  Ec
+isHorizMinMaxOk a   E   Ec
+doHorizLowPass  E   e   Ec
+doHorizDefFilterEc  Ec  e   Ec
+do_a_deblockEc  E   Ec
+deRing  E   e   Ecp
+Vertical RKAlgo1E   a
+Horizontal RKAlgo1  a
+Vertical X1#a   E
+Horizontal X1#  a   E
+LinIpolDeinterlace  e   E
+CubicIpolDeinterlacea   e
+LinBlendDeinterlace e   E
 MedianDeinterlace#  E   Ec  Ec
-TempDeNoiser#   E   e   e   Ec
+TempDeNoiser#   E   e   Ec
 
-* I do not have a 3DNow! CPU -> it is untested, but no one said it does not 
work so it seems to work
 # more or less selfinvented filters so the exactness is not too meaningful
 E = Exact implementation
 e = almost exact implementation (slightly different rounding,...)
@@ -83,7 +82,6 @@ try to unroll inner for(x=0 ... loop to avoid these damn if(x 
... checks
 #include 
 #include 
 //#undef HAVE_MMXEXT_INLINE
-//#define HAVE_AMD3DNOW_INLINE
 //#undef HAVE_MMX_INLINE
 //#undef ARCH_X86
 //#define DEBUG_BRIGHTNESS
@@ -494,7 +492,7 @@ static av_always_inline void do_a_deblock_C(uint8_t *src, 
int step,
 }
 }
 
-//Note: we have C, MMX, MMX2, 3DNOW version there is no 3DNOW+MMX2 one
+//Note: we have C and SSE2 version (which uses MMX(EXT) when advantageous)
 //Plain C versions
 //we always compile C for testing which needs bitexactness
 #define TEMPLATE_PP_C 1
@@ -508,27 +506,12 @@ static av_always_inline void do_a_deblock_C(uint8_t *src, 
int step,
 
 #if ARCH_X86 && HAVE_INLINE_ASM
 #if CONFIG_RUNTIME_CPUDETECT
-#define TEMPLATE_PP_MMX 1
-#include "postprocess_template.c"
-#define TEMPLATE_PP_MMXEXT 1
-#include "postprocess_template.c"
-#define TEMPLATE_PP_3DNOW 1
-#include "postprocess_template.c"
 #define TEMPLATE_PP_SSE2 1
 #include "postprocess_template.c"
 #else
 #if HAVE_SSE2_INLINE
 #define TEMPLATE_PP_SSE2 1
 #include "postprocess_template.c"
-#elif HAVE_MMXEXT_INLINE
-#define TEMPLATE_PP_MMXEXT 1
-#include "postprocess_template.c"
-#elif HAVE_AMD3DNOW_INLINE
-#define TEMPLATE_PP_3DNOW 1
-#include "postprocess_template.c"
-#elif HAVE_MMX_INLINE
-#define TEMPLATE_PP_MMX 1
-#include "postprocess_template.c"
 #endif
 #endif
 #endif
@@ -549,21 +532,12 @@ static inline void postProcess(const uint8_t src[], int 

[FFmpeg-devel] [PATCH 12/12] avformat/matroska: add missing elements

2022-11-06 Thread Steve Lhomme
They are not mapped into structures but the IDs and their allowed position is
set properly.
---
 libavformat/matroska_ids.h | 93 ++
 libavformat/matroskasem.c  | 58 +---
 libavformat/matroskasem.h  |  2 +-
 3 files changed, 145 insertions(+), 8 deletions(-)

diff --git a/libavformat/matroska_ids.h b/libavformat/matroska_ids.h
index 59dda4da9d..365ee05ad6 100644
--- a/libavformat/matroska_ids.h
+++ b/libavformat/matroska_ids.h
@@ -41,6 +41,13 @@
 
 /* IDs in the info master */
 #define MATROSKA_ID_TIMECODESCALE   0x2AD7B1
+#define MATROSKA_ID_SEGMENTFILENAME 0x7384
+#define MATROSKA_ID_PREVUID 0x3CB923
+#define MATROSKA_ID_PREVFILENAME0x3C83AB
+#define MATROSKA_ID_NEXTUID 0x3EB923
+#define MATROSKA_ID_NEXTFILENAME0x3E83BB
+#define MATROSKA_ID_SEGMENTFAMILY   0x
+#define MATROSKA_ID_CHAPTERTRANSLATE0x6924
 #define MATROSKA_ID_DURATION0x4489
 #define MATROSKA_ID_TITLE   0x7BA9
 #define MATROSKA_ID_WRITINGAPP  0x5741
@@ -48,6 +55,11 @@
 #define MATROSKA_ID_DATEUTC 0x4461
 #define MATROSKA_ID_SEGMENTUID  0x73A4
 
+/* IDs in the chaptertranslate master */
+#define MATROSKA_ID_CHAPTERTRANSLATEID  0x69A5
+#define MATROSKA_ID_CHAPTERTRANSLATECODEC  0x69BF
+#define MATROSKA_ID_CHAPTERTRANSLATEEDITIONUID  0x69FC
+
 /* IDs in the tracks master */
 #define MATROSKA_ID_TRACKENTRY  0xAE
 
@@ -63,19 +75,31 @@
 #define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS  0x55AD
 #define MATROSKA_ID_TRACKFLAGORIGINAL   0x55AE
 #define MATROSKA_ID_TRACKFLAGCOMMENTARY  0x55AF
+#define MATROSKA_ID_TRACKDEFAULTDECODEDFIELDDURATION  0x234E7A
 #define MATROSKA_ID_TRACKTIMECODESCALE  0x23314F
+#define MATROSKA_ID_TRACKOFFSET 0x537F
 #define MATROSKA_ID_TRACKMAXBLKADDID0x55EE
 #define MATROSKA_ID_TRACKBLKADDMAPPING  0x41E4
 #define MATROSKA_ID_TRACKNAME   0x536E
 #define MATROSKA_ID_TRACKLANGUAGE   0x22B59C
+#define MATROSKA_ID_TRACKLANGUAGEIETF   0x22B59D
 #define MATROSKA_ID_CODECID 0x86
 #define MATROSKA_ID_CODECPRIVATE0x63A2
 #define MATROSKA_ID_CODECNAME   0x258688
+#define MATROSKA_ID_TRACKATTACHMENTLINK  0x7446
+#define MATROSKA_ID_CODECSETTINGS   0x3A9697
 #define MATROSKA_ID_CODECINFOURL0x3B4040
 #define MATROSKA_ID_CODECDOWNLOADURL0x26B240
 #define MATROSKA_ID_CODECDECODEALL  0xAA
+#define MATROSKA_ID_TRACKOVERLAY0x6FAB
 #define MATROSKA_ID_CODECDELAY  0x56AA
 #define MATROSKA_ID_SEEKPREROLL 0x56BB
+#define MATROSKA_ID_TRACKTRANSLATE  0x6624
+#define MATROSKA_ID_TRICKTRACKUID   0xC0
+#define MATROSKA_ID_TRICKTRACKSEGMENTUID  0xC1
+#define MATROSKA_ID_TRICKTRACKFLAG  0xC6
+#define MATROSKA_ID_TRICKMASTERTRACKUID  0xC7
+#define MATROSKA_ID_TRICKMASTERTRACKSEGMENTUID  0xC4
 #define MATROSKA_ID_TRACKFLAGENABLED0xB9
 #define MATROSKA_ID_TRACKFLAGDEFAULT0x88
 #define MATROSKA_ID_TRACKFLAGFORCED 0x55AA
@@ -115,9 +139,11 @@
 #define MATROSKA_ID_ENCODINGSIGNATURE   0x47E3
 
 /* IDs in the contentencaessettings master */
+#define MATROSKA_ID_TRACKAESSETTINGSCIPHERMODE  0x47E8
 
 /* IDs in the trackoperation master */
 #define MATROSKA_ID_TRACKCOMBINEPLANES  0xE3
+#define MATROSKA_ID_TRACKJOINBLOCKS 0xE9
 
 /* IDs in the trackcombineplanes master */
 #define MATROSKA_ID_TRACKPLANE  0xE4
@@ -126,6 +152,14 @@
 #define MATROSKA_ID_TRACKPLANEUID   0xE5
 #define MATROSKA_ID_TRACKPLANETYPE  0xE6
 
+/* IDs in the trackjoinblocks master */
+#define MATROSKA_ID_TRACKJOINUID0xED
+
+/* IDs in the tracktranslate master */
+#define MATROSKA_ID_TRACKTRANSLATETRACKID  0x66A5
+#define MATROSKA_ID_TRACKTRANSLATECODEC  0x66BF
+#define MATROSKA_ID_TRACKTRANSLATEEDITIONUID  0x66FC
+
 /* IDs in the trackvideo master */
 #define MATROSKA_ID_VIDEOFRAMERATE  0x2383E3
 #define MATROSKA_ID_VIDEODISPLAYWIDTH   0x54B0
@@ -141,8 +175,10 @@
 #define MATROSKA_ID_VIDEOFIELDORDER 0x9D
 #define MATROSKA_ID_VIDEOSTEREOMODE 0x53B8
 #define MATROSKA_ID_VIDEOALPHAMODE  0x53C0
+#define MATROSKA_ID_VIDEOOLDSTEREOMODE  0x53B9
 #define MATROSKA_ID_VIDEOASPECTRATIO0x54B3
 #define MATROSKA_ID_VIDEOCOLORSPACE 0x2EB524
+#define MATROSKA_ID_VIDEOGAMMAVALUE 0x2FB523
 #define MATROSKA_ID_VIDEOCOLOR  0x55B0
 #define MATROSKA_ID_VIDEOPROJECTION 0x7670
 
@@ -184,6 +220,7 @@
 /* IDs in the trackaudio master */
 #define MATROSKA_ID_AUDIOSAMPLINGFREQ   0xB5
 #define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ  0x78B5
+#define MATROSKA_ID_AUDIOCHANNELPOSITIONS  0x7D7B
 #define MATROSKA_ID_AUDIOBITDEPTH   0x6264
 #define MATROSKA_ID_AUDIOCHANNELS   0x9F
 
@@ -200,6 +237,14 @@
 #define MATROSKA_ID_CUERELATIVEPOSITION  0xF0
 #define MATROSKA_ID_CUEDURATION 0xB2
 #define MATROSKA_ID_CUEBLOCKNUMBER  0x5378
+#define MATROSKA_ID_CUECODECSTATE   0xEA
+#define MATROSKA_ID_CUEREFERENCE0xDB
+
+/* IDs in the cuereference master */

[FFmpeg-devel] [PATCH 11/12] avformat/matroska: only export a few elements.

2022-11-06 Thread Steve Lhomme
---
 libavformat/matroskasem.c | 69 +++
 libavformat/matroskasem.h |  7 +---
 2 files changed, 50 insertions(+), 26 deletions(-)

diff --git a/libavformat/matroskasem.c b/libavformat/matroskasem.c
index 0f4455058a..cdef0dbff4 100644
--- a/libavformat/matroskasem.c
+++ b/libavformat/matroskasem.c
@@ -37,6 +37,35 @@
 
 #define CHILD_OF(parent) { .def = { .n = parent } }
 
+// The following forward declarations need their size because
+// a tentative definition with internal linkage must not be an
+// incomplete type (6.7.2 in C90, 6.9.2 in C99).
+// Removing the sizes breaks MSVC.
+static EbmlSyntax matroska_seekhead[2];
+static EbmlSyntax matroska_info[8];
+static EbmlSyntax matroska_blockadditions[2];
+// static EbmlSyntax matroska_blockgroup[8];
+// static EbmlSyntax matroska_cluster_parsing[8];
+static EbmlSyntax matroska_track_video_color[15];
+static EbmlSyntax matroska_track_video[19];
+static EbmlSyntax matroska_track_combine_planes[2];
+static EbmlSyntax matroska_track_operation[2];
+static EbmlSyntax matroska_track_encoding_encryption[8];
+static EbmlSyntax matroska_track_encoding[6];
+static EbmlSyntax matroska_track_encodings[2];
+static EbmlSyntax matroska_track[33];
+static EbmlSyntax matroska_tracks[2];
+static EbmlSyntax matroska_index_pos[6];
+static EbmlSyntax matroska_index_entry[3];
+static EbmlSyntax matroska_index[2];
+static EbmlSyntax matroska_attachments[2];
+static EbmlSyntax matroska_chapter_entry[9];
+static EbmlSyntax matroska_chapter[6];
+static EbmlSyntax matroska_chapters[2];
+static EbmlSyntax matroska_tag[3];
+static EbmlSyntax matroska_tags[2];
+
+
 static EbmlSyntax ebml_header[] = {
 { EBML_ID_EBMLREADVERSION,EBML_UINT, 0, 0, offsetof(Ebml, version),
 { .u = EBML_VERSION } },
 { EBML_ID_EBMLMAXSIZELENGTH,  EBML_UINT, 0, 0, offsetof(Ebml, max_size),   
 { .u = 8 } },
@@ -77,7 +106,7 @@ static EbmlSyntax matroska_mastering_meta[] = {
 CHILD_OF(matroska_track_video_color)
 };
 
-EbmlSyntax matroska_track_video_color[] = {
+static EbmlSyntax matroska_track_video_color[] = {
 { MATROSKA_ID_VIDEOCOLORMATRIXCOEFF,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideoColor, matrix_coefficients), { .u = 
AVCOL_SPC_UNSPECIFIED } },
 { MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL,   EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideoColor, bits_per_channel) },
 { MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ,EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideoColor, chroma_sub_horz) },
@@ -95,7 +124,7 @@ EbmlSyntax matroska_track_video_color[] = {
 CHILD_OF(matroska_track_video)
 };
 
-EbmlSyntax matroska_track_video[] = {
+static EbmlSyntax matroska_track_video[] = {
 { MATROSKA_ID_VIDEOFRAMERATE, EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrackVideo, frame_rate) },
 { MATROSKA_ID_VIDEODISPLAYWIDTH,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, display_width), { .u = -1 } },
 { MATROSKA_ID_VIDEODISPLAYHEIGHT, EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, display_height), { .u = -1 } },
@@ -117,18 +146,18 @@ EbmlSyntax matroska_track_video[] = {
 CHILD_OF(matroska_track)
 };
 
-EbmlSyntax matroska_track_plane[] = {
+static EbmlSyntax matroska_track_plane[] = {
 { MATROSKA_ID_TRACKPLANEUID,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrackPlane, uid) },
 { MATROSKA_ID_TRACKPLANETYPE, EBML_UINT,  0, 0, 
offsetof(MatroskaTrackPlane, type) },
 CHILD_OF(matroska_track_combine_planes)
 };
 
-EbmlSyntax matroska_track_combine_planes[] = {
+static EbmlSyntax matroska_track_combine_planes[] = {
 { MATROSKA_ID_TRACKPLANE, EBML_NEST,  0, 
sizeof(MatroskaTrackPlane), offsetof(MatroskaTrackOperation, combine_planes), { 
.n = matroska_track_plane } },
 CHILD_OF(matroska_track_operation)
 };
 
-EbmlSyntax matroska_track_operation[] = {
+static EbmlSyntax matroska_track_operation[] = {
 { MATROSKA_ID_TRACKCOMBINEPLANES, EBML_NEST,  0, 0, 0, { .n = 
matroska_track_combine_planes } },
 CHILD_OF(matroska_track)
 };
@@ -150,7 +179,7 @@ static EbmlSyntax matroska_track_encoding_compression[] = {
 CHILD_OF(matroska_track_encoding)
 };
 
-EbmlSyntax matroska_track_encoding[] = {
+static EbmlSyntax matroska_track_encoding[] = {
 { MATROSKA_ID_ENCODINGSCOPE,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrackEncoding, scope), { .u = 1 } },
 { MATROSKA_ID_ENCODINGTYPE,   EBML_UINT,  0, 0, 
offsetof(MatroskaTrackEncoding, type) },
 { MATROSKA_ID_ENCODINGCOMPRESSION,EBML_NEST,  0, 0, 
offsetof(MatroskaTrackEncoding, compression), { .n = 
matroska_track_encoding_compression } },
@@ -159,12 +188,12 @@ EbmlSyntax matroska_track_encoding[] = {
 CHILD_OF(matroska_track_encodings)
 };
 
-EbmlSyntax matroska_track_encodings[] = {
+static EbmlSyntax matroska_track_encodings[] = {
 { MATROSKA_ID_TRACKCONTENTENCODING,   EBML_NEST,  0, 
sizeof(MatroskaTrackEncoding), offsetof(MatroskaTrack, encodings), { .n = 

[FFmpeg-devel] [PATCH 09/12] avformat/matroskasem: reorder some EbmlSyntax elements

2022-11-06 Thread Steve Lhomme
So it's easier to match with the XSLT ordering which has limited possibilities
(15 max criteria for all the syntax tables).

No functional changes.
---
 libavformat/matroskasem.c | 40 +++
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/libavformat/matroskasem.c b/libavformat/matroskasem.c
index f1afe4d570..b54328796d 100644
--- a/libavformat/matroskasem.c
+++ b/libavformat/matroskasem.c
@@ -101,10 +101,6 @@ EbmlSyntax matroska_track_video[] = {
 { MATROSKA_ID_VIDEODISPLAYHEIGHT,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, display_height), { .u=-1 } },
 { MATROSKA_ID_VIDEOPIXELWIDTH, EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, pixel_width) },
 { MATROSKA_ID_VIDEOPIXELHEIGHT,EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, pixel_height) },
-{ MATROSKA_ID_VIDEOCOLORSPACE, EBML_BIN,   0, 0, 
offsetof(MatroskaTrackVideo, color_space) },
-{ MATROSKA_ID_VIDEOALPHAMODE,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, alpha_mode) },
-{ MATROSKA_ID_VIDEOCOLOR,  EBML_NEST,  0, 
sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = 
matroska_track_video_color } },
-{ MATROSKA_ID_VIDEOPROJECTION, EBML_NEST,  0, 0, 
offsetof(MatroskaTrackVideo, projection), { .n = 
matroska_track_video_projection } },
 { MATROSKA_ID_VIDEOPIXELCROPB, EBML_NONE },
 { MATROSKA_ID_VIDEOPIXELCROPT, EBML_NONE },
 { MATROSKA_ID_VIDEOPIXELCROPL, EBML_NONE },
@@ -112,6 +108,10 @@ EbmlSyntax matroska_track_video[] = {
 { MATROSKA_ID_VIDEODISPLAYUNIT,EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, display_unit), { .u= 
MATROSKA_VIDEO_DISPLAYUNIT_PIXELS } },
 { MATROSKA_ID_VIDEOFLAGINTERLACED, EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, interlaced),  { .u = 
MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED } },
 { MATROSKA_ID_VIDEOFIELDORDER, EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, field_order), { .u = 
MATROSKA_VIDEO_FIELDORDER_UNDETERMINED } },
+{ MATROSKA_ID_VIDEOALPHAMODE,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, alpha_mode) },
+{ MATROSKA_ID_VIDEOCOLORSPACE, EBML_BIN,   0, 0, 
offsetof(MatroskaTrackVideo, color_space) },
+{ MATROSKA_ID_VIDEOCOLOR,  EBML_NEST,  0, 
sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = 
matroska_track_video_color } },
+{ MATROSKA_ID_VIDEOPROJECTION, EBML_NEST,  0, 0, 
offsetof(MatroskaTrackVideo, projection), { .n = 
matroska_track_video_projection } },
 { MATROSKA_ID_VIDEOSTEREOMODE, EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, stereo_mode), { .u = 
MATROSKA_VIDEO_STEREOMODE_TYPE_NB } },
 { MATROSKA_ID_VIDEOASPECTRATIO,EBML_NONE },
 CHILD_OF(matroska_track)
@@ -165,10 +165,10 @@ EbmlSyntax matroska_track_encodings[] = {
 };
 
 EbmlSyntax matroska_block_addition_mapping[] = {
-{ MATROSKA_ID_BLKADDIDVALUE,  EBML_UINT, 0, 0, 
offsetof(MatroskaBlockAdditionMapping, value) },
 { MATROSKA_ID_BLKADDIDNAME,   EBML_STR,  0, 0, 
offsetof(MatroskaBlockAdditionMapping, name) },
 { MATROSKA_ID_BLKADDIDTYPE,   EBML_UINT, 0, 0, 
offsetof(MatroskaBlockAdditionMapping, type) },
 { MATROSKA_ID_BLKADDIDEXTRADATA,  EBML_BIN,  0, 0, 
offsetof(MatroskaBlockAdditionMapping, extradata) },
+{ MATROSKA_ID_BLKADDIDVALUE,  EBML_UINT, 0, 0, 
offsetof(MatroskaBlockAdditionMapping, value) },
 CHILD_OF(matroska_track)
 };
 
@@ -191,28 +191,28 @@ EbmlSyntax matroska_track[] = {
 { MATROSKA_ID_TRACKLANGUAGE, EBML_STR,   0, 0, 
offsetof(MatroskaTrack, language), { .s = "eng" } },
 { MATROSKA_ID_TRACKDEFAULTDURATION,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, default_duration) },
 { MATROSKA_ID_TRACKTIMECODESCALE,EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrack, time_scale),   { .f = 1.0 } },
-{ MATROSKA_ID_TRACKFLAGCOMMENTARY,   EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, flag_comment) },
 { MATROSKA_ID_TRACKFLAGDEFAULT,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, flag_default), { .u = 1 } },
 { MATROSKA_ID_TRACKFLAGFORCED,   EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, flag_forced) },
+{ MATROSKA_ID_TRACKVIDEO,EBML_NEST,  0, 0, 
offsetof(MatroskaTrack, video),{ .n = matroska_track_video } },
+{ MATROSKA_ID_TRACKAUDIO,EBML_NEST,  0, 0, 
offsetof(MatroskaTrack, audio),{ .n = matroska_track_audio } },
+{ MATROSKA_ID_TRACKFLAGENABLED,  EBML_NONE },
 { MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED, EBML_UINT, 0, 0, 
offsetof(MatroskaTrack, flag_hearingimpaired) },
 { MATROSKA_ID_TRACKFLAGVISUALIMPAIRED, EBML_UINT, 0, 0, 
offsetof(MatroskaTrack, flag_visualimpaired) },
 { MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS, EBML_UINT, 0, 0, 
offsetof(MatroskaTrack, flag_textdescriptions) },
 { MATROSKA_ID_TRACKFLAGORIGINAL, EBML_UINT,  1, 0, 
offsetof(MatroskaTrack, flag_original) },
-{ MATROSKA_ID_TRACKVIDEO,EBML_NEST,  0, 0, 

[FFmpeg-devel] [PATCH 05/12] avformat/matroskadec: move the elements semantic in a separate file

2022-11-06 Thread Steve Lhomme
So the file can be generated from the Matroska Schema.

The EbmlSyntax structures are not shared between files.
matroska_segments and matroska_cluster_enter also have their size predefined.

No functional changes.
---
 libavformat/Makefile  |   2 +-
 libavformat/matroskadec.c | 712 +-
 libavformat/matroskasem.c | 397 +
 libavformat/matroskasem.h | 394 +
 4 files changed, 793 insertions(+), 712 deletions(-)
 create mode 100644 libavformat/matroskasem.c
 create mode 100644 libavformat/matroskasem.h

diff --git a/libavformat/Makefile b/libavformat/Makefile
index d7f198bf39..982fcc326f 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -331,7 +331,7 @@ OBJS-$(CONFIG_LVF_DEMUXER)   += lvfdec.o
 OBJS-$(CONFIG_LXF_DEMUXER)   += lxfdec.o
 OBJS-$(CONFIG_M4V_DEMUXER)   += m4vdec.o rawdec.o
 OBJS-$(CONFIG_M4V_MUXER) += rawenc.o
-OBJS-$(CONFIG_MATROSKA_DEMUXER)  += matroskadec.o matroska.o  \
+OBJS-$(CONFIG_MATROSKA_DEMUXER)  += matroskadec.o matroskasem.o 
matroska.o \
 flac_picture.o rmsipr.o \
 oggparsevorbis.o vorbiscomment.o \
 qtpalette.o replaygain.o 
dovi_isom.o
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 5a083acd75..9475ff4674 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -53,7 +53,6 @@
 #include "libavcodec/bytestream.h"
 #include "libavcodec/flac.h"
 #include "libavcodec/mpeg4audio.h"
-#include "libavcodec/packet_internal.h"
 
 #include "avformat.h"
 #include "avio_internal.h"
@@ -62,6 +61,7 @@
 #include "internal.h"
 #include "isom.h"
 #include "matroska.h"
+#include "matroskasem.h"
 #include "oggdec.h"
 /* For ff_codec_get_id(). */
 #include "riff.h"
@@ -88,716 +88,6 @@
  * to this many bytes of unknown data 
for the
  * SKIP_THRESHOLD check. */
 
-typedef enum {
-EBML_NONE,
-EBML_UINT,
-EBML_SINT,
-EBML_FLOAT,
-EBML_STR,
-EBML_UTF8,
-EBML_BIN,
-EBML_NEST,
-EBML_LEVEL1,
-EBML_STOP,
-EBML_TYPE_COUNT
-} EbmlType;
-
-typedef struct CountedElement {
-union {
-uint64_t  u;
-int64_t   i;
-doublef;
-char *s;
-} el;
-unsigned count;
-} CountedElement;
-
-typedef const struct EbmlSyntax {
-uint32_t id;
-uint8_t type;
-uint8_t is_counted;
-size_t list_elem_size;
-size_t data_offset;
-union {
-int64_t i;
-uint64_tu;
-double  f;
-const char *s;
-const struct EbmlSyntax *n;
-} def;
-} EbmlSyntax;
-
-typedef struct EbmlList {
-int nb_elem;
-unsigned int alloc_elem_size;
-void *elem;
-} EbmlList;
-
-typedef struct EbmlBin {
-int  size;
-AVBufferRef *buf;
-uint8_t *data;
-int64_t  pos;
-} EbmlBin;
-
-typedef struct Ebml {
-uint64_t version;
-uint64_t max_size;
-uint64_t id_length;
-char*doctype;
-uint64_t doctype_version;
-} Ebml;
-
-typedef struct MatroskaTrackCompression {
-uint64_t algo;
-EbmlBin  settings;
-} MatroskaTrackCompression;
-
-typedef struct MatroskaTrackEncryption {
-uint64_t algo;
-EbmlBin  key_id;
-} MatroskaTrackEncryption;
-
-typedef struct MatroskaTrackEncoding {
-uint64_t scope;
-uint64_t type;
-MatroskaTrackCompression compression;
-MatroskaTrackEncryption encryption;
-} MatroskaTrackEncoding;
-
-typedef struct MatroskaMasteringMeta {
-double r_x;
-double r_y;
-double g_x;
-double g_y;
-double b_x;
-double b_y;
-double white_x;
-double white_y;
-double max_luminance;
-CountedElement min_luminance;
-} MatroskaMasteringMeta;
-
-typedef struct MatroskaTrackVideoColor {
-uint64_t matrix_coefficients;
-uint64_t bits_per_channel;
-uint64_t chroma_sub_horz;
-uint64_t chroma_sub_vert;
-uint64_t cb_sub_horz;
-uint64_t cb_sub_vert;
-uint64_t chroma_siting_horz;
-uint64_t chroma_siting_vert;
-uint64_t range;
-uint64_t transfer_characteristics;
-uint64_t primaries;
-uint64_t max_cll;
-uint64_t max_fall;
-MatroskaMasteringMeta mastering_meta;
-} MatroskaTrackVideoColor;
-
-typedef struct MatroskaTrackVideoProjection {
-uint64_t type;
-EbmlBin private;
-double yaw;
-double pitch;
-double roll;
-} MatroskaTrackVideoProjection;
-
-typedef struct MatroskaTrackVideo {
-double   frame_rate;
-uint64_t display_width;
-uint64_t display_height;
-uint64_t pixel_width;
-uint64_t pixel_height;
-EbmlBin  color_space;
-uint64_t display_unit;
-uint64_t interlaced;
-uint64_t field_order;
-uint64_t stereo_mode;
-uint64_t alpha_mode;
-EbmlList color;
-MatroskaTrackVideoProjection 

[FFmpeg-devel] [PATCH 07/12] avformat/matroska_ids: reorder some IDs to match the generated order

2022-11-06 Thread Steve Lhomme
The XSLT scripts produces a similar file to this one, minus some spacing
differences.

No value added/removed.
---
 libavformat/matroska_ids.h | 106 ++---
 1 file changed, 53 insertions(+), 53 deletions(-)

diff --git a/libavformat/matroska_ids.h b/libavformat/matroska_ids.h
index 09579052c4..ab1d84337a 100644
--- a/libavformat/matroska_ids.h
+++ b/libavformat/matroska_ids.h
@@ -58,9 +58,16 @@
 #define MATROSKA_ID_TRACKVIDEO 0xE0
 #define MATROSKA_ID_TRACKAUDIO 0xE1
 #define MATROSKA_ID_TRACKOPERATION 0xE2
+#define MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED  0x55AB
+#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED   0x55AC
+#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS 0x55AD
+#define MATROSKA_ID_TRACKFLAGORIGINAL 0x55AE
+#define MATROSKA_ID_TRACKFLAGCOMMENTARY   0x55AF
 #define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
 #define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
 #define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4
+#define MATROSKA_ID_TRACKNAME  0x536E
+#define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
 #define MATROSKA_ID_CODECID0x86
 #define MATROSKA_ID_CODECPRIVATE 0x63A2
 #define MATROSKA_ID_CODECNAME  0x258688
@@ -69,25 +76,44 @@
 #define MATROSKA_ID_CODECDECODEALL 0xAA
 #define MATROSKA_ID_CODECDELAY 0x56AA
 #define MATROSKA_ID_SEEKPREROLL 0x56BB
-#define MATROSKA_ID_TRACKNAME  0x536E
-#define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
 #define MATROSKA_ID_TRACKFLAGENABLED 0xB9
 #define MATROSKA_ID_TRACKFLAGDEFAULT 0x88
 #define MATROSKA_ID_TRACKFLAGFORCED 0x55AA
-#define MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED  0x55AB
-#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED   0x55AC
-#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS 0x55AD
-#define MATROSKA_ID_TRACKFLAGORIGINAL 0x55AE
-#define MATROSKA_ID_TRACKFLAGCOMMENTARY   0x55AF
 #define MATROSKA_ID_TRACKFLAGLACING 0x9C
 #define MATROSKA_ID_TRACKMINCACHE 0x6DE7
 #define MATROSKA_ID_TRACKMAXCACHE 0x6DF8
 #define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
 #define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
 
+/* IDs in the block addition mapping master */
+#define MATROSKA_ID_BLKADDIDNAME 0x41A4
+#define MATROSKA_ID_BLKADDIDTYPE 0x41E7
+#define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED
+#define MATROSKA_ID_BLKADDIDVALUE 0x41F0
+
 /* IDs in the contentencodings master */
 #define MATROSKA_ID_TRACKCONTENTENCODING 0x6240
 
+/* IDs in the content encoding master */
+#define MATROSKA_ID_ENCODINGORDER 0x5031
+#define MATROSKA_ID_ENCODINGSCOPE 0x5032
+#define MATROSKA_ID_ENCODINGTYPE 0x5033
+#define MATROSKA_ID_ENCODINGCOMPRESSION 0x5034
+#define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
+
+/* IDs in the contentcompression master */
+#define MATROSKA_ID_ENCODINGCOMPALGO 0x4254
+#define MATROSKA_ID_ENCODINGCOMPSETTINGS 0x4255
+
+/* IDs in the contentencryption master */
+#define MATROSKA_ID_ENCODINGENCAESSETTINGS 0x47E7
+#define MATROSKA_ID_ENCODINGENCALGO 0x47E1
+#define MATROSKA_ID_ENCODINGENCKEYID 0x47E2
+#define MATROSKA_ID_ENCODINGSIGALGO 0x47E5
+#define MATROSKA_ID_ENCODINGSIGHASHALGO 0x47E6
+#define MATROSKA_ID_ENCODINGSIGKEYID 0x47E4
+#define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3
+
 /* IDs in the trackoperation master */
 #define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3
 
@@ -162,32 +188,6 @@
 #define MATROSKA_ID_AUDIOBITDEPTH 0x6264
 #define MATROSKA_ID_AUDIOCHANNELS 0x9F
 
-/* IDs in the content encoding master */
-#define MATROSKA_ID_ENCODINGORDER 0x5031
-#define MATROSKA_ID_ENCODINGSCOPE 0x5032
-#define MATROSKA_ID_ENCODINGTYPE 0x5033
-#define MATROSKA_ID_ENCODINGCOMPRESSION 0x5034
-#define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
-
-/* IDs in the contentcompression master */
-#define MATROSKA_ID_ENCODINGCOMPALGO 0x4254
-#define MATROSKA_ID_ENCODINGCOMPSETTINGS 0x4255
-
-/* IDs in the contentencryption master */
-#define MATROSKA_ID_ENCODINGENCAESSETTINGS 0x47E7
-#define MATROSKA_ID_ENCODINGENCALGO 0x47E1
-#define MATROSKA_ID_ENCODINGENCKEYID 0x47E2
-#define MATROSKA_ID_ENCODINGSIGALGO 0x47E5
-#define MATROSKA_ID_ENCODINGSIGHASHALGO 0x47E6
-#define MATROSKA_ID_ENCODINGSIGKEYID 0x47E4
-#define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3
-
-/* IDs in the block addition mapping master */
-#define MATROSKA_ID_BLKADDIDVALUE 0x41F0
-#define MATROSKA_ID_BLKADDIDNAME 0x41A4
-#define MATROSKA_ID_BLKADDIDTYPE 0x41E7
-#define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED
-
 /* IDs in the cues master */
 #define MATROSKA_ID_POINTENTRY 0xBB
 
@@ -223,19 +223,15 @@
 #define MATROSKA_ID_TAGTARGETS_CHAPTERUID 0x63C4
 #define MATROSKA_ID_TAGTARGETS_ATTACHUID  0x63C6
 
-/* IDs in the blockadditions master */
-#define MATROSKA_ID_BLOCKMORE 0xA6
-
-/* IDs in the blockmore master */
-#define MATROSKA_ID_BLOCKADDID 0xEE
-#define MATROSKA_ID_BLOCKADDITIONAL 0xA5
-
-/* IDs in the seekhead master */
-#define MATROSKA_ID_SEEKENTRY  0x4DBB
+/* IDs in the attachments master */
+#define MATROSKA_ID_ATTACHEDFILE0x61A7
 
-/* IDs in the seekpoint master */
-#define MATROSKA_ID_SEEKID 0x53AB
-#define MATROSKA_ID_SEEKPOSITION 0x53AC
+/* IDs in the attachedfile master */
+#define 

[FFmpeg-devel] [PATCH 06/12] avformat/matroska_ids: move some IDs in separate sections

2022-11-06 Thread Steve Lhomme
According grouped with their parent's elements.

No value added/removed.

Some IDs have been moved to match their parent section.

Use a consistent wording in all sections.
---
 libavformat/matroska_ids.h | 83 ++
 1 file changed, 58 insertions(+), 25 deletions(-)

diff --git a/libavformat/matroska_ids.h b/libavformat/matroska_ids.h
index ddd20d6036..09579052c4 100644
--- a/libavformat/matroska_ids.h
+++ b/libavformat/matroska_ids.h
@@ -48,7 +48,7 @@
 #define MATROSKA_ID_DATEUTC0x4461
 #define MATROSKA_ID_SEGMENTUID 0x73A4
 
-/* ID in the tracks master */
+/* IDs in the tracks master */
 #define MATROSKA_ID_TRACKENTRY 0xAE
 
 /* IDs in the trackentry master */
@@ -58,10 +58,9 @@
 #define MATROSKA_ID_TRACKVIDEO 0xE0
 #define MATROSKA_ID_TRACKAUDIO 0xE1
 #define MATROSKA_ID_TRACKOPERATION 0xE2
-#define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3
-#define MATROSKA_ID_TRACKPLANE 0xE4
-#define MATROSKA_ID_TRACKPLANEUID  0xE5
-#define MATROSKA_ID_TRACKPLANETYPE 0xE6
+#define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
+#define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
+#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4
 #define MATROSKA_ID_CODECID0x86
 #define MATROSKA_ID_CODECPRIVATE 0x63A2
 #define MATROSKA_ID_CODECNAME  0x258688
@@ -85,10 +84,19 @@
 #define MATROSKA_ID_TRACKMAXCACHE 0x6DF8
 #define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
 #define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
+
+/* IDs in the contentencodings master */
 #define MATROSKA_ID_TRACKCONTENTENCODING 0x6240
-#define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
-#define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
-#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4
+
+/* IDs in the trackoperation master */
+#define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3
+
+/* IDs in the trackcombineplanes master */
+#define MATROSKA_ID_TRACKPLANE 0xE4
+
+/* IDs in the trackplane master */
+#define MATROSKA_ID_TRACKPLANEUID  0xE5
+#define MATROSKA_ID_TRACKPLANETYPE 0xE6
 
 /* IDs in the trackvideo master */
 #define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3
@@ -108,7 +116,9 @@
 #define MATROSKA_ID_VIDEOASPECTRATIO 0x54B3
 #define MATROSKA_ID_VIDEOCOLORSPACE 0x2EB524
 #define MATROSKA_ID_VIDEOCOLOR 0x55B0
+#define MATROSKA_ID_VIDEOPROJECTION 0x7670
 
+/* IDs in the colour master */
 #define MATROSKA_ID_VIDEOCOLORMATRIXCOEFF 0x55B1
 #define MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL 0x55B2
 #define MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ 0x55B3
@@ -125,6 +135,8 @@
 #define MATROSKA_ID_VIDEOCOLORMAXFALL 0x55BD
 
 #define MATROSKA_ID_VIDEOCOLORMASTERINGMETA 0x55D0
+
+/* IDs in the masteringmetadata master */
 #define MATROSKA_ID_VIDEOCOLOR_RX 0x55D1
 #define MATROSKA_ID_VIDEOCOLOR_RY 0x55D2
 #define MATROSKA_ID_VIDEOCOLOR_GX 0x55D3
@@ -136,7 +148,7 @@
 #define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX 0x55D9
 #define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN 0x55DA
 
-#define MATROSKA_ID_VIDEOPROJECTION 0x7670
+/* IDs in the projection master */
 #define MATROSKA_ID_VIDEOPROJECTIONTYPE 0x7671
 #define MATROSKA_ID_VIDEOPROJECTIONPRIVATE 0x7672
 #define MATROSKA_ID_VIDEOPROJECTIONPOSEYAW 0x7673
@@ -155,10 +167,13 @@
 #define MATROSKA_ID_ENCODINGSCOPE 0x5032
 #define MATROSKA_ID_ENCODINGTYPE 0x5033
 #define MATROSKA_ID_ENCODINGCOMPRESSION 0x5034
+#define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
+
+/* IDs in the contentcompression master */
 #define MATROSKA_ID_ENCODINGCOMPALGO 0x4254
 #define MATROSKA_ID_ENCODINGCOMPSETTINGS 0x4255
 
-#define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
+/* IDs in the contentencryption master */
 #define MATROSKA_ID_ENCODINGENCAESSETTINGS 0x47E7
 #define MATROSKA_ID_ENCODINGENCALGO 0x47E1
 #define MATROSKA_ID_ENCODINGENCKEYID 0x47E2
@@ -173,7 +188,7 @@
 #define MATROSKA_ID_BLKADDIDTYPE 0x41E7
 #define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED
 
-/* ID in the cues master */
+/* IDs in the cues master */
 #define MATROSKA_ID_POINTENTRY 0xBB
 
 /* IDs in the pointentry master */
@@ -189,19 +204,32 @@
 
 /* IDs in the tags master */
 #define MATROSKA_ID_TAG 0x7373
+
+/* IDs in the tag master */
 #define MATROSKA_ID_SIMPLETAG   0x67C8
-#define MATROSKA_ID_TAGNAME 0x45A3
-#define MATROSKA_ID_TAGSTRING   0x4487
+#define MATROSKA_ID_TAGTARGETS  0x63C0
+
+/* IDs in the simpletag master */
 #define MATROSKA_ID_TAGLANG 0x447A
 #define MATROSKA_ID_TAGDEFAULT  0x4484
+#define MATROSKA_ID_TAGSTRING   0x4487
 #define MATROSKA_ID_TAGDEFAULT_BUG  0x44B4
-#define MATROSKA_ID_TAGTARGETS  0x63C0
+#define MATROSKA_ID_TAGNAME 0x45A3
+
+/* IDs in the targets master */
 #define MATROSKA_ID_TAGTARGETS_TYPE   0x63CA
 #define MATROSKA_ID_TAGTARGETS_TYPEVALUE  0x68CA
 #define MATROSKA_ID_TAGTARGETS_TRACKUID   0x63C5
 #define MATROSKA_ID_TAGTARGETS_CHAPTERUID 0x63C4
 #define MATROSKA_ID_TAGTARGETS_ATTACHUID  0x63C6
 
+/* IDs in the blockadditions master */
+#define MATROSKA_ID_BLOCKMORE 0xA6
+
+/* IDs in the blockmore master */
+#define 

[FFmpeg-devel] [PATCH 10/12] avformat/matroska: use the generated semantic files

2022-11-06 Thread Steve Lhomme
No functional value/added removed, only more regular spacing.
---
 libavformat/matroska_ids.h | 303 +++---
 libavformat/matroskasem.c  | 370 ++---
 2 files changed, 336 insertions(+), 337 deletions(-)

diff --git a/libavformat/matroska_ids.h b/libavformat/matroska_ids.h
index ab1d84337a..59dda4da9d 100644
--- a/libavformat/matroska_ids.h
+++ b/libavformat/matroska_ids.h
@@ -30,177 +30,176 @@
 #define MATROSKA_ID_SEGMENT0x18538067
 
 /* Matroska top-level master IDs */
-#define MATROSKA_ID_INFO   0x1549A966
-#define MATROSKA_ID_TRACKS 0x1654AE6B
-#define MATROSKA_ID_CUES   0x1C53BB6B
-#define MATROSKA_ID_TAGS   0x1254C367
-#define MATROSKA_ID_SEEKHEAD   0x114D9B74
-#define MATROSKA_ID_ATTACHMENTS 0x1941A469
-#define MATROSKA_ID_CLUSTER0x1F43B675
-#define MATROSKA_ID_CHAPTERS   0x1043A770
+#define MATROSKA_ID_INFO0x1549A966
+#define MATROSKA_ID_TRACKS  0x1654AE6B
+#define MATROSKA_ID_CUES0x1C53BB6B
+#define MATROSKA_ID_TAGS0x1254C367
+#define MATROSKA_ID_SEEKHEAD0x114D9B74
+#define MATROSKA_ID_ATTACHMENTS 0x1941A469
+#define MATROSKA_ID_CLUSTER 0x1F43B675
+#define MATROSKA_ID_CHAPTERS0x1043A770
 
 /* IDs in the info master */
-#define MATROSKA_ID_TIMECODESCALE 0x2AD7B1
-#define MATROSKA_ID_DURATION   0x4489
-#define MATROSKA_ID_TITLE  0x7BA9
-#define MATROSKA_ID_WRITINGAPP 0x5741
-#define MATROSKA_ID_MUXINGAPP  0x4D80
-#define MATROSKA_ID_DATEUTC0x4461
-#define MATROSKA_ID_SEGMENTUID 0x73A4
+#define MATROSKA_ID_TIMECODESCALE   0x2AD7B1
+#define MATROSKA_ID_DURATION0x4489
+#define MATROSKA_ID_TITLE   0x7BA9
+#define MATROSKA_ID_WRITINGAPP  0x5741
+#define MATROSKA_ID_MUXINGAPP   0x4D80
+#define MATROSKA_ID_DATEUTC 0x4461
+#define MATROSKA_ID_SEGMENTUID  0x73A4
 
 /* IDs in the tracks master */
-#define MATROSKA_ID_TRACKENTRY 0xAE
+#define MATROSKA_ID_TRACKENTRY  0xAE
 
 /* IDs in the trackentry master */
-#define MATROSKA_ID_TRACKNUMBER 0xD7
-#define MATROSKA_ID_TRACKUID   0x73C5
-#define MATROSKA_ID_TRACKTYPE  0x83
-#define MATROSKA_ID_TRACKVIDEO 0xE0
-#define MATROSKA_ID_TRACKAUDIO 0xE1
-#define MATROSKA_ID_TRACKOPERATION 0xE2
+#define MATROSKA_ID_TRACKNUMBER 0xD7
+#define MATROSKA_ID_TRACKUID0x73C5
+#define MATROSKA_ID_TRACKTYPE   0x83
+#define MATROSKA_ID_TRACKVIDEO  0xE0
+#define MATROSKA_ID_TRACKAUDIO  0xE1
+#define MATROSKA_ID_TRACKOPERATION  0xE2
 #define MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED  0x55AB
-#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED   0x55AC
-#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS 0x55AD
-#define MATROSKA_ID_TRACKFLAGORIGINAL 0x55AE
-#define MATROSKA_ID_TRACKFLAGCOMMENTARY   0x55AF
-#define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
-#define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
-#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4
-#define MATROSKA_ID_TRACKNAME  0x536E
-#define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
-#define MATROSKA_ID_CODECID0x86
-#define MATROSKA_ID_CODECPRIVATE 0x63A2
-#define MATROSKA_ID_CODECNAME  0x258688
-#define MATROSKA_ID_CODECINFOURL 0x3B4040
-#define MATROSKA_ID_CODECDOWNLOADURL 0x26B240
-#define MATROSKA_ID_CODECDECODEALL 0xAA
-#define MATROSKA_ID_CODECDELAY 0x56AA
-#define MATROSKA_ID_SEEKPREROLL 0x56BB
-#define MATROSKA_ID_TRACKFLAGENABLED 0xB9
-#define MATROSKA_ID_TRACKFLAGDEFAULT 0x88
-#define MATROSKA_ID_TRACKFLAGFORCED 0x55AA
-#define MATROSKA_ID_TRACKFLAGLACING 0x9C
-#define MATROSKA_ID_TRACKMINCACHE 0x6DE7
-#define MATROSKA_ID_TRACKMAXCACHE 0x6DF8
-#define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
-#define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
+#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED  0x55AC
+#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS  0x55AD
+#define MATROSKA_ID_TRACKFLAGORIGINAL   0x55AE
+#define MATROSKA_ID_TRACKFLAGCOMMENTARY  0x55AF
+#define MATROSKA_ID_TRACKTIMECODESCALE  0x23314F
+#define MATROSKA_ID_TRACKMAXBLKADDID0x55EE
+#define MATROSKA_ID_TRACKBLKADDMAPPING  0x41E4
+#define MATROSKA_ID_TRACKNAME   0x536E
+#define MATROSKA_ID_TRACKLANGUAGE   0x22B59C
+#define MATROSKA_ID_CODECID 0x86
+#define MATROSKA_ID_CODECPRIVATE0x63A2
+#define MATROSKA_ID_CODECNAME   0x258688
+#define MATROSKA_ID_CODECINFOURL0x3B4040
+#define MATROSKA_ID_CODECDOWNLOADURL0x26B240
+#define MATROSKA_ID_CODECDECODEALL  0xAA
+#define MATROSKA_ID_CODECDELAY  0x56AA
+#define MATROSKA_ID_SEEKPREROLL 0x56BB
+#define MATROSKA_ID_TRACKFLAGENABLED0xB9
+#define MATROSKA_ID_TRACKFLAGDEFAULT0x88
+#define MATROSKA_ID_TRACKFLAGFORCED 0x55AA
+#define MATROSKA_ID_TRACKFLAGLACING 0x9C
+#define MATROSKA_ID_TRACKMINCACHE   0x6DE7
+#define MATROSKA_ID_TRACKMAXCACHE   0x6DF8
+#define MATROSKA_ID_TRACKDEFAULTDURATION  0x23E383
+#define 

[FFmpeg-devel] [PATCH 08/12] avformat/matroskasem: reorder EbmlSyntax tables

2022-11-06 Thread Steve Lhomme
So they are sorted by their EBML path, in reverse order so we don't extra
declarations.

No functional changes.
---
 libavformat/matroskasem.c | 263 +++---
 1 file changed, 132 insertions(+), 131 deletions(-)

diff --git a/libavformat/matroskasem.c b/libavformat/matroskasem.c
index 978d7f0281..f1afe4d570 100644
--- a/libavformat/matroskasem.c
+++ b/libavformat/matroskasem.c
@@ -54,15 +54,13 @@ EbmlSyntax ebml_syntax[] = {
 { 0 }
 };
 
-static EbmlSyntax matroska_info[] = {
-{ MATROSKA_ID_TIMECODESCALE, EBML_UINT,  0, 0, 
offsetof(MatroskaDemuxContext, time_scale), { .u = 100 } },
-{ MATROSKA_ID_DURATION,  EBML_FLOAT, 0, 0, 
offsetof(MatroskaDemuxContext, duration) },
-{ MATROSKA_ID_TITLE, EBML_UTF8,  0, 0, 
offsetof(MatroskaDemuxContext, title) },
-{ MATROSKA_ID_WRITINGAPP,EBML_NONE },
-{ MATROSKA_ID_MUXINGAPP, EBML_UTF8, 0, 0, 
offsetof(MatroskaDemuxContext, muxingapp) },
-{ MATROSKA_ID_DATEUTC,   EBML_BIN,  0, 0, 
offsetof(MatroskaDemuxContext, date_utc) },
-{ MATROSKA_ID_SEGMENTUID,EBML_NONE },
-CHILD_OF(matroska_segment)
+static EbmlSyntax matroska_track_video_projection[] = {
+{ MATROSKA_ID_VIDEOPROJECTIONTYPE,EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideoProjection, type), { .u = 
MATROSKA_VIDEO_PROJECTION_TYPE_RECTANGULAR } },
+{ MATROSKA_ID_VIDEOPROJECTIONPRIVATE, EBML_BIN,   0, 0, 
offsetof(MatroskaTrackVideoProjection, private) },
+{ MATROSKA_ID_VIDEOPROJECTIONPOSEYAW, EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrackVideoProjection, yaw),   { .f = 0.0 } },
+{ MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH,   EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrackVideoProjection, pitch), { .f = 0.0 } },
+{ MATROSKA_ID_VIDEOPROJECTIONPOSEROLL,EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrackVideoProjection, roll),  { .f = 0.0 } },
+CHILD_OF(matroska_track_video)
 };
 
 static EbmlSyntax matroska_mastering_meta[] = {
@@ -97,15 +95,6 @@ EbmlSyntax matroska_track_video_color[] = {
 CHILD_OF(matroska_track_video)
 };
 
-static EbmlSyntax matroska_track_video_projection[] = {
-{ MATROSKA_ID_VIDEOPROJECTIONTYPE,EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideoProjection, type), { .u = 
MATROSKA_VIDEO_PROJECTION_TYPE_RECTANGULAR } },
-{ MATROSKA_ID_VIDEOPROJECTIONPRIVATE, EBML_BIN,   0, 0, 
offsetof(MatroskaTrackVideoProjection, private) },
-{ MATROSKA_ID_VIDEOPROJECTIONPOSEYAW, EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrackVideoProjection, yaw),   { .f = 0.0 } },
-{ MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH,   EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrackVideoProjection, pitch), { .f = 0.0 } },
-{ MATROSKA_ID_VIDEOPROJECTIONPOSEROLL,EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrackVideoProjection, roll),  { .f = 0.0 } },
-CHILD_OF(matroska_track_video)
-};
-
 EbmlSyntax matroska_track_video[] = {
 { MATROSKA_ID_VIDEOFRAMERATE,  EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrackVideo, frame_rate) },
 { MATROSKA_ID_VIDEODISPLAYWIDTH,   EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, display_width), { .u=-1 } },
@@ -128,18 +117,20 @@ EbmlSyntax matroska_track_video[] = {
 CHILD_OF(matroska_track)
 };
 
-static EbmlSyntax matroska_track_audio[] = {
-{ MATROSKA_ID_AUDIOSAMPLINGFREQ,EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrackAudio, samplerate), { .f = 8000.0 } },
-{ MATROSKA_ID_AUDIOOUTSAMPLINGFREQ, EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrackAudio, out_samplerate) },
-{ MATROSKA_ID_AUDIOBITDEPTH,EBML_UINT,  0, 0, 
offsetof(MatroskaTrackAudio, bitdepth) },
-{ MATROSKA_ID_AUDIOCHANNELS,EBML_UINT,  0, 0, 
offsetof(MatroskaTrackAudio, channels),   { .u = 1 } },
-CHILD_OF(matroska_track)
+static EbmlSyntax matroska_track_plane[] = {
+{ MATROSKA_ID_TRACKPLANEUID,  EBML_UINT, 0, 0, 
offsetof(MatroskaTrackPlane,uid) },
+{ MATROSKA_ID_TRACKPLANETYPE, EBML_UINT, 0, 0, 
offsetof(MatroskaTrackPlane,type) },
+CHILD_OF(matroska_track_combine_planes)
 };
 
-static EbmlSyntax matroska_track_encoding_compression[] = {
-{ MATROSKA_ID_ENCODINGCOMPALGO, EBML_UINT, 0, 0, 
offsetof(MatroskaTrackCompression, algo), { .u = 
MATROSKA_TRACK_ENCODING_COMP_ZLIB } },
-{ MATROSKA_ID_ENCODINGCOMPSETTINGS, EBML_BIN,  0, 0, 
offsetof(MatroskaTrackCompression, settings) },
-CHILD_OF(matroska_track_encoding)
+EbmlSyntax matroska_track_combine_planes[] = {
+{ MATROSKA_ID_TRACKPLANE, EBML_NEST, 0, sizeof(MatroskaTrackPlane), 
offsetof(MatroskaTrackOperation,combine_planes), {.n = matroska_track_plane} },
+CHILD_OF(matroska_track_operation)
+};
+
+EbmlSyntax matroska_track_operation[] = {
+{ MATROSKA_ID_TRACKCOMBINEPLANES, EBML_NEST, 0, 0, 0, {.n = 
matroska_track_combine_planes} },
+CHILD_OF(matroska_track)
 };
 
 static EbmlSyntax matroska_track_encoding_encryption[] = {
@@ -152,6 +143,13 @@ static EbmlSyntax matroska_track_encoding_encryption[] = {
 { MATROSKA_ID_ENCODINGSIGNATURE,  EBML_NONE },
 

[FFmpeg-devel] [PATCH 04/12] avformat/matroska: move Matroska IDs and enums in a separate header

2022-11-06 Thread Steve Lhomme
So the file can be generated from the EBML Schema.

No functional change.
---
 libavformat/matroska.h | 314 +-
 libavformat/matroska_ids.h | 339 +
 2 files changed, 340 insertions(+), 313 deletions(-)
 create mode 100644 libavformat/matroska_ids.h

diff --git a/libavformat/matroska.h b/libavformat/matroska.h
index 1e8a91295f..174af130de 100644
--- a/libavformat/matroska.h
+++ b/libavformat/matroska.h
@@ -24,6 +24,7 @@
 
 #include "libavcodec/codec_id.h"
 #include "avformat.h"
+#include "matroska_ids.h"
 #include "metadata.h"
 
 /* EBML version supported */
@@ -45,319 +46,6 @@
 #define EBML_ID_VOID   0xEC
 #define EBML_ID_CRC32  0xBF
 
-/*
- * Matroska element IDs, max. 32 bits
- */
-
-/* toplevel segment */
-#define MATROSKA_ID_SEGMENT0x18538067
-
-/* Matroska top-level master IDs */
-#define MATROSKA_ID_INFO   0x1549A966
-#define MATROSKA_ID_TRACKS 0x1654AE6B
-#define MATROSKA_ID_CUES   0x1C53BB6B
-#define MATROSKA_ID_TAGS   0x1254C367
-#define MATROSKA_ID_SEEKHEAD   0x114D9B74
-#define MATROSKA_ID_ATTACHMENTS 0x1941A469
-#define MATROSKA_ID_CLUSTER0x1F43B675
-#define MATROSKA_ID_CHAPTERS   0x1043A770
-
-/* IDs in the info master */
-#define MATROSKA_ID_TIMECODESCALE 0x2AD7B1
-#define MATROSKA_ID_DURATION   0x4489
-#define MATROSKA_ID_TITLE  0x7BA9
-#define MATROSKA_ID_WRITINGAPP 0x5741
-#define MATROSKA_ID_MUXINGAPP  0x4D80
-#define MATROSKA_ID_DATEUTC0x4461
-#define MATROSKA_ID_SEGMENTUID 0x73A4
-
-/* ID in the tracks master */
-#define MATROSKA_ID_TRACKENTRY 0xAE
-
-/* IDs in the trackentry master */
-#define MATROSKA_ID_TRACKNUMBER 0xD7
-#define MATROSKA_ID_TRACKUID   0x73C5
-#define MATROSKA_ID_TRACKTYPE  0x83
-#define MATROSKA_ID_TRACKVIDEO 0xE0
-#define MATROSKA_ID_TRACKAUDIO 0xE1
-#define MATROSKA_ID_TRACKOPERATION 0xE2
-#define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3
-#define MATROSKA_ID_TRACKPLANE 0xE4
-#define MATROSKA_ID_TRACKPLANEUID  0xE5
-#define MATROSKA_ID_TRACKPLANETYPE 0xE6
-#define MATROSKA_ID_CODECID0x86
-#define MATROSKA_ID_CODECPRIVATE 0x63A2
-#define MATROSKA_ID_CODECNAME  0x258688
-#define MATROSKA_ID_CODECINFOURL 0x3B4040
-#define MATROSKA_ID_CODECDOWNLOADURL 0x26B240
-#define MATROSKA_ID_CODECDECODEALL 0xAA
-#define MATROSKA_ID_CODECDELAY 0x56AA
-#define MATROSKA_ID_SEEKPREROLL 0x56BB
-#define MATROSKA_ID_TRACKNAME  0x536E
-#define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
-#define MATROSKA_ID_TRACKFLAGENABLED 0xB9
-#define MATROSKA_ID_TRACKFLAGDEFAULT 0x88
-#define MATROSKA_ID_TRACKFLAGFORCED 0x55AA
-#define MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED  0x55AB
-#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED   0x55AC
-#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS 0x55AD
-#define MATROSKA_ID_TRACKFLAGORIGINAL 0x55AE
-#define MATROSKA_ID_TRACKFLAGCOMMENTARY   0x55AF
-#define MATROSKA_ID_TRACKFLAGLACING 0x9C
-#define MATROSKA_ID_TRACKMINCACHE 0x6DE7
-#define MATROSKA_ID_TRACKMAXCACHE 0x6DF8
-#define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
-#define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
-#define MATROSKA_ID_TRACKCONTENTENCODING 0x6240
-#define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
-#define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
-#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4
-
-/* IDs in the trackvideo master */
-#define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3
-#define MATROSKA_ID_VIDEODISPLAYWIDTH 0x54B0
-#define MATROSKA_ID_VIDEODISPLAYHEIGHT 0x54BA
-#define MATROSKA_ID_VIDEOPIXELWIDTH 0xB0
-#define MATROSKA_ID_VIDEOPIXELHEIGHT 0xBA
-#define MATROSKA_ID_VIDEOPIXELCROPB 0x54AA
-#define MATROSKA_ID_VIDEOPIXELCROPT 0x54BB
-#define MATROSKA_ID_VIDEOPIXELCROPL 0x54CC
-#define MATROSKA_ID_VIDEOPIXELCROPR 0x54DD
-#define MATROSKA_ID_VIDEODISPLAYUNIT 0x54B2
-#define MATROSKA_ID_VIDEOFLAGINTERLACED 0x9A
-#define MATROSKA_ID_VIDEOFIELDORDER 0x9D
-#define MATROSKA_ID_VIDEOSTEREOMODE 0x53B8
-#define MATROSKA_ID_VIDEOALPHAMODE 0x53C0
-#define MATROSKA_ID_VIDEOASPECTRATIO 0x54B3
-#define MATROSKA_ID_VIDEOCOLORSPACE 0x2EB524
-#define MATROSKA_ID_VIDEOCOLOR 0x55B0
-
-#define MATROSKA_ID_VIDEOCOLORMATRIXCOEFF 0x55B1
-#define MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL 0x55B2
-#define MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ 0x55B3
-#define MATROSKA_ID_VIDEOCOLORCHROMASUBVERT 0x55B4
-#define MATROSKA_ID_VIDEOCOLORCBSUBHORZ 0x55B5
-#define MATROSKA_ID_VIDEOCOLORCBSUBVERT 0x55B6
-#define MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ 0x55B7
-#define MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT 0x55B8
-#define MATROSKA_ID_VIDEOCOLORRANGE 0x55B9
-#define MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS 0x55BA
-
-#define MATROSKA_ID_VIDEOCOLORPRIMARIES 0x55BB
-#define MATROSKA_ID_VIDEOCOLORMAXCLL 0x55BC
-#define MATROSKA_ID_VIDEOCOLORMAXFALL 0x55BD
-
-#define MATROSKA_ID_VIDEOCOLORMASTERINGMETA 0x55D0
-#define MATROSKA_ID_VIDEOCOLOR_RX 0x55D1
-#define MATROSKA_ID_VIDEOCOLOR_RY 0x55D2
-#define MATROSKA_ID_VIDEOCOLOR_GX 0x55D3
-#define MATROSKA_ID_VIDEOCOLOR_GY 0x55D4
-#define 

[FFmpeg-devel] [PATCH 03/12] avformat/matroska: use more consistent spacing in enums

2022-11-06 Thread Steve Lhomme
---
 libavformat/matroska.h | 18 +-
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/libavformat/matroska.h b/libavformat/matroska.h
index 45077ed33f..1e8a91295f 100644
--- a/libavformat/matroska.h
+++ b/libavformat/matroska.h
@@ -296,18 +296,18 @@ typedef enum {
 } MatroskaTrackEncodingCompAlgo;
 
 typedef enum {
-MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED = 0,
-MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED   = 1,
-MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE  = 2,
+  MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED = 0,
+  MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED   = 1,
+  MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE  = 2,
 } MatroskaVideoInterlaceFlag;
 
 typedef enum {
-MATROSKA_VIDEO_FIELDORDER_PROGRESSIVE  = 0,
-MATROSKA_VIDEO_FIELDORDER_TT   = 1,
-MATROSKA_VIDEO_FIELDORDER_UNDETERMINED = 2,
-MATROSKA_VIDEO_FIELDORDER_BB   = 6,
-MATROSKA_VIDEO_FIELDORDER_TB   = 9,
-MATROSKA_VIDEO_FIELDORDER_BT   = 14,
+  MATROSKA_VIDEO_FIELDORDER_PROGRESSIVE  = 0,
+  MATROSKA_VIDEO_FIELDORDER_TT   = 1,
+  MATROSKA_VIDEO_FIELDORDER_UNDETERMINED = 2,
+  MATROSKA_VIDEO_FIELDORDER_BB   = 6,
+  MATROSKA_VIDEO_FIELDORDER_TB   = 9,
+  MATROSKA_VIDEO_FIELDORDER_BT   = 14,
 } MatroskaVideoFieldOrder;
 
 typedef enum {
-- 
2.20.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 01/12] avformat/matroskadec: fix the default of the TagDefault element

2022-11-06 Thread Steve Lhomme
By default a tag is the default one.
---
 libavformat/matroskadec.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index d582f566a2..9e756bb030 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -703,8 +703,8 @@ static EbmlSyntax matroska_simpletag[] = {
 { MATROSKA_ID_TAGNAME,EBML_UTF8, 0, 0,   
offsetof(MatroskaTag, name) },
 { MATROSKA_ID_TAGSTRING,  EBML_UTF8, 0, 0,   
offsetof(MatroskaTag, string) },
 { MATROSKA_ID_TAGLANG,EBML_STR,  0, 0,   
offsetof(MatroskaTag, lang), { .s = "und" } },
-{ MATROSKA_ID_TAGDEFAULT, EBML_UINT, 0, 0,   
offsetof(MatroskaTag, def) },
-{ MATROSKA_ID_TAGDEFAULT_BUG, EBML_UINT, 0, 0,   
offsetof(MatroskaTag, def) },
+{ MATROSKA_ID_TAGDEFAULT, EBML_UINT, 0, 0,   
offsetof(MatroskaTag, def), { .u = 1 } },
+{ MATROSKA_ID_TAGDEFAULT_BUG, EBML_UINT, 0, 0,   
offsetof(MatroskaTag, def), { .u = 1 } },
 { MATROSKA_ID_SIMPLETAG,  EBML_NEST, 0, sizeof(MatroskaTag), 
offsetof(MatroskaTag, sub),  { .n = matroska_simpletag } },
 CHILD_OF(matroska_tag)
 };
-- 
2.20.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-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 02/12] avformat/matroskadec: remove some implicit default value

2022-11-06 Thread Steve Lhomme
All integers should be initialized to 0. Make the tables more consistent by
only setting non zero values, so they stand out.
---
 libavformat/matroskadec.c | 32 
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 9e756bb030..5a083acd75 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -482,7 +482,7 @@ static EbmlSyntax matroska_mastering_meta[] = {
 
 static EbmlSyntax matroska_track_video_color[] = {
 { MATROSKA_ID_VIDEOCOLORMATRIXCOEFF,  EBML_UINT, 0, 0, 
offsetof(MatroskaTrackVideoColor, matrix_coefficients), { .u = 
AVCOL_SPC_UNSPECIFIED } },
-{ MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL,   EBML_UINT, 0, 0, 
offsetof(MatroskaTrackVideoColor, bits_per_channel), { .u = 0 } },
+{ MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL,   EBML_UINT, 0, 0, 
offsetof(MatroskaTrackVideoColor, bits_per_channel) },
 { MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ,EBML_UINT, 0, 0, 
offsetof(MatroskaTrackVideoColor, chroma_sub_horz) },
 { MATROSKA_ID_VIDEOCOLORCHROMASUBVERT,EBML_UINT, 0, 0, 
offsetof(MatroskaTrackVideoColor, chroma_sub_vert) },
 { MATROSKA_ID_VIDEOCOLORCBSUBHORZ,EBML_UINT, 0, 0, 
offsetof(MatroskaTrackVideoColor, cb_sub_horz) },
@@ -514,7 +514,7 @@ static EbmlSyntax matroska_track_video[] = {
 { MATROSKA_ID_VIDEOPIXELWIDTH, EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, pixel_width) },
 { MATROSKA_ID_VIDEOPIXELHEIGHT,EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, pixel_height) },
 { MATROSKA_ID_VIDEOCOLORSPACE, EBML_BIN,   0, 0, 
offsetof(MatroskaTrackVideo, color_space) },
-{ MATROSKA_ID_VIDEOALPHAMODE,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, alpha_mode), { .u = 0 } },
+{ MATROSKA_ID_VIDEOALPHAMODE,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrackVideo, alpha_mode) },
 { MATROSKA_ID_VIDEOCOLOR,  EBML_NEST,  0, 
sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = 
matroska_track_video_color } },
 { MATROSKA_ID_VIDEOPROJECTION, EBML_NEST,  0, 0, 
offsetof(MatroskaTrackVideo, projection), { .n = 
matroska_track_video_projection } },
 { MATROSKA_ID_VIDEOPIXELCROPB, EBML_NONE },
@@ -544,7 +544,7 @@ static EbmlSyntax matroska_track_encoding_compression[] = {
 };
 
 static EbmlSyntax matroska_track_encoding_encryption[] = {
-{ MATROSKA_ID_ENCODINGENCALGO,EBML_UINT, 0, 0, 
offsetof(MatroskaTrackEncryption,algo), {.u = 0} },
+{ MATROSKA_ID_ENCODINGENCALGO,EBML_UINT, 0, 0, 
offsetof(MatroskaTrackEncryption,algo) },
 { MATROSKA_ID_ENCODINGENCKEYID,   EBML_BIN, 0, 0, 
offsetof(MatroskaTrackEncryption,key_id) },
 { MATROSKA_ID_ENCODINGENCAESSETTINGS, EBML_NONE },
 { MATROSKA_ID_ENCODINGSIGALGO,EBML_NONE },
@@ -555,7 +555,7 @@ static EbmlSyntax matroska_track_encoding_encryption[] = {
 };
 static EbmlSyntax matroska_track_encoding[] = {
 { MATROSKA_ID_ENCODINGSCOPE,   EBML_UINT, 0, 0, 
offsetof(MatroskaTrackEncoding, scope),   { .u = 1 } },
-{ MATROSKA_ID_ENCODINGTYPE,EBML_UINT, 0, 0, 
offsetof(MatroskaTrackEncoding, type),{ .u = 0 } },
+{ MATROSKA_ID_ENCODINGTYPE,EBML_UINT, 0, 0, 
offsetof(MatroskaTrackEncoding, type) },
 { MATROSKA_ID_ENCODINGCOMPRESSION, EBML_NEST, 0, 0, 
offsetof(MatroskaTrackEncoding, compression), { .n = 
matroska_track_encoding_compression } },
 { MATROSKA_ID_ENCODINGENCRYPTION,  EBML_NEST, 0, 0, 
offsetof(MatroskaTrackEncoding, encryption),  { .n = 
matroska_track_encoding_encryption } },
 { MATROSKA_ID_ENCODINGORDER,   EBML_NONE },
@@ -598,24 +598,24 @@ static EbmlSyntax matroska_track[] = {
 { MATROSKA_ID_TRACKTYPE, EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, type) },
 { MATROSKA_ID_CODECID,   EBML_STR,   0, 0, 
offsetof(MatroskaTrack, codec_id) },
 { MATROSKA_ID_CODECPRIVATE,  EBML_BIN,   0, 0, 
offsetof(MatroskaTrack, codec_priv) },
-{ MATROSKA_ID_CODECDELAY,EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, codec_delay),  { .u = 0 } },
+{ MATROSKA_ID_CODECDELAY,EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, codec_delay) },
 { MATROSKA_ID_TRACKLANGUAGE, EBML_STR,   0, 0, 
offsetof(MatroskaTrack, language), { .s = "eng" } },
 { MATROSKA_ID_TRACKDEFAULTDURATION,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, default_duration) },
 { MATROSKA_ID_TRACKTIMECODESCALE,EBML_FLOAT, 0, 0, 
offsetof(MatroskaTrack, time_scale),   { .f = 1.0 } },
-{ MATROSKA_ID_TRACKFLAGCOMMENTARY,   EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, flag_comment), { .u = 0 } },
+{ MATROSKA_ID_TRACKFLAGCOMMENTARY,   EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, flag_comment) },
 { MATROSKA_ID_TRACKFLAGDEFAULT,  EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, flag_default), { .u = 1 } },
-{ MATROSKA_ID_TRACKFLAGFORCED,   EBML_UINT,  0, 0, 
offsetof(MatroskaTrack, flag_forced),  

[FFmpeg-devel] [PATCH 00/12] Use generated semantic for Matroska demuxer

2022-11-06 Thread Steve Lhomme
From: robux4 

Following an earlier version of the generated code, I reworked to code and move 
the generator outside of the FFmpeg source tree.

The XSLT code to generate this code from the EBML Schema for Matroska can be
found at https://github.com/Matroska-Org/foundation-source/pull/116

Steve Lhomme (12):
  avformat/matroskadec: fix the default of the TagDefault element
  avformat/matroskadec: remove some implicit default value
  avformat/matroska: use more consistent spacing in enums
  avformat/matroska: move Matroska IDs and enums in a separate header
  avformat/matroskadec: move the elements semantic in a separate file
  avformat/matroska_ids: move some IDs in separate sections
  avformat/matroska_ids: reorder some IDs to match the generated order
  avformat/matroskasem: reorder EbmlSyntax tables
  avformat/matroskasem: reorder some EbmlSyntax elements
  avformat/matroska: use the generated semantic files
  avformat/matroska: only export a few elements.
  avformat/matroska: add missing elements

 libavformat/Makefile   |   2 +-
 libavformat/matroska.h | 314 +---
 libavformat/matroska_ids.h | 464 
 libavformat/matroskadec.c  | 712 +
 libavformat/matroskasem.c  | 471 
 libavformat/matroskasem.h  | 389 
 6 files changed, 1327 insertions(+), 1025 deletions(-)
 create mode 100644 libavformat/matroska_ids.h
 create mode 100644 libavformat/matroskasem.c
 create mode 100644 libavformat/matroskasem.h

-- 
2.20.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-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] Rework color quantization in palette{gen,use}

2022-11-06 Thread Ronald S. Bultje
Hi,

On Sat, Nov 5, 2022 at 2:54 PM Clément Bœsch  wrote:

> On Sat, Nov 05, 2022 at 04:44:39PM +0100, Paul B Mahol wrote:
> [...]
> > > Finally, I do believe a lot of other color filters could at least
> benefit
> > > from
> > > fixing their gamma handling (I know I'm guilty of this in various other
> > > filters).
> >
> > gamma handling depends not on pixel format but on metadata present in
> frame.
>
> Right, as suggested by Ronald on IRC, maybe it would have been appropriate
> to use the vf colorspace code to honor the transfer functions.
>
> That being said, this involves quite a substantial refactoring. Is this
> considered blocking?
>

Not for me. I'd like a big fat FIXME and I (or you, or anyone) can look
into this at some point in the future.

Ronald
___
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".


Re: [FFmpeg-devel] [PATCH] fftools/ffprobe: Loop over correct number of streams when flushing decoders

2022-11-06 Thread Derek Buitenhuis
On 11/3/2022 3:17 PM, Derek Buitenhuis wrote:
> ---
>  fftools/ffprobe.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Ping.

- Derek
___
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".


Re: [FFmpeg-devel] [PATCH 3/4] avcodec/bonk: Check unquant for overflow

2022-11-06 Thread Paul B Mahol
On 11/5/22, Michael Niedermayer  wrote:
> Fixes: signed integer overflow: -2889074 * 2048 cannot be represented in
> type 'int'
> Fixes:
> 51363/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_BONK_fuzzer-5660734784143360
>
> Found-by: continuous fuzzing process
> https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> Signed-off-by: Michael Niedermayer 
> ---
>  libavcodec/bonk.c | 7 ++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/libavcodec/bonk.c b/libavcodec/bonk.c
> index 471e09fe14..1695229dbd 100644
> --- a/libavcodec/bonk.c
> +++ b/libavcodec/bonk.c
> @@ -363,12 +363,17 @@ static int bonk_decode(AVCodecContext *avctx, AVFrame
> *frame,
>  return ret;
>
>  for (int i = 0; i < samples_per_packet; i++) {
> +int64_t t64;
>  for (int j = 0; j < s->down_sampling - 1; j++) {
>  sample[0] = predictor_calc_error(s->k, state, s->n_taps,
> 0);
>  sample++;
>  }
>
> -sample[0] = predictor_calc_error(s->k, state, s->n_taps,
> s->input_samples[i] * quant);
> +t64 = s->input_samples[i] * (int64_t)quant;
> +if ((int32_t)t64 != t64)
> +return AVERROR_INVALIDDATA;
> +
> +sample[0] = predictor_calc_error(s->k, state, s->n_taps, t64);
>  sample++;
>  }
>

NAK, using int64_t and thus slowing things down.

> --
> 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-requ...@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-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 4/4] avcodec/bonk: Check for undefined overflow in predictor_calc_error()

2022-11-06 Thread Paul B Mahol
On 11/5/22, Michael Niedermayer  wrote:
> Fixes: signed integer overflow: 22 * -2107998208 cannot be represented in
> type 'int'
> Fixes:
> 51363/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_BONK_fuzzer-5660734784143360
>
> Found-by: continuous fuzzing process
> https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> Signed-off-by: Michael Niedermayer 
> ---
>  libavcodec/bonk.c | 11 +--
>  1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/libavcodec/bonk.c b/libavcodec/bonk.c
> index 1695229dbd..40963aa7c6 100644
> --- a/libavcodec/bonk.c
> +++ b/libavcodec/bonk.c
> @@ -278,10 +278,13 @@ static int predictor_calc_error(int *k, int *state,
> int order, int error)
>  *state_ptr = &(state[order-2]);
>
>  for (i = order-2; i >= 0; i--, k_ptr--, state_ptr--) {
> -int k_value = *k_ptr, state_value = *state_ptr;
> +int64_t k_value = *k_ptr, state_value = *state_ptr;
>
>  x -= shift_down(k_value * state_value, LATTICE_SHIFT);
> -state_ptr[1] = state_value + shift_down(k_value * x,
> LATTICE_SHIFT);
> +k_value *= x;
> +if ((int32_t)k_value != k_value)
> +return AVERROR_INVALIDDATA;
> +state_ptr[1] = state_value + shift_down(k_value, LATTICE_SHIFT);
>  }
>
>  // don't drift too far, to avoid overflows
> @@ -366,6 +369,8 @@ static int bonk_decode(AVCodecContext *avctx, AVFrame
> *frame,
>  int64_t t64;
>  for (int j = 0; j < s->down_sampling - 1; j++) {
>  sample[0] = predictor_calc_error(s->k, state, s->n_taps,
> 0);
> +if (sample[0] == AVERROR_INVALIDDATA)
> +return sample[0];
>  sample++;
>  }
>
> @@ -374,6 +379,8 @@ static int bonk_decode(AVCodecContext *avctx, AVFrame
> *frame,
>  return AVERROR_INVALIDDATA;
>
>  sample[0] = predictor_calc_error(s->k, state, s->n_taps, t64);
> +if (sample[0] == AVERROR_INVALIDDATA)
> +return sample[0];
>  sample++;
>  }
>
> --
> 2.17.1
>


NAK,

slowing things down by using int64_t

> ___
> 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".
>
___
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".