Re: [FFmpeg-devel] [PATCH v7] libavfilter/x86/vf_convolution: add sobel filter optimization and unit test with intel AVX512 VNNI
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
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
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
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
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
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
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
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
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
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
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()
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)
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
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)
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)
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)
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
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
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
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
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
> -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}
> -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
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
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()
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()
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
--- 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
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
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
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
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
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
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
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
--- 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
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
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
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}
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
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
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()
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".