Re: [FFmpeg-devel] [PATCH v6 3/3] avcodec/qsvdec: Implement SEI parsing for QSV decoders

2022-11-21 Thread Xiang, Haihao
On Mon, 2022-11-21 at 15:58 +, Soft Works wrote:
> > -Original Message-
> > From: Xiang, Haihao 
> > Sent: Monday, November 21, 2022 3:45 AM
> > To: ffmpeg-devel@ffmpeg.org
> > Cc: softwo...@hotmail.com; kier...@obe.tv; haihao.xiang-at-
> > intel@ffmpeg.org; andreas.rheinha...@outlook.com
> > Subject: Re: [FFmpeg-devel] [PATCH v6 3/3] avcodec/qsvdec: Implement
> > SEI parsing for QSV decoders
> > 
> > On Tue, 2022-10-25 at 04:03 +, softworkz wrote:
> > > From: softworkz 
> > > 
> > > Signed-off-by: softworkz 
> > > ---
> > >  libavcodec/Makefile |   2 +-
> > >  libavcodec/qsvdec.c | 321
> > 
> > >  2 files changed, 322 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> > > index 90c7f113a3..cbddbb0ace 100644
> > > --- a/libavcodec/Makefile
> > > +++ b/libavcodec/Makefile
> > > @@ -146,7 +146,7 @@ OBJS-$(CONFIG_MSS34DSP)+=
> > mss34dsp.o
> > >  OBJS-$(CONFIG_PIXBLOCKDSP) += pixblockdsp.o
> > >  OBJS-$(CONFIG_QPELDSP) += qpeldsp.o
> > >  OBJS-$(CONFIG_QSV) += qsv.o
> > > -OBJS-$(CONFIG_QSVDEC)  += qsvdec.o
> > > +OBJS-$(CONFIG_QSVDEC)  += qsvdec.o h264_sei.o
> > hevc_sei.o
> > >  OBJS-$(CONFIG_QSVENC)  += qsvenc.o
> > >  OBJS-$(CONFIG_RANGECODER)  += rangecoder.o
> > >  OBJS-$(CONFIG_RDFT)+= rdft.o
> > > diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
> > > index 73405b5747..467a248224 100644
> > > --- a/libavcodec/qsvdec.c
> > > +++ b/libavcodec/qsvdec.c
> > > @@ -41,6 +41,7 @@
> > >  #include "libavutil/time.h"
> > >  #include "libavutil/imgutils.h"
> > >  #include "libavutil/film_grain_params.h"
> > > +#include 
> > > 
> > >  #include "avcodec.h"
> > >  #include "codec_internal.h"
> > > @@ -49,6 +50,9 @@
> > >  #include "hwconfig.h"
> > >  #include "qsv.h"
> > >  #include "qsv_internal.h"
> > > +#include "h264_sei.h"
> > > +#include "hevc_ps.h"
> > > +#include "hevc_sei.h"
> > > 
> > >  #if QSV_ONEVPL
> > >  #include 
> > > @@ -66,6 +70,8 @@ static const AVRational mfx_tb = { 1, 9 };
> > >  AV_NOPTS_VALUE : pts_tb.num ? \
> > >  av_rescale_q(mfx_pts, mfx_tb, pts_tb) : mfx_pts)
> > > 
> > > +#define PAYLOAD_BUFFER_SIZE 65535
> > > +
> > >  typedef struct QSVAsyncFrame {
> > >  mfxSyncPoint *sync;
> > >  QSVFrame *frame;
> > > @@ -107,6 +113,9 @@ typedef struct QSVContext {
> > > 
> > >  mfxExtBuffer **ext_buffers;
> > >  int nb_ext_buffers;
> > > +
> > > +mfxU8 payload_buffer[PAYLOAD_BUFFER_SIZE];
> > > +AVBufferRef *a53_buf_ref;
> > >  } QSVContext;
> > > 
> > >  static const AVCodecHWConfigInternal *const qsv_hw_configs[] = {
> > > @@ -628,6 +637,299 @@ static int
> > qsv_export_film_grain(AVCodecContext *avctx,
> > > mfxExtAV1FilmGrainParam
> > >  }
> > >  #endif
> > > 
> > > +static int find_start_offset(mfxU8 data[4])
> > > +{
> > > +if (data[0] == 0 && data[1] == 0 && data[2] == 1)
> > > +return 3;
> > > +
> > > +if (data[0] == 0 && data[1] == 0 && data[2] == 0 && data[3] ==
> > 1)
> > > +return 4;
> > > +
> > > +return 0;
> > > +}
> > > +
> > > +static int parse_sei_h264(AVCodecContext* avctx, QSVContext* q,
> > AVFrame* out)
> > > +{
> > > +H264SEIContext sei = { 0 };
> > > +GetBitContext gb = { 0 };
> > > +mfxPayload payload = { 0, .Data = &q->payload_buffer[0],
> > .BufSize =
> > > sizeof(q->payload_buffer) - AV_INPUT_BUFFER_PADDING_SIZE };
> > > +mfxU64 ts;
> > > +int ret;
> > > +
> > > +while (1) {
> > > +int start;
> > > +memset(payload.Data, 0, payload.BufSize);
> > > +
> > > +ret = MFXVideoDECODE_GetPayload(q->session, &ts,
> > &payload);
> > > +if (ret == MFX_ERR_NOT_ENOUGH_BUFFER) {
> > > +av_log(avctx, AV_LOG_WARNING, "Warning: Insufficient
> > buffer on
> > > GetPayload(). Size: %"PRIu64" Needed: %d\n", sizeof(q-
> > > payload_buffer),
> > > payload.BufSize);
> > > +return 0;
> > > +}
> > > +if (ret != MFX_ERR_NONE)
> > > +return ret;
> > > +
> > > +if (payload.NumBit == 0 || payload.NumBit >=
> > payload.BufSize * 8)
> > > +break;
> > > +
> > > +start = find_start_offset(payload.Data);
> > > +
> > > +switch (payload.Type) {
> > > +case SEI_TYPE_BUFFERING_PERIOD:
> > > +case SEI_TYPE_PIC_TIMING:
> > > +continue;
> > > +}
> > > +
> > > +if (init_get_bits(&gb, &payload.Data[start],
> > payload.NumBit - start *
> > > 8) < 0)
> > > +av_log(avctx, AV_LOG_ERROR, "Error initializing
> > bitstream reader
> > > SEI type: %d  Numbits %d error: %d\n", payload.Type,
> > payload.NumBit, ret);
> > > +else {
> > > +ret = ff_h264_sei_decode(&sei, &gb, NULL, avctx);
> > > +
> > > +if (ret < 0)
> > > +av_log(avctx, AV

Re: [FFmpeg-devel] [PATCH v3] avcodec/av1_vaapi: add direct film grain mode

2022-11-21 Thread Xiang, Haihao
On Mon, 2022-11-21 at 14:50 -0500, Ruijing Dong wrote:
> Add flag AV_VAAPI_DRIVER_QUIRK_DIRCT_FILM_GRAIN_ATTRIBUTES to
> specify a direct film grain mode for AMD av1 decoder.
> 
> issue:
> By using AMD av1 decoder via VAAPI, when used with film
> grain content, the output displays black screen with
> incorrect frame order.
> 
> The issue being discussed in here:
> https://gitlab.freedesktop.org/mesa/mesa/-/issues/6903#note_1613807
> 
> Signed-off-by: Ruijing Dong 
> Signed-off-by: nyanmisaka 
> ---
> 
> update: using driver_quirks to identify AMD driver instead of
> extra AV_HWACCEL_FLAG.
> 
>  libavcodec/avcodec.h| 1 -
>  libavcodec/vaapi_av1.c  | 6 --
>  libavutil/hwcontext_vaapi.c | 5 +
>  libavutil/hwcontext_vaapi.h | 6 ++
>  4 files changed, 15 insertions(+), 3 deletions(-)
> 
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index 3edd8e2636..51adb8a1dc 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -2252,7 +2252,6 @@ typedef struct AVHWAccel {
>   *  while indicating success.
>   */
>  #define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2)
> -

This change is not needed 

Thanks
Haihao


>  /**
>   * @}
>   */
> diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c
> index d0339b2705..1eb6b87264 100644
> --- a/libavcodec/vaapi_av1.c
> +++ b/libavcodec/vaapi_av1.c
> @@ -127,6 +127,7 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx,
>  int8_t bit_depth_idx;
>  int err = 0;
>  int apply_grain = !(avctx->export_side_data &
> AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain;
> +int direct_film_grain = ctx->base.hwctx->driver_quirks &
> AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES;
>  uint8_t remap_lr_type[4] = {AV1_RESTORE_NONE, AV1_RESTORE_SWITCHABLE,
> AV1_RESTORE_WIENER, AV1_RESTORE_SGRPROJ};
>  uint8_t segmentation_feature_signed[AV1_SEG_LVL_MAX] = {1, 1, 1, 1, 1, 0,
> 0, 0};
>  uint8_t segmentation_feature_max[AV1_SEG_LVL_MAX] = {255,
> AV1_MAX_LOOP_FILTER,
> @@ -136,7 +137,7 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx,
>  if (bit_depth_idx < 0)
>  goto fail;
> 
> -if (apply_grain) {
> +if (apply_grain && !direct_film_grain) {
>  if (ctx->tmp_frame->buf[0])
>  ff_thread_release_buffer(avctx, ctx->tmp_frame);
>  err = ff_thread_get_buffer(avctx, ctx->tmp_frame,
> AV_GET_BUFFER_FLAG_REF);
> @@ -375,6 +376,7 @@ static int vaapi_av1_end_frame(AVCodecContext *avctx)
>  VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data;
> 
>  int apply_grain = !(avctx->export_side_data &
> AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain;
> +int direct_film_grain = ctx->base.hwctx->driver_quirks &
> AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES;
>  int ret;
>  ret = ff_vaapi_decode_issue(avctx, pic);
>  if (ret < 0)
> @@ -385,7 +387,7 @@ static int vaapi_av1_end_frame(AVCodecContext *avctx)
>  if (ctx->ref_tab[i].frame->buf[0])
>  ff_thread_release_buffer(avctx, ctx->ref_tab[i].frame);
> 
> -if (apply_grain) {
> +if (apply_grain && !direct_film_grain) {
>  ret = av_frame_ref(ctx->ref_tab[i].frame, ctx->tmp_frame);
>  if (ret < 0)
>  return ret;
> diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c
> index 4bcde74f62..dced6e9401 100644
> --- a/libavutil/hwcontext_vaapi.c
> +++ b/libavutil/hwcontext_vaapi.c
> @@ -371,6 +371,11 @@ static const struct {
>  "Splitted-Desktop Systems VDPAU backend for VA-API",
>  AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES,
>  },
> +{
> +"AMD Radeon",
> +"AMD Radeon",
> +AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES,
> +}
>  };
> 
>  static int vaapi_device_init(AVHWDeviceContext *hwdev)
> diff --git a/libavutil/hwcontext_vaapi.h b/libavutil/hwcontext_vaapi.h
> index 0b2e071cb3..b93d676423 100644
> --- a/libavutil/hwcontext_vaapi.h
> +++ b/libavutil/hwcontext_vaapi.h
> @@ -58,6 +58,12 @@ enum {
>   * and the results of the vaQuerySurfaceAttributes() call will be faked.
>   */
>  AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3),
> +
> +/**
> + * The identified driver which suppports film grain direct output mode.
> + * and this is to avoid av1 decoding film grain corruption.
> + */
> +AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES = (1 << 4),
>  };
> 
>  /**
> --
> 2.25.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-devel] [PATCH] lavf/mux: ignore nonmonotonic timestamps for timestampless muxers

2022-11-21 Thread rcombs
---
 libavformat/mux.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/libavformat/mux.c b/libavformat/mux.c
index 37fe19358d..7b13dd8012 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -538,7 +538,7 @@ static int compute_muxer_pkt_fields(AVFormatContext *s, 
AVStream *st, AVPacket *
 }
 
 if (sti->cur_dts && sti->cur_dts != AV_NOPTS_VALUE &&
-((!(s->oformat->flags & AVFMT_TS_NONSTRICT) &&
+((!(s->oformat->flags & (AVFMT_TS_NONSTRICT | AVFMT_NOTIMESTAMPS)) &&
   st->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE &&
   st->codecpar->codec_type != AVMEDIA_TYPE_DATA &&
   sti->cur_dts >= pkt->dts) || sti->cur_dts > pkt->dts)) {
@@ -783,7 +783,8 @@ static int prepare_input_packet(AVFormatContext *s, 
AVStream *st, AVPacket *pkt)
 /* check that the dts are increasing (or at least non-decreasing,
  * if the format allows it */
 if (sti->cur_dts != AV_NOPTS_VALUE &&
-((!(s->oformat->flags & AVFMT_TS_NONSTRICT) && sti->cur_dts >= 
pkt->dts) ||
+((!(s->oformat->flags & (AVFMT_TS_NONSTRICT | AVFMT_NOTIMESTAMPS)) 
&&
+  sti->cur_dts >= pkt->dts) ||
  sti->cur_dts > pkt->dts)) {
 av_log(s, AV_LOG_ERROR,
"Application provided invalid, non monotonically increasing 
"
-- 
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 3/3] avcodec/dts2pts_bsf: Eliminate some 64bit corner cases

2022-11-21 Thread Michael Niedermayer
Fixes: negation of -2147483648 cannot be represented in type 'int'; cast to an 
unsigned type to negate this value to itself
Fixes: 
53364/clusterfuzz-testcase-minimized-ffmpeg_BSF_DTS2PTS_fuzzer-4693772269387776

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

diff --git a/libavcodec/dts2pts_bsf.c b/libavcodec/dts2pts_bsf.c
index 8142562d2c..522d5e1eb0 100644
--- a/libavcodec/dts2pts_bsf.c
+++ b/libavcodec/dts2pts_bsf.c
@@ -301,15 +301,15 @@ static int h264_filter(AVBSFContext *ctx)
 
 if (output_picture_number != h264->last_poc) {
 if (h264->last_poc != INT_MIN) {
-int diff = FFABS(h264->last_poc - output_picture_number);
+int64_t diff = FFABS(h264->last_poc - 
(int64_t)output_picture_number);
 
 if ((output_picture_number < 0) && !h264->last_poc)
 h264->poc_diff = 0;
-else if (FFABS(output_picture_number) < h264->poc_diff) {
+else if (FFABS((int64_t)output_picture_number) < 
h264->poc_diff) {
 diff = FFABS(output_picture_number);
 h264->poc_diff = 0;
 }
-if (!h264->poc_diff || (h264->poc_diff > diff)) {
+if ((!h264->poc_diff || (h264->poc_diff > diff)) && diff 
<= INT_MAX) {
 h264->poc_diff = diff;
 if (h264->poc_diff == 1 && 
h264->sps.frame_mbs_only_flag) {
 av_tree_enumerate(s->root, &h264->poc_diff, NULL, 
dec_poc);
-- 
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] [PATCH 2/3] avcodec/mlpdec: Check max matrix instead of max channel in noise check

2022-11-21 Thread Michael Niedermayer
This is a regression since: adaa06581c5444c94eef72d61b8166f096e2687a
Before this, max_channel and  max_matrix_channel where compared for equality

Fixes: out of array access
Fixes: 
53340/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_TRUEHD_fuzzer-514959011885875

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

diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c
index 0b0eb75990..5b14a3b03b 100644
--- a/libavcodec/mlpdec.c
+++ b/libavcodec/mlpdec.c
@@ -539,7 +539,7 @@ static int read_restart_header(MLPDecodeContext *m, 
GetBitContext *gbp,
 
 /* This should happen for TrueHD streams with >6 channels and MLP's noise
  * type. It is not yet known if this is allowed. */
-if (max_channel > MAX_MATRIX_CHANNEL_MLP && !noise_type) {
+if (max_matrix_channel > MAX_MATRIX_CHANNEL_MLP && !noise_type) {
 avpriv_request_sample(m->avctx,
   "%d channels (more than the "
   "maximum supported by the decoder)",
-- 
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] [PATCH 1/3] avutil/tx: Use unsigned in ff_tx_fft_sr_combine() to avoid undefined behavior

2022-11-21 Thread Michael Niedermayer
Fixes: signed integer overflow: -1284837070 - 982101618 cannot be represented 
in type 'int'
Fixes: 
53105/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_AC3_FIXED_fuzzer-4848015827664896

Found-by: continuous fuzzing process 
https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer 
---
 libavutil/tx_priv.h | 3 +++
 libavutil/tx_template.c | 2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/libavutil/tx_priv.h b/libavutil/tx_priv.h
index fb61119009..6f01f305fc 100644
--- a/libavutil/tx_priv.h
+++ b/libavutil/tx_priv.h
@@ -34,6 +34,7 @@
 #define MULT(x, m) ((x) * (m))
 #define SCALE_TYPE float
 typedef float TXSample;
+typedef float TXUSample;
 typedef AVComplexFloat TXComplex;
 #elif defined(TX_DOUBLE)
 #define TX_TAB(x) x ## _double
@@ -45,6 +46,7 @@ typedef AVComplexFloat TXComplex;
 #define MULT(x, m) ((x) * (m))
 #define SCALE_TYPE double
 typedef double TXSample;
+typedef double TXUSample;
 typedef AVComplexDouble TXComplex;
 #elif defined(TX_INT32)
 #define TX_TAB(x) x ## _int32
@@ -56,6 +58,7 @@ typedef AVComplexDouble TXComplex;
 #define MULT(x, m) (int64_t)(x)) * (int64_t)(m)) + 0x4000) >> 31)
 #define SCALE_TYPE float
 typedef int32_t TXSample;
+typedef uint32_t TXUSample;
 typedef AVComplexInt32 TXComplex;
 #else
 typedef void TXComplex;
diff --git a/libavutil/tx_template.c b/libavutil/tx_template.c
index 666af5e496..b624869010 100644
--- a/libavutil/tx_template.c
+++ b/libavutil/tx_template.c
@@ -497,7 +497,7 @@ static inline void TX_NAME(ff_tx_fft_sr_combine)(TXComplex 
*z,
 int o2 = 4*len;
 int o3 = 6*len;
 const TXSample *wim = cos + o1 - 7;
-TXSample t1, t2, t3, t4, t5, t6, r0, i0, r1, i1;
+TXUSample t1, t2, t3, t4, t5, t6, r0, i0, r1, i1;
 
 for (int i = 0; i < len; i += 4) {
 TRANSFORM(z[0], z[o1 + 0], z[o2 + 0], z[o3 + 0], cos[0], wim[7]);
-- 
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".


Re: [FFmpeg-devel] [PATCH v4 0/4] swscale: rgbaf32 input/output support

2022-11-21 Thread StreamNG Harold Camargo
unsuscribe

Harold F. Camargo R.
Stream NG
Cel. 318 3227862
Bogotá Colombia
www.stream-ng.com


El lun, 21 nov 2022 a las 17:11,  escribió:

> From: Mark Reid 
>
> This patch series adds swscale input/output support for the packed rgb
> float formats.
> A few of the filters also needed support the larger 96/128 bit packed
> pixel sizes.
>
> I also plan to eventually add lossless unscaled conversions between the
> planer and packed formats.
>
> changes since v3
> * removed half uv path implementation
> changes since v2
> * add bias to rgbaf32 output to improve non overflowing range
> changes since v1
> * output correct alpha if src doesn't have alpha
>
> Mark Reid (4):
>   swscale/input: add rgbaf32 input support
>   avfilter/vf_hflip: add support for packed rgb float formats
>   avfilter/vf_transpose: add support for packed rgb float formats
>   swscale/output: add rgbaf32 output support
>
>  libavfilter/vf_hflip_init.h  |  25 +
>  libavfilter/vf_transpose.c   |  44 +
>  libswscale/input.c   | 120 +++
>  libswscale/output.c  |  92 +
>  libswscale/swscale_unscaled.c|   4 +-
>  libswscale/tests/floatimg_cmp.c  |   4 +-
>  libswscale/utils.c   |  14 ++-
>  libswscale/yuv2rgb.c |   2 +
>  tests/ref/fate/filter-pixdesc-rgbaf32be  |   1 +
>  tests/ref/fate/filter-pixdesc-rgbaf32le  |   1 +
>  tests/ref/fate/filter-pixdesc-rgbf32be   |   1 +
>  tests/ref/fate/filter-pixdesc-rgbf32le   |   1 +
>  tests/ref/fate/filter-pixfmts-copy   |   4 +
>  tests/ref/fate/filter-pixfmts-crop   |   4 +
>  tests/ref/fate/filter-pixfmts-field  |   4 +
>  tests/ref/fate/filter-pixfmts-fieldorder |   4 +
>  tests/ref/fate/filter-pixfmts-hflip  |   4 +
>  tests/ref/fate/filter-pixfmts-il |   4 +
>  tests/ref/fate/filter-pixfmts-null   |   4 +
>  tests/ref/fate/filter-pixfmts-scale  |   4 +
>  tests/ref/fate/filter-pixfmts-transpose  |   4 +
>  tests/ref/fate/filter-pixfmts-vflip  |   4 +
>  tests/ref/fate/sws-floatimg-cmp  |  16 +++
>  23 files changed, 361 insertions(+), 4 deletions(-)
>  create mode 100644 tests/ref/fate/filter-pixdesc-rgbaf32be
>  create mode 100644 tests/ref/fate/filter-pixdesc-rgbaf32le
>  create mode 100644 tests/ref/fate/filter-pixdesc-rgbf32be
>  create mode 100644 tests/ref/fate/filter-pixdesc-rgbf32le
>
> --
> 2.31.1.windows.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".


[FFmpeg-devel] [PATCH v4 4/4] swscale/output: add rgbaf32 output support

2022-11-21 Thread mindmark
From: Mark Reid 

---
 libswscale/output.c  | 92 
 libswscale/swscale_unscaled.c|  4 +-
 libswscale/tests/floatimg_cmp.c  |  4 +-
 libswscale/utils.c   | 16 +++--
 libswscale/yuv2rgb.c |  2 +
 tests/ref/fate/filter-pixdesc-rgbaf32be  |  1 +
 tests/ref/fate/filter-pixdesc-rgbaf32le  |  1 +
 tests/ref/fate/filter-pixdesc-rgbf32be   |  1 +
 tests/ref/fate/filter-pixdesc-rgbf32le   |  1 +
 tests/ref/fate/filter-pixfmts-copy   |  4 ++
 tests/ref/fate/filter-pixfmts-crop   |  4 ++
 tests/ref/fate/filter-pixfmts-field  |  4 ++
 tests/ref/fate/filter-pixfmts-fieldorder |  4 ++
 tests/ref/fate/filter-pixfmts-hflip  |  4 ++
 tests/ref/fate/filter-pixfmts-il |  4 ++
 tests/ref/fate/filter-pixfmts-null   |  4 ++
 tests/ref/fate/filter-pixfmts-scale  |  4 ++
 tests/ref/fate/filter-pixfmts-transpose  |  4 ++
 tests/ref/fate/filter-pixfmts-vflip  |  4 ++
 tests/ref/fate/sws-floatimg-cmp  | 16 +
 20 files changed, 170 insertions(+), 8 deletions(-)
 create mode 100644 tests/ref/fate/filter-pixdesc-rgbaf32be
 create mode 100644 tests/ref/fate/filter-pixdesc-rgbaf32le
 create mode 100644 tests/ref/fate/filter-pixdesc-rgbf32be
 create mode 100644 tests/ref/fate/filter-pixdesc-rgbf32le

diff --git a/libswscale/output.c b/libswscale/output.c
index 5c85bff971..1d86a244f9 100644
--- a/libswscale/output.c
+++ b/libswscale/output.c
@@ -2471,6 +2471,92 @@ yuv2gbrpf32_full_X_c(SwsContext *c, const int16_t 
*lumFilter,
 }
 }
 
+static void
+yuv2rgbaf32_full_X_c(SwsContext *c, const int16_t *lumFilter,
+const int16_t **lumSrcx, int lumFilterSize,
+const int16_t *chrFilter, const int16_t **chrUSrcx,
+const int16_t **chrVSrcx, int chrFilterSize,
+const int16_t **alpSrcx, uint8_t *dest,
+int dstW, int y)
+{
+const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->dstFormat);
+int i;
+int alpha = desc->flags & AV_PIX_FMT_FLAG_ALPHA;
+int hasAlpha = alpha && alpSrcx;
+int pixelStep = alpha ? 4 : 3;
+uint32_t *dest32 = (uint32_t*)dest;
+const int32_t **lumSrc  = (const int32_t**)lumSrcx;
+const int32_t **chrUSrc = (const int32_t**)chrUSrcx;
+const int32_t **chrVSrc = (const int32_t**)chrVSrcx;
+const int32_t **alpSrc  = (const int32_t**)alpSrcx;
+static const float float_mult = 1.0f / 65535.0f;
+uint32_t a = av_float2int(1.0f);
+
+for (i = 0; i < dstW; i++) {
+int j;
+int Y = -0x4000;
+int U = -(128 << 23);
+int V = -(128 << 23);
+int R, G, B, A;
+
+for (j = 0; j < lumFilterSize; j++)
+Y += lumSrc[j][i] * (unsigned)lumFilter[j];
+
+for (j = 0; j < chrFilterSize; j++) {
+U += chrUSrc[j][i] * (unsigned)chrFilter[j];
+V += chrVSrc[j][i] * (unsigned)chrFilter[j];
+}
+
+Y >>= 14;
+Y += 0x1;
+U >>= 14;
+V >>= 14;
+
+if (hasAlpha) {
+A = -0x4000;
+
+for (j = 0; j < lumFilterSize; j++)
+A += alpSrc[j][i] * (unsigned)lumFilter[j];
+
+A >>= 1;
+A += 0x20002000;
+a = av_float2int(float_mult * (float)(av_clip_uintp2(A, 30) >> 
14));
+}
+
+Y -= c->yuv2rgb_y_offset;
+Y *= c->yuv2rgb_y_coeff;
+Y += (1 << 13) - (1 << 29);
+R = V * c->yuv2rgb_v2r_coeff;
+G = V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff;
+B =U * c->yuv2rgb_u2b_coeff;
+
+R = av_clip_uintp2(((Y + R) >> 14) + (1<<15), 16);
+G = av_clip_uintp2(((Y + G) >> 14) + (1<<15), 16);
+B = av_clip_uintp2(((Y + B) >> 14) + (1<<15), 16);
+
+dest32[0] = av_float2int(float_mult * (float)R);
+dest32[1] = av_float2int(float_mult * (float)G);
+dest32[2] = av_float2int(float_mult * (float)B);
+if (alpha)
+dest32[3] = a;
+
+dest32 += pixelStep;
+}
+if ((!isBE(c->dstFormat)) != (!HAVE_BIGENDIAN)) {
+dest32 = (uint32_t*)dest;
+for (i = 0; i < dstW; i++) {
+dest32[0] = av_bswap32(dest32[0]);
+dest32[1] = av_bswap32(dest32[1]);
+dest32[2] = av_bswap32(dest32[2]);
+if (alpha)
+dest32[3] = av_bswap32(dest32[3]);
+
+dest32 += pixelStep;
+}
+}
+
+}
+
 static void
 yuv2ya8_1_c(SwsContext *c, const int16_t *buf0,
 const int16_t *ubuf[2], const int16_t *vbuf[2],
@@ -2983,6 +3069,12 @@ av_cold void ff_sws_init_output_funcs(SwsContext *c,
 }
 break;
 
+case AV_PIX_FMT_RGBF32LE:
+case AV_PIX_FMT_RGBF32BE:
+case AV_PIX_FMT_RGBAF32LE:
+case AV_PIX_FMT_RGBAF32BE:
+*yuv2packedX = yuv2rgbaf32_full_X_c;
+break;
 case AV_PIX_FMT_RGB24:
  

[FFmpeg-devel] [PATCH v4 3/4] avfilter/vf_transpose: add support for packed rgb float formats

2022-11-21 Thread mindmark
From: Mark Reid 

---
 libavfilter/vf_transpose.c | 44 ++
 1 file changed, 44 insertions(+)

diff --git a/libavfilter/vf_transpose.c b/libavfilter/vf_transpose.c
index 469e66729f..1023d6fe82 100644
--- a/libavfilter/vf_transpose.c
+++ b/libavfilter/vf_transpose.c
@@ -174,6 +174,46 @@ static void transpose_8x8_64_c(uint8_t *src, ptrdiff_t 
src_linesize,
 transpose_block_64_c(src, src_linesize, dst, dst_linesize, 8, 8);
 }
 
+static inline void transpose_block_96_c(uint8_t *src, ptrdiff_t src_linesize,
+uint8_t *dst, ptrdiff_t dst_linesize,
+int w, int h)
+{
+int x, y;
+for (y = 0; y < h; y++, dst += dst_linesize, src += 12) {
+for (x = 0; x < w; x++) {
+*((uint32_t *)(dst+0 + 12*x)) = *((uint32_t *)(src+0 + 
x*src_linesize));
+*((uint32_t *)(dst+4 + 12*x)) = *((uint32_t *)(src+4 + 
x*src_linesize));
+*((uint32_t *)(dst+8 + 12*x)) = *((uint32_t *)(src+8 + 
x*src_linesize));
+}
+}
+}
+
+static void transpose_8x8_96_c(uint8_t *src, ptrdiff_t src_linesize,
+   uint8_t *dst, ptrdiff_t dst_linesize)
+{
+transpose_block_96_c(src, src_linesize, dst, dst_linesize, 8, 8);
+}
+
+
+static inline void transpose_block_128_c(uint8_t *src, ptrdiff_t src_linesize,
+ uint8_t *dst, ptrdiff_t dst_linesize,
+ int w, int h)
+{
+int x, y;
+for (y = 0; y < h; y++, dst += dst_linesize, src += 16) {
+for (x = 0; x < w; x++) {
+*((uint64_t *)(dst+0 + 16*x)) = *((uint64_t *)(src+0 + 
x*src_linesize));
+*((uint64_t *)(dst+8 + 16*x)) = *((uint64_t *)(src+8 + 
x*src_linesize));
+}
+}
+}
+
+static void transpose_8x8_128_c(uint8_t *src, ptrdiff_t src_linesize,
+uint8_t *dst, ptrdiff_t dst_linesize)
+{
+transpose_block_128_c(src, src_linesize, dst, dst_linesize, 8, 8);
+}
+
 static int config_props_output(AVFilterLink *outlink)
 {
 AVFilterContext *ctx = outlink->src;
@@ -232,6 +272,10 @@ static int config_props_output(AVFilterLink *outlink)
 v->transpose_8x8   = transpose_8x8_48_c; break;
 case 8: v->transpose_block = transpose_block_64_c;
 v->transpose_8x8   = transpose_8x8_64_c; break;
+case 12: v->transpose_block = transpose_block_96_c;
+ v->transpose_8x8   = transpose_8x8_96_c; break;
+case 16: v->transpose_block = transpose_block_128_c;
+ v->transpose_8x8   = transpose_8x8_128_c; break;
 }
 }
 
-- 
2.31.1.windows.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 v4 2/4] avfilter/vf_hflip: add support for packed rgb float formats

2022-11-21 Thread mindmark
From: Mark Reid 

---
 libavfilter/vf_hflip_init.h | 25 +
 1 file changed, 25 insertions(+)

diff --git a/libavfilter/vf_hflip_init.h b/libavfilter/vf_hflip_init.h
index d0319f463d..31173f73fc 100644
--- a/libavfilter/vf_hflip_init.h
+++ b/libavfilter/vf_hflip_init.h
@@ -86,6 +86,29 @@ static void hflip_qword_c(const uint8_t *ssrc, uint8_t 
*ddst, int w)
 dst[j] = src[-j];
 }
 
+static void hflip_b96_c(const uint8_t *ssrc, uint8_t *ddst, int w)
+{
+const uint32_t *in = (const uint32_t *)ssrc;
+uint32_t *out = (uint32_t *)ddst;
+
+for (int j = 0; j < w; j++, out += 3, in -= 3) {
+out[0] = in[0];
+out[1] = in[1];
+out[2] = in[2];
+}
+}
+
+static void hflip_b128_c(const uint8_t *ssrc, uint8_t *ddst, int w)
+{
+const uint64_t *in = (const uint64_t *)ssrc;
+uint64_t *out = (uint64_t *)ddst;
+
+for (int j = 0; j < w; j++, out += 2, in -= 2) {
+out[0] = in[0];
+out[1] = in[1];
+}
+}
+
 static av_unused int ff_hflip_init(FlipContext *s, int step[4], int nb_planes)
 {
 for (int i = 0; i < nb_planes; i++) {
@@ -97,6 +120,8 @@ static av_unused int ff_hflip_init(FlipContext *s, int 
step[4], int nb_planes)
 case 4: s->flip_line[i] = hflip_dword_c; break;
 case 6: s->flip_line[i] = hflip_b48_c;   break;
 case 8: s->flip_line[i] = hflip_qword_c; break;
+case 12: s->flip_line[i] = hflip_b96_c; break;
+case 16: s->flip_line[i] = hflip_b128_c; break;
 default:
 return AVERROR_BUG;
 }
-- 
2.31.1.windows.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 v4 1/4] swscale/input: add rgbaf32 input support

2022-11-21 Thread mindmark
From: Mark Reid 

---
 libswscale/input.c | 120 +
 libswscale/utils.c |   6 +++
 2 files changed, 126 insertions(+)

diff --git a/libswscale/input.c b/libswscale/input.c
index d5676062a2..a305be5ac2 100644
--- a/libswscale/input.c
+++ b/libswscale/input.c
@@ -1284,6 +1284,96 @@ static void rgbaf16##endian_name##ToA_c(uint8_t *_dst, 
const uint8_t *_src, cons
 rgbaf16_funcs_endian(le, 0)
 rgbaf16_funcs_endian(be, 1)
 
+#define rdpx(src) (is_be ? av_int2float(AV_RB32(&src)): 
av_int2float(AV_RL32(&src)))
+
+static av_always_inline void rgbaf32ToUV_endian(uint16_t *dstU, uint16_t 
*dstV, int is_be,
+const float *src, int width,
+int32_t *rgb2yuv, int comp)
+{
+int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
+int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
+int i;
+for (i = 0; i < width; i++) {
+int r = lrintf(av_clipf(65535.0f * rdpx(src[i*comp+0]), 0.0f, 
65535.0f));
+int g = lrintf(av_clipf(65535.0f * rdpx(src[i*comp+1]), 0.0f, 
65535.0f));
+int b = lrintf(av_clipf(65535.0f * rdpx(src[i*comp+2]), 0.0f, 
65535.0f));
+
+dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> 
RGB2YUV_SHIFT;
+dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> 
RGB2YUV_SHIFT;
+}
+}
+
+static av_always_inline void rgbaf32ToY_endian(uint16_t *dst, const float 
*src, int is_be,
+   int width, int32_t *rgb2yuv, 
int comp)
+{
+int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
+int i;
+for (i = 0; i < width; i++) {
+int r = lrintf(av_clipf(65535.0f * rdpx(src[i*comp+0]), 0.0f, 
65535.0f));
+int g = lrintf(av_clipf(65535.0f * rdpx(src[i*comp+1]), 0.0f, 
65535.0f));
+int b = lrintf(av_clipf(65535.0f * rdpx(src[i*comp+2]), 0.0f, 
65535.0f));
+
+dst[i] = (ry*r + gy*g + by*b + (0x2001<<(RGB2YUV_SHIFT-1))) >> 
RGB2YUV_SHIFT;
+}
+}
+
+static av_always_inline void rgbaf32ToA_endian(uint16_t *dst, const float 
*src, int is_be,
+   int width, void *opq)
+{
+int i;
+for (i=0; isrcFormat;
@@ -1663,6 +1753,18 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
 case AV_PIX_FMT_RGBAF16LE:
 c->chrToYV12 = rgbaf16leToUV_c;
 break;
+case AV_PIX_FMT_RGBF32BE:
+c->chrToYV12 = rgbf32beToUV_c;
+break;
+case AV_PIX_FMT_RGBAF32BE:
+c->chrToYV12 = rgbaf32beToUV_c;
+break;
+case AV_PIX_FMT_RGBF32LE:
+c->chrToYV12 = rgbf32leToUV_c;
+break;
+case AV_PIX_FMT_RGBAF32LE:
+c->chrToYV12 = rgbaf32leToUV_c;
+break;
 }
 }
 
@@ -1973,6 +2075,18 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
 case AV_PIX_FMT_RGBAF16LE:
 c->lumToYV12 = rgbaf16leToY_c;
 break;
+case AV_PIX_FMT_RGBF32BE:
+c->lumToYV12 = rgbf32beToY_c;
+break;
+case AV_PIX_FMT_RGBAF32BE:
+c->lumToYV12 = rgbaf32beToY_c;
+break;
+case AV_PIX_FMT_RGBF32LE:
+c->lumToYV12 = rgbf32leToY_c;
+break;
+case AV_PIX_FMT_RGBAF32LE:
+c->lumToYV12 = rgbaf32leToY_c;
+break;
 }
 if (c->needAlpha) {
 if (is16BPS(srcFormat) || isNBPS(srcFormat)) {
@@ -1998,6 +2112,12 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
 case AV_PIX_FMT_RGBAF16LE:
 c->alpToYV12 = rgbaf16leToA_c;
 break;
+case AV_PIX_FMT_RGBAF32BE:
+c->alpToYV12 = rgbaf32beToA_c;
+break;
+case AV_PIX_FMT_RGBAF32LE:
+c->alpToYV12 = rgbaf32leToA_c;
+break;
 case AV_PIX_FMT_YA8:
 c->alpToYV12 = uyvyToY_c;
 break;
diff --git a/libswscale/utils.c b/libswscale/utils.c
index 85640a143f..2c520f68d1 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -266,6 +266,10 @@ static const FormatEntry format_entries[] = {
 [AV_PIX_FMT_VUYX]= { 1, 1 },
 [AV_PIX_FMT_RGBAF16BE]   = { 1, 0 },
 [AV_PIX_FMT_RGBAF16LE]   = { 1, 0 },
+[AV_PIX_FMT_RGBF32BE]= { 1, 0 },
+[AV_PIX_FMT_RGBF32LE]= { 1, 0 },
+[AV_PIX_FMT_RGBAF32BE]   = { 1, 0 },
+[AV_PIX_FMT_RGBAF32LE]   = { 1, 0 },
 [AV_PIX_FMT_XV30LE]  = { 1, 1 },
 [AV_PIX_FMT_XV36LE]  = { 1, 1 },
 };
@@ -1572,6 +1576,8 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter 
*srcFilter,
 srcFormat != AV_PIX_FMT_GBRAP16BE  && srcFormat != 
AV_PIX_FMT_GBRAP16LE &&
 srcFormat != AV_PIX_FMT_GBRPF32BE  && srcFormat != 
AV_PIX_FMT_GBRPF32LE &&
 srcFormat != AV_PIX_FMT_GBRAPF32BE && srcFormat != 
AV_PIX_FMT_GBRAPF32LE &&
+srcFormat != AV_PIX_FMT_RGBF32BE   && srcFormat != AV_PIX_FMT_RGBF32LE 
 

[FFmpeg-devel] [PATCH v4 0/4] swscale: rgbaf32 input/output support

2022-11-21 Thread mindmark
From: Mark Reid 

This patch series adds swscale input/output support for the packed rgb float 
formats.
A few of the filters also needed support the larger 96/128 bit packed pixel 
sizes.

I also plan to eventually add lossless unscaled conversions between the planer 
and packed formats.

changes since v3
* removed half uv path implementation
changes since v2
* add bias to rgbaf32 output to improve non overflowing range
changes since v1
* output correct alpha if src doesn't have alpha

Mark Reid (4):
  swscale/input: add rgbaf32 input support
  avfilter/vf_hflip: add support for packed rgb float formats
  avfilter/vf_transpose: add support for packed rgb float formats
  swscale/output: add rgbaf32 output support

 libavfilter/vf_hflip_init.h  |  25 +
 libavfilter/vf_transpose.c   |  44 +
 libswscale/input.c   | 120 +++
 libswscale/output.c  |  92 +
 libswscale/swscale_unscaled.c|   4 +-
 libswscale/tests/floatimg_cmp.c  |   4 +-
 libswscale/utils.c   |  14 ++-
 libswscale/yuv2rgb.c |   2 +
 tests/ref/fate/filter-pixdesc-rgbaf32be  |   1 +
 tests/ref/fate/filter-pixdesc-rgbaf32le  |   1 +
 tests/ref/fate/filter-pixdesc-rgbf32be   |   1 +
 tests/ref/fate/filter-pixdesc-rgbf32le   |   1 +
 tests/ref/fate/filter-pixfmts-copy   |   4 +
 tests/ref/fate/filter-pixfmts-crop   |   4 +
 tests/ref/fate/filter-pixfmts-field  |   4 +
 tests/ref/fate/filter-pixfmts-fieldorder |   4 +
 tests/ref/fate/filter-pixfmts-hflip  |   4 +
 tests/ref/fate/filter-pixfmts-il |   4 +
 tests/ref/fate/filter-pixfmts-null   |   4 +
 tests/ref/fate/filter-pixfmts-scale  |   4 +
 tests/ref/fate/filter-pixfmts-transpose  |   4 +
 tests/ref/fate/filter-pixfmts-vflip  |   4 +
 tests/ref/fate/sws-floatimg-cmp  |  16 +++
 23 files changed, 361 insertions(+), 4 deletions(-)
 create mode 100644 tests/ref/fate/filter-pixdesc-rgbaf32be
 create mode 100644 tests/ref/fate/filter-pixdesc-rgbaf32le
 create mode 100644 tests/ref/fate/filter-pixdesc-rgbf32be
 create mode 100644 tests/ref/fate/filter-pixdesc-rgbf32le

--
2.31.1.windows.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 v3] avcodec/av1_vaapi: add direct film grain mode

2022-11-21 Thread Lynne
Nov 21, 2022, 20:50 by ruijing.d...@amd.com:

> Add flag AV_VAAPI_DRIVER_QUIRK_DIRCT_FILM_GRAIN_ATTRIBUTES to
> specify a direct film grain mode for AMD av1 decoder.
>
> issue:
> By using AMD av1 decoder via VAAPI, when used with film
> grain content, the output displays black screen with
> incorrect frame order.
>
> The issue being discussed in here:
> https://gitlab.freedesktop.org/mesa/mesa/-/issues/6903#note_1613807
>
> Signed-off-by: Ruijing Dong 
> Signed-off-by: nyanmisaka 
> ---
>
> update: using driver_quirks to identify AMD driver instead of
>  extra AV_HWACCEL_FLAG.
>
>  libavcodec/avcodec.h| 1 -
>  libavcodec/vaapi_av1.c  | 6 --
>  libavutil/hwcontext_vaapi.c | 5 +
>  libavutil/hwcontext_vaapi.h | 6 ++
>  4 files changed, 15 insertions(+), 3 deletions(-)
>

I think this looks fine. Just needs a micro bump and APIchanges,
but whoever commits it can apply that.
jkqxz should take a look at it 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] [PATCH v3] avcodec/av1_vaapi: add direct film grain mode

2022-11-21 Thread Ruijing Dong
Add flag AV_VAAPI_DRIVER_QUIRK_DIRCT_FILM_GRAIN_ATTRIBUTES to
specify a direct film grain mode for AMD av1 decoder.

issue:
By using AMD av1 decoder via VAAPI, when used with film
grain content, the output displays black screen with
incorrect frame order.

The issue being discussed in here:
https://gitlab.freedesktop.org/mesa/mesa/-/issues/6903#note_1613807

Signed-off-by: Ruijing Dong 
Signed-off-by: nyanmisaka 
---

update: using driver_quirks to identify AMD driver instead of
extra AV_HWACCEL_FLAG.

 libavcodec/avcodec.h| 1 -
 libavcodec/vaapi_av1.c  | 6 --
 libavutil/hwcontext_vaapi.c | 5 +
 libavutil/hwcontext_vaapi.h | 6 ++
 4 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 3edd8e2636..51adb8a1dc 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -2252,7 +2252,6 @@ typedef struct AVHWAccel {
  *  while indicating success.
  */
 #define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2)
-
 /**
  * @}
  */
diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c
index d0339b2705..1eb6b87264 100644
--- a/libavcodec/vaapi_av1.c
+++ b/libavcodec/vaapi_av1.c
@@ -127,6 +127,7 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx,
 int8_t bit_depth_idx;
 int err = 0;
 int apply_grain = !(avctx->export_side_data & 
AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain;
+int direct_film_grain = ctx->base.hwctx->driver_quirks & 
AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES;
 uint8_t remap_lr_type[4] = {AV1_RESTORE_NONE, AV1_RESTORE_SWITCHABLE, 
AV1_RESTORE_WIENER, AV1_RESTORE_SGRPROJ};
 uint8_t segmentation_feature_signed[AV1_SEG_LVL_MAX] = {1, 1, 1, 1, 1, 0, 
0, 0};
 uint8_t segmentation_feature_max[AV1_SEG_LVL_MAX] = {255, 
AV1_MAX_LOOP_FILTER,
@@ -136,7 +137,7 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx,
 if (bit_depth_idx < 0)
 goto fail;

-if (apply_grain) {
+if (apply_grain && !direct_film_grain) {
 if (ctx->tmp_frame->buf[0])
 ff_thread_release_buffer(avctx, ctx->tmp_frame);
 err = ff_thread_get_buffer(avctx, ctx->tmp_frame, 
AV_GET_BUFFER_FLAG_REF);
@@ -375,6 +376,7 @@ static int vaapi_av1_end_frame(AVCodecContext *avctx)
 VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data;

 int apply_grain = !(avctx->export_side_data & 
AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain;
+int direct_film_grain = ctx->base.hwctx->driver_quirks & 
AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES;
 int ret;
 ret = ff_vaapi_decode_issue(avctx, pic);
 if (ret < 0)
@@ -385,7 +387,7 @@ static int vaapi_av1_end_frame(AVCodecContext *avctx)
 if (ctx->ref_tab[i].frame->buf[0])
 ff_thread_release_buffer(avctx, ctx->ref_tab[i].frame);

-if (apply_grain) {
+if (apply_grain && !direct_film_grain) {
 ret = av_frame_ref(ctx->ref_tab[i].frame, ctx->tmp_frame);
 if (ret < 0)
 return ret;
diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c
index 4bcde74f62..dced6e9401 100644
--- a/libavutil/hwcontext_vaapi.c
+++ b/libavutil/hwcontext_vaapi.c
@@ -371,6 +371,11 @@ static const struct {
 "Splitted-Desktop Systems VDPAU backend for VA-API",
 AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES,
 },
+{
+"AMD Radeon",
+"AMD Radeon",
+AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES,
+}
 };

 static int vaapi_device_init(AVHWDeviceContext *hwdev)
diff --git a/libavutil/hwcontext_vaapi.h b/libavutil/hwcontext_vaapi.h
index 0b2e071cb3..b93d676423 100644
--- a/libavutil/hwcontext_vaapi.h
+++ b/libavutil/hwcontext_vaapi.h
@@ -58,6 +58,12 @@ enum {
  * and the results of the vaQuerySurfaceAttributes() call will be faked.
  */
 AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3),
+
+/**
+ * The identified driver which suppports film grain direct output mode.
+ * and this is to avoid av1 decoding film grain corruption.
+ */
+AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES = (1 << 4),
 };

 /**
--
2.25.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 2/2] avcodec/h263dec: Avoid parsing extradata repeatedly

2022-11-21 Thread Michael Niedermayer
On Mon, Nov 21, 2022 at 12:53:26PM +0100, Anton Khirnov wrote:
> Quoting Michael Niedermayer (2022-11-18 00:14:18)
> > Fixes: Timeout
> > Fixes: 
> > 52329/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_MPEG4_fuzzer-4716563886637056
> > 
> > Found-by: continuous fuzzing process 
> > https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> > Signed-off-by: Michael Niedermayer 
> > ---
> >  libavcodec/h263dec.c   | 3 ++-
> >  libavcodec/mpegvideo.h | 1 +
> >  2 files changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
> > index 71b846ba74..4eab43d939 100644
> > --- a/libavcodec/h263dec.c
> > +++ b/libavcodec/h263dec.c
> > @@ -492,11 +492,12 @@ retry:
> >  } else if (CONFIG_MSMPEG4DEC && s->msmpeg4_version) {
> >  ret = ff_msmpeg4_decode_picture_header(s);
> >  } else if (CONFIG_MPEG4_DECODER && avctx->codec_id == 
> > AV_CODEC_ID_MPEG4) {
> > -if (s->avctx->extradata_size && s->picture_number == 0) {
> > +if (s->avctx->extradata_size && s->picture_number == 0 && 
> > !s->extradata_parsed) {
> 
> Wouldn't it make sense to get rid of the picture_number condition now?

I was thinking about droping it too. I dont know why i didnt, you are correct

thx

[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The real ebay dictionary, page 2
"100% positive feedback" - "All either got their money back or didnt complain"
"Best seller ever, very honest" - "Seller refunded buyer after failed scam"


signature.asc
Description: PGP signature
___
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 V2] lavc/libvpx: increase thread limit to 64

2022-11-21 Thread James Zern
On Tue, Oct 25, 2022 at 8:56 AM Dmitrii Ovchinnikov
 wrote:
>
> >> Why do you still impose an upper limit unconditionally even if the
> >>user has set his preferred number of threads?
> Libvpx-vp9 does not support number of threads greater than 64, so we impose
> an upper limit of 64.
> E.g. if we set it any higher we get the following execution error:
> [libvpx-vp9 @ 0x2f631c0] Failed to initialize encoder: Invalid parameter
> [libvpx-vp9 @ 0x2f631c0]   Additional information: g_threads out of range
> [..64]
> Error initializing output stream 0:0 -- Error while opening encoder for
> output stream #0:0 - maybe incorrect parameters such as bit_rate, rate,
> width or height
>

Deferring the check to libvpx should be fine and would mean less
maintenance of this wrapper if there are any changes made there.

> >>According to
> https://ffmpeg.org/pipermail/ffmpeg-devel/2018-November/236406.html the
> >>maximum of 16 has not been chosen because of H.264, but because there
> >>was some form of restriction in libvpx. Or at least there was belief in
> >>the existence of such a restriction.
> There is a restriction of maximum 64 threads, not 16.
>
> >>This code potentially calls av_cpu_count() twice.
> Can you please clarify how it calls it twice? 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 3/3] avcodec/v210enc: add new 10-bit function for avx512 avx512icl

2022-11-21 Thread James Darnley

ARCH_X86_64 is always defined. So checks of this type need to check with #if.


Thanks.  I forgot the ffmpeg convention there.
___
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] [Internet][PATCH v2 00/12] Add MediaCodec encoder and NDK MediaCodec support

2022-11-21 Thread StreamNG Harold Camargo
please. unsuscribe.


Harold F. Camargo R.
Stream NG
Cel. 318 3227862
Bogotá Colombia
www.stream-ng.com


El lun, 21 nov 2022 a las 11:23, Zhao Zhili ()
escribió:

> On Sun, 2022-11-20 at 14:49 +0800, Zhao Zhili wrote:
> > From: Zhao Zhili 
> >
> >
> > v2:
> >
> > Rebased on master.
> >
> > 01/12: Use crop-width/crop-height as fallback and add TODO. Co-
> > authored-by: Aman Karmani
> > 07/12: Fix libavcodec/version.h conflict
> > 10/12: Change default i-frame-interval to 1 and add log message; bump
> > minor version
> > 12/12: Fix rebase conflict
> >
> >
> > v1:
> > Firstly, some bugs were fixed (patch 1-4).
> >
> > Patch 5 and 6 make mediacodec_wrapper support Java MediaCodec and NDK
> > MediaCodec. The use case I'm considering is run FFmpeg on cmdline
> > without JVM,
> > for example, run FFmpeg inside of termux (an Android terminal
> > emulator). It's
> > well known that NDK MediaCodec missing some important functions, like
> > get the
> > list of codecs, but still useable.
> >
> > Patch 7 add NDK MediaCodec decoder support. It can be enabled via
> > options,
> > and enabled automatically if no JVM is available.
> >
> > Patch 8 add ANativeWindow support to hwcontext_mediacodec. It can be
> > set by
> > user, and can be created via AMediaCodec_createPersistentInputSurface
> > automatically. This is a preparation for encoder.
> >
> > Patch 9 makes MediaCodec decoder to support ANativeWindow directly.
> > It worth
> > to note that AVMediaCodecContext has only surface. Although we
> > provided
> > av_mediacodec_alloc_context(), we didn't strictly prevent users to
> > allocate
> > AVMediaCodecContext on stack. I'm not sure if it's OK to add new
> > field to
> > AVMediaCodecContext.
> >
> > Patch 10 add MediaCodec encoder support. Frame can be feed to encoder
> > via
> > buffer, or via Surface/ANativeWindow. If Surface/ANativeWindow is
> > used, and
> > the frames come from our MediaCodec decoder wrapper, we can control
> > it's
> > 'render' (send to encoder's surface) via
> > av_mediacodec_release_buffer(). A DTS
> > generation strategy works in this case. However, if frames comes from
> > other
> > sources, like a camera, there is no way to control the 'render' yet,
> > so DTS is
> > missing in this case.
> >
> > Finally, we can do mediacodec transcoding with FFmpeg cmdline on
> > Android.
> > More importantly, we can do MediaCodec decoder to encoder without
> > copy frames,
> > although it's very limited since most of avfilters doesn't work. For
> > example:
> >
> > ./ffmpeg -hwaccel mediacodec -hwaccel_output_format mediacodec -i
> > /sdcard/test.mp4 -an -c:v h264_mediacodec -y /sdcard/out.mp4
> >
> > Since there is no real AVHWFrameContext implementation in
> > hwcontext_mediacodec.
> > there is no hwframe_ctx for mediacodec and av_hwframe_transfer_data()
> > doesn't
> > work. So if -hwaccel_output_format isn't being specified like:
> >
> > ./ffmpeg -hwaccel mediacodec -i /sdcard/test.mp4 -an -c:v
> > h264_mediacodec -y /sdcard/out.mp4
> >
> > It will trigger a crash in av_hwframe_transfer_data. Patch 11 add a
> > check on
> > hwframe_ctx. Patch 12 set hwaccel_output_format automatically to
> > avoid such
> > case.
> >
>
> Applied.
>
> ___
> 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] [Internet][PATCH v2 00/12] Add MediaCodec encoder and NDK MediaCodec support

2022-11-21 Thread Zhao Zhili
On Sun, 2022-11-20 at 14:49 +0800, Zhao Zhili wrote:
> From: Zhao Zhili 
> 
> 
> v2:
> 
> Rebased on master.
> 
> 01/12: Use crop-width/crop-height as fallback and add TODO. Co-
> authored-by: Aman Karmani 
> 07/12: Fix libavcodec/version.h conflict
> 10/12: Change default i-frame-interval to 1 and add log message; bump
> minor version
> 12/12: Fix rebase conflict
> 
> 
> v1:
> Firstly, some bugs were fixed (patch 1-4).
> 
> Patch 5 and 6 make mediacodec_wrapper support Java MediaCodec and NDK
> MediaCodec. The use case I'm considering is run FFmpeg on cmdline
> without JVM,
> for example, run FFmpeg inside of termux (an Android terminal
> emulator). It's
> well known that NDK MediaCodec missing some important functions, like
> get the
> list of codecs, but still useable.
> 
> Patch 7 add NDK MediaCodec decoder support. It can be enabled via
> options,
> and enabled automatically if no JVM is available.
> 
> Patch 8 add ANativeWindow support to hwcontext_mediacodec. It can be
> set by
> user, and can be created via AMediaCodec_createPersistentInputSurface
> automatically. This is a preparation for encoder.
> 
> Patch 9 makes MediaCodec decoder to support ANativeWindow directly.
> It worth
> to note that AVMediaCodecContext has only surface. Although we
> provided
> av_mediacodec_alloc_context(), we didn't strictly prevent users to
> allocate
> AVMediaCodecContext on stack. I'm not sure if it's OK to add new
> field to
> AVMediaCodecContext.
> 
> Patch 10 add MediaCodec encoder support. Frame can be feed to encoder
> via
> buffer, or via Surface/ANativeWindow. If Surface/ANativeWindow is
> used, and
> the frames come from our MediaCodec decoder wrapper, we can control
> it's
> 'render' (send to encoder's surface) via
> av_mediacodec_release_buffer(). A DTS
> generation strategy works in this case. However, if frames comes from
> other
> sources, like a camera, there is no way to control the 'render' yet,
> so DTS is
> missing in this case.
> 
> Finally, we can do mediacodec transcoding with FFmpeg cmdline on
> Android.
> More importantly, we can do MediaCodec decoder to encoder without
> copy frames,
> although it's very limited since most of avfilters doesn't work. For
> example:
> 
> ./ffmpeg -hwaccel mediacodec -hwaccel_output_format mediacodec -i
> /sdcard/test.mp4 -an -c:v h264_mediacodec -y /sdcard/out.mp4
> 
> Since there is no real AVHWFrameContext implementation in
> hwcontext_mediacodec.
> there is no hwframe_ctx for mediacodec and av_hwframe_transfer_data()
> doesn't
> work. So if -hwaccel_output_format isn't being specified like:
> 
> ./ffmpeg -hwaccel mediacodec -i /sdcard/test.mp4 -an -c:v
> h264_mediacodec -y /sdcard/out.mp4
> 
> It will trigger a crash in av_hwframe_transfer_data. Patch 11 add a
> check on
> hwframe_ctx. Patch 12 set hwaccel_output_format automatically to
> avoid such
> case.
> 

Applied.

___
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 v6 3/3] avcodec/qsvdec: Implement SEI parsing for QSV decoders

2022-11-21 Thread Soft Works



> -Original Message-
> From: Xiang, Haihao 
> Sent: Monday, November 21, 2022 3:45 AM
> To: ffmpeg-devel@ffmpeg.org
> Cc: softwo...@hotmail.com; kier...@obe.tv; haihao.xiang-at-
> intel@ffmpeg.org; andreas.rheinha...@outlook.com
> Subject: Re: [FFmpeg-devel] [PATCH v6 3/3] avcodec/qsvdec: Implement
> SEI parsing for QSV decoders
> 
> On Tue, 2022-10-25 at 04:03 +, softworkz wrote:
> > From: softworkz 
> >
> > Signed-off-by: softworkz 
> > ---
> >  libavcodec/Makefile |   2 +-
> >  libavcodec/qsvdec.c | 321
> 
> >  2 files changed, 322 insertions(+), 1 deletion(-)
> >
> > diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> > index 90c7f113a3..cbddbb0ace 100644
> > --- a/libavcodec/Makefile
> > +++ b/libavcodec/Makefile
> > @@ -146,7 +146,7 @@ OBJS-$(CONFIG_MSS34DSP)+=
> mss34dsp.o
> >  OBJS-$(CONFIG_PIXBLOCKDSP) += pixblockdsp.o
> >  OBJS-$(CONFIG_QPELDSP) += qpeldsp.o
> >  OBJS-$(CONFIG_QSV) += qsv.o
> > -OBJS-$(CONFIG_QSVDEC)  += qsvdec.o
> > +OBJS-$(CONFIG_QSVDEC)  += qsvdec.o h264_sei.o
> hevc_sei.o
> >  OBJS-$(CONFIG_QSVENC)  += qsvenc.o
> >  OBJS-$(CONFIG_RANGECODER)  += rangecoder.o
> >  OBJS-$(CONFIG_RDFT)+= rdft.o
> > diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
> > index 73405b5747..467a248224 100644
> > --- a/libavcodec/qsvdec.c
> > +++ b/libavcodec/qsvdec.c
> > @@ -41,6 +41,7 @@
> >  #include "libavutil/time.h"
> >  #include "libavutil/imgutils.h"
> >  #include "libavutil/film_grain_params.h"
> > +#include 
> >
> >  #include "avcodec.h"
> >  #include "codec_internal.h"
> > @@ -49,6 +50,9 @@
> >  #include "hwconfig.h"
> >  #include "qsv.h"
> >  #include "qsv_internal.h"
> > +#include "h264_sei.h"
> > +#include "hevc_ps.h"
> > +#include "hevc_sei.h"
> >
> >  #if QSV_ONEVPL
> >  #include 
> > @@ -66,6 +70,8 @@ static const AVRational mfx_tb = { 1, 9 };
> >  AV_NOPTS_VALUE : pts_tb.num ? \
> >  av_rescale_q(mfx_pts, mfx_tb, pts_tb) : mfx_pts)
> >
> > +#define PAYLOAD_BUFFER_SIZE 65535
> > +
> >  typedef struct QSVAsyncFrame {
> >  mfxSyncPoint *sync;
> >  QSVFrame *frame;
> > @@ -107,6 +113,9 @@ typedef struct QSVContext {
> >
> >  mfxExtBuffer **ext_buffers;
> >  int nb_ext_buffers;
> > +
> > +mfxU8 payload_buffer[PAYLOAD_BUFFER_SIZE];
> > +AVBufferRef *a53_buf_ref;
> >  } QSVContext;
> >
> >  static const AVCodecHWConfigInternal *const qsv_hw_configs[] = {
> > @@ -628,6 +637,299 @@ static int
> qsv_export_film_grain(AVCodecContext *avctx,
> > mfxExtAV1FilmGrainParam
> >  }
> >  #endif
> >
> > +static int find_start_offset(mfxU8 data[4])
> > +{
> > +if (data[0] == 0 && data[1] == 0 && data[2] == 1)
> > +return 3;
> > +
> > +if (data[0] == 0 && data[1] == 0 && data[2] == 0 && data[3] ==
> 1)
> > +return 4;
> > +
> > +return 0;
> > +}
> > +
> > +static int parse_sei_h264(AVCodecContext* avctx, QSVContext* q,
> AVFrame* out)
> > +{
> > +H264SEIContext sei = { 0 };
> > +GetBitContext gb = { 0 };
> > +mfxPayload payload = { 0, .Data = &q->payload_buffer[0],
> .BufSize =
> > sizeof(q->payload_buffer) - AV_INPUT_BUFFER_PADDING_SIZE };
> > +mfxU64 ts;
> > +int ret;
> > +
> > +while (1) {
> > +int start;
> > +memset(payload.Data, 0, payload.BufSize);
> > +
> > +ret = MFXVideoDECODE_GetPayload(q->session, &ts,
> &payload);
> > +if (ret == MFX_ERR_NOT_ENOUGH_BUFFER) {
> > +av_log(avctx, AV_LOG_WARNING, "Warning: Insufficient
> buffer on
> > GetPayload(). Size: %"PRIu64" Needed: %d\n", sizeof(q-
> >payload_buffer),
> > payload.BufSize);
> > +return 0;
> > +}
> > +if (ret != MFX_ERR_NONE)
> > +return ret;
> > +
> > +if (payload.NumBit == 0 || payload.NumBit >=
> payload.BufSize * 8)
> > +break;
> > +
> > +start = find_start_offset(payload.Data);
> > +
> > +switch (payload.Type) {
> > +case SEI_TYPE_BUFFERING_PERIOD:
> > +case SEI_TYPE_PIC_TIMING:
> > +continue;
> > +}
> > +
> > +if (init_get_bits(&gb, &payload.Data[start],
> payload.NumBit - start *
> > 8) < 0)
> > +av_log(avctx, AV_LOG_ERROR, "Error initializing
> bitstream reader
> > SEI type: %d  Numbits %d error: %d\n", payload.Type,
> payload.NumBit, ret);
> > +else {
> > +ret = ff_h264_sei_decode(&sei, &gb, NULL, avctx);
> > +
> > +if (ret < 0)
> > +av_log(avctx, AV_LOG_WARNING, "Failed to parse SEI
> type:
> > %d  Numbits %d error: %d\n", payload.Type, payload.NumBit, ret);
> > +else
> > +av_log(avctx, AV_LOG_DEBUG, "mfxPayload Type: %d
> Numbits
> > %d\n", payload.Type, payload.NumBit);
> > +}
> > +}
> > +
> > +if (out)
> > +return ff_h264_set_sei_to_fram

Re: [FFmpeg-devel] [PATCH 3/3] avcodec/v210enc: add new 10-bit function for avx512 avx512icl

2022-11-21 Thread Andreas Rheinhardt
James Darnley:
> avx512 on Skylake-X (Xeon D-2123IT):
> 1.19x faster (970±91.2 vs. 817±104.4 decicycles) compared with avx2
> 
> avx512icl on Ice Lake (Xeon Silver 4316):
> 2.52x faster (1350±5.3 vs. 535±9.5 decicycles) compared with avx2
> ---
>  libavcodec/x86/v210enc.asm| 99 +++
>  libavcodec/x86/v210enc_init.c | 12 +
>  2 files changed, 111 insertions(+)
> 
> diff --git a/libavcodec/x86/v210enc.asm b/libavcodec/x86/v210enc.asm
> index c2ad3d72c0..9cee954619 100644
> --- a/libavcodec/x86/v210enc.asm
> +++ b/libavcodec/x86/v210enc.asm
> @@ -56,6 +56,36 @@ v210enc_8_permd: dd 0,1,4,5, 1,2,5,6
>  v210enc_8_mult: db 4, 0, 64, 0
>  v210enc_8_mask: dd 255<<12
>  
> +icl_perm_y: ; vpermb does not set bytes to zero when the high bit is set 
> unlike pshufb
> +%assign i 0
> +%rep 8
> +db -1,i+0,i+1,-1 , i+2,i+3,i+4,i+5
> +%assign i i+6
> +%endrep
> +
> +icl_perm_uv: ; vpermb does not set bytes to zero when the high bit is set 
> unlike pshufb
> +%assign i 0
> +%rep 4
> +db i+0,i+1,i+32,i+33 , -1,i+2,i+3,-1 , i+34,i+35,i+4,i+5 , 
> -1,i+36,i+37,-1
> +%assign i i+6
> +%endrep
> +
> +icl_perm_y_kmask:  times 8 db 0b_0110
> +icl_perm_uv_kmask: times 8 db 0b0110_
> +
> +icl_shift_y:  times 10 dw 2,0,4
> +  times 4 db 0 ; padding to 64 bytes
> +icl_shift_uv: times 5 dw 0,2,4
> +  times 2 db 0 ; padding to 32 bytes
> +  times 5 dw 4,0,2
> +  times 2 db 0 ; padding to 32 bytes
> +
> +v210enc_10_permd_y:  dd 0,1,2,-1 , 3,4,5,-1
> +v210enc_10_shufb_y:  db -1,0,1,-1 , 2,3,4,5 , -1,6,7,-1 , 8,9,10,11
> +v210enc_10_permd_uv: dd 0,1,4,5 , 1,2,5,6
> +v210enc_10_shufb_uv: db 0,1, 8, 9 , -1,2,3,-1 , 10,11,4,5 , -1,12,13,-1
> + db 2,3,10,11 , -1,4,5,-1 , 12,13,6,7 , -1,14,15,-1
> +
>  SECTION .text
>  
>  %macro v210_planar_pack_10 0
> @@ -113,6 +143,75 @@ INIT_YMM avx2
>  v210_planar_pack_10
>  %endif
>  
> +%macro v210_planar_pack_10_new 0
> +
> +cglobal v210_planar_pack_10, 5, 5, 8+2*notcpuflag(avx512icl), y, u, v, dst, 
> width
> +lea yq, [yq+2*widthq]
> +add uq, widthq
> +add vq, widthq
> +neg widthq
> +
> +%if cpuflag(avx512icl)
> +movu  m6, [icl_perm_y]
> +movu  m7, [icl_perm_uv]
> +kmovq k1, [icl_perm_y_kmask]
> +kmovq k2, [icl_perm_uv_kmask]
> +%else
> +movu   m6, [v210enc_10_permd_y]
> +VBROADCASTI128 m7, [v210enc_10_shufb_y]
> +movu   m8, [v210enc_10_permd_uv]
> +movu   m9, [v210enc_10_shufb_uv]
> +%endif
> +movu  m2, [icl_shift_y]
> +movu  m3, [icl_shift_uv]
> +VBROADCASTI128 m4, [v210_enc_min_10] ; only ymm sized
> +VBROADCASTI128 m5, [v210_enc_max_10] ; only ymm sized
> +
> +.loop:
> +movu m0, [yq + widthq*2]
> +%if cpuflag(avx512icl)
> +movu ym1, [uq + widthq*1]
> +vinserti32x8 zm1, [vq + widthq*1], 1
> +%else
> +movu xm1, [uq + widthq*1]
> +vinserti128  ym1, [vq + widthq*1], 1
> +%endif
> +CLIPW m0, m4, m5
> +CLIPW m1, m4, m5
> +
> +vpsllvw m0, m2
> +vpsllvw m1, m3
> +%if cpuflag(avx512icl)
> +vpermb  m0{k1}{z}, m6, m0
> +vpermb  m1{k2}{z}, m7, m1
> +%else
> +vpermd m0, m6, m0
> +pshufb m0, m7
> +vpermd m1, m8, m1
> +pshufb m1, m9
> +%endif
> +por m0, m1
> +
> +movu  [dstq], m0
> +add dstq, mmsize
> +add   widthq, (mmsize*3)/8
> +jl .loop
> +RET
> +
> +%endmacro
> +
> +%if ARCH_X86_64
> +%if HAVE_AVX512_EXTERNAL
> +INIT_YMM avx512
> +v210_planar_pack_10_new
> +%endif
> +%endif
> +
> +%if HAVE_AVX512ICL_EXTERNAL
> +INIT_ZMM avx512icl
> +v210_planar_pack_10_new
> +%endif
> +
>  %macro v210_planar_pack_8 0
>  
>  ; v210_planar_pack_8(const uint8_t *y, const uint8_t *u, const uint8_t *v, 
> uint8_t *dst, ptrdiff_t width)
> diff --git a/libavcodec/x86/v210enc_init.c b/libavcodec/x86/v210enc_init.c
> index 6e9f8c6e61..5d1ebcb893 100644
> --- a/libavcodec/x86/v210enc_init.c
> +++ b/libavcodec/x86/v210enc_init.c
> @@ -37,6 +37,12 @@ void ff_v210_planar_pack_10_ssse3(const uint16_t *y, const 
> uint16_t *u,
>  void ff_v210_planar_pack_10_avx2(const uint16_t *y, const uint16_t *u,
>   const uint16_t *v, uint8_t *dst,
>   ptrdiff_t width);
> +void ff_v210_planar_pack_10_avx512(const uint16_t *y, const uint16_t *u,
> +   const uint16_t *v, uint8_t *dst,
> +   ptrdiff_t width);
> +void ff_v210_planar_pack_10_avx512icl(const uint16_t *y, const uint16_t *u,
> +  const uint16_t *v, uint8_t *dst,
> +  ptrdiff_t width);
>  
>  av_cold void ff_v210enc_init_x86(V210EncContext *s)
>  {
> @@ -60,10

[FFmpeg-devel] [PATCH 3/3] avcodec/v210enc: add new 10-bit function for avx512 avx512icl

2022-11-21 Thread James Darnley
avx512 on Skylake-X (Xeon D-2123IT):
1.19x faster (970±91.2 vs. 817±104.4 decicycles) compared with avx2

avx512icl on Ice Lake (Xeon Silver 4316):
2.52x faster (1350±5.3 vs. 535±9.5 decicycles) compared with avx2
---
 libavcodec/x86/v210enc.asm| 99 +++
 libavcodec/x86/v210enc_init.c | 12 +
 2 files changed, 111 insertions(+)

diff --git a/libavcodec/x86/v210enc.asm b/libavcodec/x86/v210enc.asm
index c2ad3d72c0..9cee954619 100644
--- a/libavcodec/x86/v210enc.asm
+++ b/libavcodec/x86/v210enc.asm
@@ -56,6 +56,36 @@ v210enc_8_permd: dd 0,1,4,5, 1,2,5,6
 v210enc_8_mult: db 4, 0, 64, 0
 v210enc_8_mask: dd 255<<12
 
+icl_perm_y: ; vpermb does not set bytes to zero when the high bit is set 
unlike pshufb
+%assign i 0
+%rep 8
+db -1,i+0,i+1,-1 , i+2,i+3,i+4,i+5
+%assign i i+6
+%endrep
+
+icl_perm_uv: ; vpermb does not set bytes to zero when the high bit is set 
unlike pshufb
+%assign i 0
+%rep 4
+db i+0,i+1,i+32,i+33 , -1,i+2,i+3,-1 , i+34,i+35,i+4,i+5 , -1,i+36,i+37,-1
+%assign i i+6
+%endrep
+
+icl_perm_y_kmask:  times 8 db 0b_0110
+icl_perm_uv_kmask: times 8 db 0b0110_
+
+icl_shift_y:  times 10 dw 2,0,4
+  times 4 db 0 ; padding to 64 bytes
+icl_shift_uv: times 5 dw 0,2,4
+  times 2 db 0 ; padding to 32 bytes
+  times 5 dw 4,0,2
+  times 2 db 0 ; padding to 32 bytes
+
+v210enc_10_permd_y:  dd 0,1,2,-1 , 3,4,5,-1
+v210enc_10_shufb_y:  db -1,0,1,-1 , 2,3,4,5 , -1,6,7,-1 , 8,9,10,11
+v210enc_10_permd_uv: dd 0,1,4,5 , 1,2,5,6
+v210enc_10_shufb_uv: db 0,1, 8, 9 , -1,2,3,-1 , 10,11,4,5 , -1,12,13,-1
+ db 2,3,10,11 , -1,4,5,-1 , 12,13,6,7 , -1,14,15,-1
+
 SECTION .text
 
 %macro v210_planar_pack_10 0
@@ -113,6 +143,75 @@ INIT_YMM avx2
 v210_planar_pack_10
 %endif
 
+%macro v210_planar_pack_10_new 0
+
+cglobal v210_planar_pack_10, 5, 5, 8+2*notcpuflag(avx512icl), y, u, v, dst, 
width
+lea yq, [yq+2*widthq]
+add uq, widthq
+add vq, widthq
+neg widthq
+
+%if cpuflag(avx512icl)
+movu  m6, [icl_perm_y]
+movu  m7, [icl_perm_uv]
+kmovq k1, [icl_perm_y_kmask]
+kmovq k2, [icl_perm_uv_kmask]
+%else
+movu   m6, [v210enc_10_permd_y]
+VBROADCASTI128 m7, [v210enc_10_shufb_y]
+movu   m8, [v210enc_10_permd_uv]
+movu   m9, [v210enc_10_shufb_uv]
+%endif
+movu  m2, [icl_shift_y]
+movu  m3, [icl_shift_uv]
+VBROADCASTI128 m4, [v210_enc_min_10] ; only ymm sized
+VBROADCASTI128 m5, [v210_enc_max_10] ; only ymm sized
+
+.loop:
+movu m0, [yq + widthq*2]
+%if cpuflag(avx512icl)
+movu ym1, [uq + widthq*1]
+vinserti32x8 zm1, [vq + widthq*1], 1
+%else
+movu xm1, [uq + widthq*1]
+vinserti128  ym1, [vq + widthq*1], 1
+%endif
+CLIPW m0, m4, m5
+CLIPW m1, m4, m5
+
+vpsllvw m0, m2
+vpsllvw m1, m3
+%if cpuflag(avx512icl)
+vpermb  m0{k1}{z}, m6, m0
+vpermb  m1{k2}{z}, m7, m1
+%else
+vpermd m0, m6, m0
+pshufb m0, m7
+vpermd m1, m8, m1
+pshufb m1, m9
+%endif
+por m0, m1
+
+movu  [dstq], m0
+add dstq, mmsize
+add   widthq, (mmsize*3)/8
+jl .loop
+RET
+
+%endmacro
+
+%if ARCH_X86_64
+%if HAVE_AVX512_EXTERNAL
+INIT_YMM avx512
+v210_planar_pack_10_new
+%endif
+%endif
+
+%if HAVE_AVX512ICL_EXTERNAL
+INIT_ZMM avx512icl
+v210_planar_pack_10_new
+%endif
+
 %macro v210_planar_pack_8 0
 
 ; v210_planar_pack_8(const uint8_t *y, const uint8_t *u, const uint8_t *v, 
uint8_t *dst, ptrdiff_t width)
diff --git a/libavcodec/x86/v210enc_init.c b/libavcodec/x86/v210enc_init.c
index 6e9f8c6e61..5d1ebcb893 100644
--- a/libavcodec/x86/v210enc_init.c
+++ b/libavcodec/x86/v210enc_init.c
@@ -37,6 +37,12 @@ void ff_v210_planar_pack_10_ssse3(const uint16_t *y, const 
uint16_t *u,
 void ff_v210_planar_pack_10_avx2(const uint16_t *y, const uint16_t *u,
  const uint16_t *v, uint8_t *dst,
  ptrdiff_t width);
+void ff_v210_planar_pack_10_avx512(const uint16_t *y, const uint16_t *u,
+   const uint16_t *v, uint8_t *dst,
+   ptrdiff_t width);
+void ff_v210_planar_pack_10_avx512icl(const uint16_t *y, const uint16_t *u,
+  const uint16_t *v, uint8_t *dst,
+  ptrdiff_t width);
 
 av_cold void ff_v210enc_init_x86(V210EncContext *s)
 {
@@ -60,10 +66,16 @@ av_cold void ff_v210enc_init_x86(V210EncContext *s)
 if (EXTERNAL_AVX512(cpu_flags)) {
 s->sample_factor_8  = 2;
 s->pack_line_8  = ff_v210_planar_pack_8_avx512;
+#ifdef ARCH_X86_64
+s->sample_factor_10  = 2;
+s->pack_line_10  = ff_v210_planar_pack_10_avx512;
+#e

[FFmpeg-devel] [PATCH 2/3] avcodec/x86/v210: replace register use with named register

2022-11-21 Thread James Darnley
---
 libavcodec/x86/v210enc.asm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavcodec/x86/v210enc.asm b/libavcodec/x86/v210enc.asm
index afac238ede..c2ad3d72c0 100644
--- a/libavcodec/x86/v210enc.asm
+++ b/libavcodec/x86/v210enc.asm
@@ -62,7 +62,7 @@ SECTION .text
 
 ; v210_planar_pack_10(const uint16_t *y, const uint16_t *u, const uint16_t *v, 
uint8_t *dst, ptrdiff_t width)
 cglobal v210_planar_pack_10, 5, 5, 4+cpuflag(avx2), y, u, v, dst, width
-lea r0, [yq+2*widthq]
+lea yq, [yq+2*widthq]
 add uq, widthq
 add vq, widthq
 neg widthq
-- 
2.38.0

___
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/3] checkasm/v210enc: test the entire width of 10-bit planar input arrays

2022-11-21 Thread James Darnley
---
 tests/checkasm/v210enc.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/tests/checkasm/v210enc.c b/tests/checkasm/v210enc.c
index 9942e08137..9fb8321c25 100644
--- a/tests/checkasm/v210enc.c
+++ b/tests/checkasm/v210enc.c
@@ -72,8 +72,10 @@
 randomize_buffers(mask);   
\
 call_ref(y0 + y_offset, u0 + uv_offset, v0 + uv_offset, dst0, 
width);  \
 call_new(y1 + y_offset, u1 + uv_offset, v1 + uv_offset, dst1, 
width);  \
-if (memcmp(y0, y1, BUF_SIZE) || memcmp(u0, u1, BUF_SIZE / 2) ||
\
-memcmp(v0, v1, BUF_SIZE / 2) || memcmp(dst0, dst1, width * 8 / 
3)) \
+if (memcmp(y0, y1, BUF_SIZE * sizeof(type))
\
+|| memcmp(u0, u1, BUF_SIZE * sizeof(type) / 2) 
\
+|| memcmp(v0, v1, BUF_SIZE * sizeof(type) / 2) 
\
+|| memcmp(dst0, dst1, width * 8 / 3))  
\
 fail();
\
 bench_new(y1 + y_offset, u1 + uv_offset, v1 + uv_offset, dst1, 
width); \
 }  
\
-- 
2.38.0

___
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/2] avcodec/h263dec: Avoid parsing extradata repeatedly

2022-11-21 Thread Anton Khirnov
Quoting Michael Niedermayer (2022-11-18 00:14:18)
> Fixes: Timeout
> Fixes: 
> 52329/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_MPEG4_fuzzer-4716563886637056
> 
> Found-by: continuous fuzzing process 
> https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> Signed-off-by: Michael Niedermayer 
> ---
>  libavcodec/h263dec.c   | 3 ++-
>  libavcodec/mpegvideo.h | 1 +
>  2 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
> index 71b846ba74..4eab43d939 100644
> --- a/libavcodec/h263dec.c
> +++ b/libavcodec/h263dec.c
> @@ -492,11 +492,12 @@ retry:
>  } else if (CONFIG_MSMPEG4DEC && s->msmpeg4_version) {
>  ret = ff_msmpeg4_decode_picture_header(s);
>  } else if (CONFIG_MPEG4_DECODER && avctx->codec_id == AV_CODEC_ID_MPEG4) 
> {
> -if (s->avctx->extradata_size && s->picture_number == 0) {
> +if (s->avctx->extradata_size && s->picture_number == 0 && 
> !s->extradata_parsed) {

Wouldn't it make sense to get rid of the picture_number condition now?

-- 
Anton Khirnov
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH] avcodec/vp8: Fix wrong vpx_rac_is_end() check

2022-11-21 Thread Hirokazu Honda
Hi Ronald,

I am sorry for the late reply.
The bool decoder for the vp8 headr context can have already reached
the end of buffer when it is no longer used.
We should not check it here.
Adding the check for coeff_c there sounds good to me because coeff_c
must not have reached the end of the buffer in calling
decode_mb_coeffs().
And thanks for merging!

Thanks,
-Hiro
On Sun, Nov 20, 2022 at 12:55 AM Ronald S. Bultje  wrote:
>
> Hi,
>
> On Fri, Nov 18, 2022 at 8:37 AM Ronald S. Bultje  wrote:
>>
>> From: Hirokazu Honda 
>>
>> The check of vpx_rac_is_end check(s) are added originally from
>> 1afd246960202917e244c844c534e9c1e3c323f5. It causes a regression
>> of some vp8 stream. b6b9ac5698c8f911841b469af77199153278c55c fixes
>> the regression by a sort of band-aid way. This fixes the wrongness
>> of the original commit. vpx_rac_is_end() should be called against
>> the bool decoder for the vp8 headr context, not one for each
>> coefficient. Reference is vp8_dixie_tokens_process_row() in token.c
>> in spec 20.16.
>>
>> Fixes: Ticket 8069
>> Fixes: regression of 1afd246960202917e244c844c534e9c1e3c323f5.
>> Fixes: b6b9ac5698c8f911841b469af77199153278c55c
>>
>> Co-authored-by: Ronald S. Bultje 
>> Signed-off-by: Hirokazu Honda 
>> Signed-off-by: Ronald S. Bultje 
>> ---
>>  libavcodec/vp8.c | 14 +-
>>  1 file changed, 9 insertions(+), 5 deletions(-)
>>
>> diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c
>> index 67f36d8933..db2419deaf 100644
>> --- a/libavcodec/vp8.c
>> +++ b/libavcodec/vp8.c
>> @@ -2404,7 +2404,8 @@ static av_always_inline int 
>> decode_mb_row_no_filter(AVCodecContext *avctx, void
>>  int num_jobs = s->num_jobs;
>>  const VP8Frame *prev_frame = s->prev_frame;
>>  VP8Frame *curframe = s->curframe;
>> -VPXRangeCoder *c  = &s->coeff_partition[mb_y & (s->num_coeff_partitions 
>> - 1)];
>> +VPXRangeCoder *coeff_c  = &s->coeff_partition[mb_y & 
>> (s->num_coeff_partitions - 1)];
>> +
>>  VP8Macroblock *mb;
>>  uint8_t *dst[3] = {
>>  curframe->tf.f->data[0] + 16 * mb_y * s->linesize,
>> @@ -2412,7 +2413,7 @@ static av_always_inline int 
>> decode_mb_row_no_filter(AVCodecContext *avctx, void
>>  curframe->tf.f->data[2] +  8 * mb_y * s->uvlinesize
>>  };
>>
>> -if (vpx_rac_is_end(c))
>> +if (vpx_rac_is_end(&s->c))
>>   return AVERROR_INVALIDDATA;
>>
>>  if (mb_y == 0)
>> @@ -2443,7 +2444,7 @@ static av_always_inline int 
>> decode_mb_row_no_filter(AVCodecContext *avctx, void
>>  td->mv_bounds.mv_max.x = ((s->mb_width - 1) << 6) + MARGIN;
>>
>>  for (mb_x = 0; mb_x < s->mb_width; mb_x++, mb_xy++, mb++) {
>> -if (vpx_rac_is_end(c))
>> +if (vpx_rac_is_end(&s->c))
>>  return AVERROR_INVALIDDATA;
>>  // Wait for previous thread to read mb_x+2, and reach mb_y-1.
>>  if (prev_td != td) {
>> @@ -2470,8 +2471,11 @@ static av_always_inline int 
>> decode_mb_row_no_filter(AVCodecContext *avctx, void
>>
>>  prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP8_FRAME_PREVIOUS);
>>
>> -if (!mb->skip)
>> -decode_mb_coeffs(s, td, c, mb, s->top_nnz[mb_x], td->left_nnz, 
>> is_vp7);
>> +if (!mb->skip) {
>> +if (vpx_rac_is_end(coeff_c))
>> +return AVERROR_INVALIDDATA;
>> +decode_mb_coeffs(s, td, coeff_c, mb, s->top_nnz[mb_x], 
>> td->left_nnz, is_vp7);
>> +}
>>
>>  if (mb->mode <= MODE_I4x4)
>>  intra_predict(s, td, dst, mb, mb_x, mb_y, is_vp7);
>> --
>> 2.38.1
>
>
> Pushed.
>
> 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".