diff mbox

[FFmpeg-devel,1/3] avcodec/proresenc: switch default prores encoder to prores_ks

Message ID 20170626215535.24530-1-onemda@gmail.com
State New
Headers show

Commit Message

Paul B Mahol June 26, 2017, 9:55 p.m. UTC
Rationale:
prores_ks have more features and is faster for qscale > 0
and gives better quality output.

Signed-off-by: Paul B Mahol <onemda@gmail.com>
---
 libavcodec/Makefile             |  2 +-
 libavcodec/proresenc_anatoliy.c | 14 --------------
 libavcodec/proresenc_kostya.c   | 24 ++++++++++++++++++++++++
 tests/fate/vcodec.mak           |  1 +
 tests/ref/vsynth/vsynth1-prores |  8 ++++----
 tests/ref/vsynth/vsynth2-prores |  8 ++++----
 tests/ref/vsynth/vsynth3-prores |  8 ++++----
 7 files changed, 38 insertions(+), 27 deletions(-)

Comments

Michael Niedermayer June 26, 2017, 10:14 p.m. UTC | #1
On Mon, Jun 26, 2017 at 11:55:35PM +0200, Paul B Mahol wrote:
> Rationale:
> prores_ks have more features and is faster for qscale > 0
> and gives better quality output.
> 
> Signed-off-by: Paul B Mahol <onemda@gmail.com>
> ---
>  libavcodec/Makefile             |  2 +-
>  libavcodec/proresenc_anatoliy.c | 14 --------------
>  libavcodec/proresenc_kostya.c   | 24 ++++++++++++++++++++++++
>  tests/fate/vcodec.mak           |  1 +
>  tests/ref/vsynth/vsynth1-prores |  8 ++++----
>  tests/ref/vsynth/vsynth2-prores |  8 ++++----
>  tests/ref/vsynth/vsynth3-prores |  8 ++++----
>  7 files changed, 38 insertions(+), 27 deletions(-)
> 
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index f0cba88..16dce40 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -477,7 +477,7 @@ OBJS-$(CONFIG_PPM_DECODER)             += pnmdec.o pnm.o
>  OBJS-$(CONFIG_PPM_ENCODER)             += pnmenc.o
>  OBJS-$(CONFIG_PRORES_DECODER)          += proresdec2.o proresdsp.o proresdata.o
>  OBJS-$(CONFIG_PRORES_LGPL_DECODER)     += proresdec_lgpl.o proresdsp.o proresdata.o
> -OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_anatoliy.o
> +OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_kostya.o proresdata.o
>  OBJS-$(CONFIG_PRORES_AW_ENCODER)       += proresenc_anatoliy.o
>  OBJS-$(CONFIG_PRORES_KS_ENCODER)       += proresenc_kostya.o proresdata.o
>  OBJS-$(CONFIG_PSD_DECODER)             += psd.o
> diff --git a/libavcodec/proresenc_anatoliy.c b/libavcodec/proresenc_anatoliy.c
> index 0516066..7ff6ff7 100644
> --- a/libavcodec/proresenc_anatoliy.c
> +++ b/libavcodec/proresenc_anatoliy.c
> @@ -614,17 +614,3 @@ AVCodec ff_prores_aw_encoder = {
>      .capabilities   = AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
>      .profiles       = profiles
>  };
> -
> -AVCodec ff_prores_encoder = {
> -    .name           = "prores",
> -    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes"),
> -    .type           = AVMEDIA_TYPE_VIDEO,
> -    .id             = AV_CODEC_ID_PRORES,
> -    .priv_data_size = sizeof(ProresContext),
> -    .init           = prores_encode_init,
> -    .close          = prores_encode_close,
> -    .encode2        = prores_encode_frame,
> -    .pix_fmts       = (const enum AVPixelFormat[]){AV_PIX_FMT_YUV422P10, AV_PIX_FMT_NONE},
> -    .capabilities   = AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
> -    .profiles       = profiles
> -};
> diff --git a/libavcodec/proresenc_kostya.c b/libavcodec/proresenc_kostya.c
> index 09bb611..ad979c2 100644
> --- a/libavcodec/proresenc_kostya.c
> +++ b/libavcodec/proresenc_kostya.c
> @@ -1341,6 +1341,13 @@ static const AVClass proresenc_class = {
>      .version    = LIBAVUTIL_VERSION_INT,
>  };
>  
> +static const AVClass prores_class = {
> +    .class_name = "ProRes",
> +    .item_name  = av_default_item_name,
> +    .option     = options,
> +    .version    = LIBAVUTIL_VERSION_INT,
> +};
> +
>  AVCodec ff_prores_ks_encoder = {
>      .name           = "prores_ks",
>      .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec Pro)"),
> @@ -1357,3 +1364,20 @@ AVCodec ff_prores_ks_encoder = {
>                        },
>      .priv_class     = &proresenc_class,
>  };
> +
> +AVCodec ff_prores_encoder = {
> +    .name           = "prores",
> +    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec Pro)"),
> +    .type           = AVMEDIA_TYPE_VIDEO,
> +    .id             = AV_CODEC_ID_PRORES,
> +    .priv_data_size = sizeof(ProresContext),
> +    .init           = encode_init,
> +    .close          = encode_close,
> +    .encode2        = encode_frame,
> +    .capabilities   = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
> +    .pix_fmts       = (const enum AVPixelFormat[]) {
> +                          AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
> +                          AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_NONE
> +                      },
> +    .priv_class     = &prores_class,
> +};
> diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak
> index 8c24510..3e92f3c 100644
> --- a/tests/fate/vcodec.mak
> +++ b/tests/fate/vcodec.mak
> @@ -329,6 +329,7 @@ fate-vsynth%-mpng:               CODEC   = png
>  FATE_VCODEC-$(call ENCDEC, MSVIDEO1, AVI) += msvideo1
>  
>  FATE_VCODEC-$(call ENCDEC, PRORES, MOV) += prores prores_ks
> +fate-vsynth%-prores:             ENCOPTS = -qscale:v 1
>  fate-vsynth%-prores:             FMT     = mov
>  
>  fate-vsynth%-prores_ks:          ENCOPTS = -profile hq

> diff --git a/tests/ref/vsynth/vsynth1-prores b/tests/ref/vsynth/vsynth1-prores
> index 14de8b9..bf7adaa 100644
> --- a/tests/ref/vsynth/vsynth1-prores
> +++ b/tests/ref/vsynth/vsynth1-prores
> @@ -1,4 +1,4 @@
> -7ca7d2f9f5d8ac2ead691b1b6a70d409 *tests/data/fate/vsynth1-prores.mov
> -5022821 tests/data/fate/vsynth1-prores.mov
> -fb4a9e025d12afc0dbbca8d82831858f *tests/data/fate/vsynth1-prores.out.rawvideo
> -stddev:    2.47 PSNR: 40.27 MAXDIFF:   31 bytes:  7603200/  7603200
> +58d0065f5a67a7fa70e7443ac82c336d *tests/data/fate/vsynth1-prores.mov
> +10690091 tests/data/fate/vsynth1-prores.mov
> +b059fbb85caccfb6e5ad7fe402e2539b *tests/data/fate/vsynth1-prores.out.rawvideo
> +stddev:    1.88 PSNR: 42.64 MAXDIFF:   29 bytes:  7603200/  7603200
> diff --git a/tests/ref/vsynth/vsynth2-prores b/tests/ref/vsynth/vsynth2-prores
> index a1b4bb7..6e9a397 100644
> --- a/tests/ref/vsynth/vsynth2-prores
> +++ b/tests/ref/vsynth/vsynth2-prores
> @@ -1,4 +1,4 @@
> -aa57fd1221b7eefaf1f34f9d57d6a7cb *tests/data/fate/vsynth2-prores.mov
> -3265056 tests/data/fate/vsynth2-prores.mov
> -537b0ff66d7c8c3c12faa89d042e6a49 *tests/data/fate/vsynth2-prores.out.rawvideo
> -stddev:    1.38 PSNR: 45.29 MAXDIFF:   12 bytes:  7603200/  7603200
> +4240da05dc68221a36071cbe3a846877 *tests/data/fate/vsynth2-prores.mov
> +8463884 tests/data/fate/vsynth2-prores.mov
> +0ed1c1b659beb23928388a34a988786b *tests/data/fate/vsynth2-prores.out.rawvideo
> +stddev:    0.47 PSNR: 54.57 MAXDIFF:    9 bytes:  7603200/  7603200
> diff --git a/tests/ref/vsynth/vsynth3-prores b/tests/ref/vsynth/vsynth3-prores
> index f63a7a7..f772805 100644
> --- a/tests/ref/vsynth/vsynth3-prores
> +++ b/tests/ref/vsynth/vsynth3-prores
> @@ -1,4 +1,4 @@
> -b060c59be88b4b089ece5ee8dc4f1c58 *tests/data/fate/vsynth3-prores.mov
> -105367 tests/data/fate/vsynth3-prores.mov
> -fff5e7ad21d78501c8fa4749bf4bf289 *tests/data/fate/vsynth3-prores.out.rawvideo
> -stddev:    2.80 PSNR: 39.17 MAXDIFF:   27 bytes:    86700/    86700
> +5919b3ca66dd7b5f37fd30e82e033fad *tests/data/fate/vsynth3-prores.mov
> +196893 tests/data/fate/vsynth3-prores.mov
> +81df91f1f0fd6693ff89c7743df631ea *tests/data/fate/vsynth3-prores.out.rawvideo
> +stddev:    2.15 PSNR: 41.46 MAXDIFF:   26 bytes:    86700/    86700

The new files from these tests are higher quality but they are also
much higher bitrate and larger

does prores_ks produce higher quality at the same bitrate ?

[...]
Paul B Mahol June 26, 2017, 10:20 p.m. UTC | #2
On 6/27/17, Michael Niedermayer <michael@niedermayer.cc> wrote:
> On Mon, Jun 26, 2017 at 11:55:35PM +0200, Paul B Mahol wrote:
>> Rationale:
>> prores_ks have more features and is faster for qscale > 0
>> and gives better quality output.
>>
>> Signed-off-by: Paul B Mahol <onemda@gmail.com>
>> ---
>>  libavcodec/Makefile             |  2 +-
>>  libavcodec/proresenc_anatoliy.c | 14 --------------
>>  libavcodec/proresenc_kostya.c   | 24 ++++++++++++++++++++++++
>>  tests/fate/vcodec.mak           |  1 +
>>  tests/ref/vsynth/vsynth1-prores |  8 ++++----
>>  tests/ref/vsynth/vsynth2-prores |  8 ++++----
>>  tests/ref/vsynth/vsynth3-prores |  8 ++++----
>>  7 files changed, 38 insertions(+), 27 deletions(-)
>>
>> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>> index f0cba88..16dce40 100644
>> --- a/libavcodec/Makefile
>> +++ b/libavcodec/Makefile
>> @@ -477,7 +477,7 @@ OBJS-$(CONFIG_PPM_DECODER)             += pnmdec.o
>> pnm.o
>>  OBJS-$(CONFIG_PPM_ENCODER)             += pnmenc.o
>>  OBJS-$(CONFIG_PRORES_DECODER)          += proresdec2.o proresdsp.o
>> proresdata.o
>>  OBJS-$(CONFIG_PRORES_LGPL_DECODER)     += proresdec_lgpl.o proresdsp.o
>> proresdata.o
>> -OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_anatoliy.o
>> +OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_kostya.o
>> proresdata.o
>>  OBJS-$(CONFIG_PRORES_AW_ENCODER)       += proresenc_anatoliy.o
>>  OBJS-$(CONFIG_PRORES_KS_ENCODER)       += proresenc_kostya.o
>> proresdata.o
>>  OBJS-$(CONFIG_PSD_DECODER)             += psd.o
>> diff --git a/libavcodec/proresenc_anatoliy.c
>> b/libavcodec/proresenc_anatoliy.c
>> index 0516066..7ff6ff7 100644
>> --- a/libavcodec/proresenc_anatoliy.c
>> +++ b/libavcodec/proresenc_anatoliy.c
>> @@ -614,17 +614,3 @@ AVCodec ff_prores_aw_encoder = {
>>      .capabilities   = AV_CODEC_CAP_FRAME_THREADS |
>> AV_CODEC_CAP_INTRA_ONLY,
>>      .profiles       = profiles
>>  };
>> -
>> -AVCodec ff_prores_encoder = {
>> -    .name           = "prores",
>> -    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes"),
>> -    .type           = AVMEDIA_TYPE_VIDEO,
>> -    .id             = AV_CODEC_ID_PRORES,
>> -    .priv_data_size = sizeof(ProresContext),
>> -    .init           = prores_encode_init,
>> -    .close          = prores_encode_close,
>> -    .encode2        = prores_encode_frame,
>> -    .pix_fmts       = (const enum AVPixelFormat[]){AV_PIX_FMT_YUV422P10,
>> AV_PIX_FMT_NONE},
>> -    .capabilities   = AV_CODEC_CAP_FRAME_THREADS |
>> AV_CODEC_CAP_INTRA_ONLY,
>> -    .profiles       = profiles
>> -};
>> diff --git a/libavcodec/proresenc_kostya.c
>> b/libavcodec/proresenc_kostya.c
>> index 09bb611..ad979c2 100644
>> --- a/libavcodec/proresenc_kostya.c
>> +++ b/libavcodec/proresenc_kostya.c
>> @@ -1341,6 +1341,13 @@ static const AVClass proresenc_class = {
>>      .version    = LIBAVUTIL_VERSION_INT,
>>  };
>>
>> +static const AVClass prores_class = {
>> +    .class_name = "ProRes",
>> +    .item_name  = av_default_item_name,
>> +    .option     = options,
>> +    .version    = LIBAVUTIL_VERSION_INT,
>> +};
>> +
>>  AVCodec ff_prores_ks_encoder = {
>>      .name           = "prores_ks",
>>      .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec Pro)"),
>> @@ -1357,3 +1364,20 @@ AVCodec ff_prores_ks_encoder = {
>>                        },
>>      .priv_class     = &proresenc_class,
>>  };
>> +
>> +AVCodec ff_prores_encoder = {
>> +    .name           = "prores",
>> +    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec Pro)"),
>> +    .type           = AVMEDIA_TYPE_VIDEO,
>> +    .id             = AV_CODEC_ID_PRORES,
>> +    .priv_data_size = sizeof(ProresContext),
>> +    .init           = encode_init,
>> +    .close          = encode_close,
>> +    .encode2        = encode_frame,
>> +    .capabilities   = AV_CODEC_CAP_SLICE_THREADS |
>> AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
>> +    .pix_fmts       = (const enum AVPixelFormat[]) {
>> +                          AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
>> +                          AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_NONE
>> +                      },
>> +    .priv_class     = &prores_class,
>> +};
>> diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak
>> index 8c24510..3e92f3c 100644
>> --- a/tests/fate/vcodec.mak
>> +++ b/tests/fate/vcodec.mak
>> @@ -329,6 +329,7 @@ fate-vsynth%-mpng:               CODEC   = png
>>  FATE_VCODEC-$(call ENCDEC, MSVIDEO1, AVI) += msvideo1
>>
>>  FATE_VCODEC-$(call ENCDEC, PRORES, MOV) += prores prores_ks
>> +fate-vsynth%-prores:             ENCOPTS = -qscale:v 1
>>  fate-vsynth%-prores:             FMT     = mov
>>
>>  fate-vsynth%-prores_ks:          ENCOPTS = -profile hq
>
>> diff --git a/tests/ref/vsynth/vsynth1-prores
>> b/tests/ref/vsynth/vsynth1-prores
>> index 14de8b9..bf7adaa 100644
>> --- a/tests/ref/vsynth/vsynth1-prores
>> +++ b/tests/ref/vsynth/vsynth1-prores
>> @@ -1,4 +1,4 @@
>> -7ca7d2f9f5d8ac2ead691b1b6a70d409 *tests/data/fate/vsynth1-prores.mov
>> -5022821 tests/data/fate/vsynth1-prores.mov
>> -fb4a9e025d12afc0dbbca8d82831858f
>> *tests/data/fate/vsynth1-prores.out.rawvideo
>> -stddev:    2.47 PSNR: 40.27 MAXDIFF:   31 bytes:  7603200/  7603200
>> +58d0065f5a67a7fa70e7443ac82c336d *tests/data/fate/vsynth1-prores.mov
>> +10690091 tests/data/fate/vsynth1-prores.mov
>> +b059fbb85caccfb6e5ad7fe402e2539b
>> *tests/data/fate/vsynth1-prores.out.rawvideo
>> +stddev:    1.88 PSNR: 42.64 MAXDIFF:   29 bytes:  7603200/  7603200
>> diff --git a/tests/ref/vsynth/vsynth2-prores
>> b/tests/ref/vsynth/vsynth2-prores
>> index a1b4bb7..6e9a397 100644
>> --- a/tests/ref/vsynth/vsynth2-prores
>> +++ b/tests/ref/vsynth/vsynth2-prores
>> @@ -1,4 +1,4 @@
>> -aa57fd1221b7eefaf1f34f9d57d6a7cb *tests/data/fate/vsynth2-prores.mov
>> -3265056 tests/data/fate/vsynth2-prores.mov
>> -537b0ff66d7c8c3c12faa89d042e6a49
>> *tests/data/fate/vsynth2-prores.out.rawvideo
>> -stddev:    1.38 PSNR: 45.29 MAXDIFF:   12 bytes:  7603200/  7603200
>> +4240da05dc68221a36071cbe3a846877 *tests/data/fate/vsynth2-prores.mov
>> +8463884 tests/data/fate/vsynth2-prores.mov
>> +0ed1c1b659beb23928388a34a988786b
>> *tests/data/fate/vsynth2-prores.out.rawvideo
>> +stddev:    0.47 PSNR: 54.57 MAXDIFF:    9 bytes:  7603200/  7603200
>> diff --git a/tests/ref/vsynth/vsynth3-prores
>> b/tests/ref/vsynth/vsynth3-prores
>> index f63a7a7..f772805 100644
>> --- a/tests/ref/vsynth/vsynth3-prores
>> +++ b/tests/ref/vsynth/vsynth3-prores
>> @@ -1,4 +1,4 @@
>> -b060c59be88b4b089ece5ee8dc4f1c58 *tests/data/fate/vsynth3-prores.mov
>> -105367 tests/data/fate/vsynth3-prores.mov
>> -fff5e7ad21d78501c8fa4749bf4bf289
>> *tests/data/fate/vsynth3-prores.out.rawvideo
>> -stddev:    2.80 PSNR: 39.17 MAXDIFF:   27 bytes:    86700/    86700
>> +5919b3ca66dd7b5f37fd30e82e033fad *tests/data/fate/vsynth3-prores.mov
>> +196893 tests/data/fate/vsynth3-prores.mov
>> +81df91f1f0fd6693ff89c7743df631ea
>> *tests/data/fate/vsynth3-prores.out.rawvideo
>> +stddev:    2.15 PSNR: 41.46 MAXDIFF:   26 bytes:    86700/    86700
>
> The new files from these tests are higher quality but they are also
> much higher bitrate and larger
>
> does prores_ks produce higher quality at the same bitrate ?

How you can claim anything with those synthetic videos?

The size and bitrates of QT ones are even higher.
Michael Niedermayer June 26, 2017, 10:45 p.m. UTC | #3
On Tue, Jun 27, 2017 at 12:20:05AM +0200, Paul B Mahol wrote:
> On 6/27/17, Michael Niedermayer <michael@niedermayer.cc> wrote:
> > On Mon, Jun 26, 2017 at 11:55:35PM +0200, Paul B Mahol wrote:
> >> Rationale:
> >> prores_ks have more features and is faster for qscale > 0
> >> and gives better quality output.
> >>
> >> Signed-off-by: Paul B Mahol <onemda@gmail.com>
> >> ---
> >>  libavcodec/Makefile             |  2 +-
> >>  libavcodec/proresenc_anatoliy.c | 14 --------------
> >>  libavcodec/proresenc_kostya.c   | 24 ++++++++++++++++++++++++
> >>  tests/fate/vcodec.mak           |  1 +
> >>  tests/ref/vsynth/vsynth1-prores |  8 ++++----
> >>  tests/ref/vsynth/vsynth2-prores |  8 ++++----
> >>  tests/ref/vsynth/vsynth3-prores |  8 ++++----
> >>  7 files changed, 38 insertions(+), 27 deletions(-)
> >>
> >> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> >> index f0cba88..16dce40 100644
> >> --- a/libavcodec/Makefile
> >> +++ b/libavcodec/Makefile
> >> @@ -477,7 +477,7 @@ OBJS-$(CONFIG_PPM_DECODER)             += pnmdec.o
> >> pnm.o
> >>  OBJS-$(CONFIG_PPM_ENCODER)             += pnmenc.o
> >>  OBJS-$(CONFIG_PRORES_DECODER)          += proresdec2.o proresdsp.o
> >> proresdata.o
> >>  OBJS-$(CONFIG_PRORES_LGPL_DECODER)     += proresdec_lgpl.o proresdsp.o
> >> proresdata.o
> >> -OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_anatoliy.o
> >> +OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_kostya.o
> >> proresdata.o
> >>  OBJS-$(CONFIG_PRORES_AW_ENCODER)       += proresenc_anatoliy.o
> >>  OBJS-$(CONFIG_PRORES_KS_ENCODER)       += proresenc_kostya.o
> >> proresdata.o
> >>  OBJS-$(CONFIG_PSD_DECODER)             += psd.o
> >> diff --git a/libavcodec/proresenc_anatoliy.c
> >> b/libavcodec/proresenc_anatoliy.c
> >> index 0516066..7ff6ff7 100644
> >> --- a/libavcodec/proresenc_anatoliy.c
> >> +++ b/libavcodec/proresenc_anatoliy.c
> >> @@ -614,17 +614,3 @@ AVCodec ff_prores_aw_encoder = {
> >>      .capabilities   = AV_CODEC_CAP_FRAME_THREADS |
> >> AV_CODEC_CAP_INTRA_ONLY,
> >>      .profiles       = profiles
> >>  };
> >> -
> >> -AVCodec ff_prores_encoder = {
> >> -    .name           = "prores",
> >> -    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes"),
> >> -    .type           = AVMEDIA_TYPE_VIDEO,
> >> -    .id             = AV_CODEC_ID_PRORES,
> >> -    .priv_data_size = sizeof(ProresContext),
> >> -    .init           = prores_encode_init,
> >> -    .close          = prores_encode_close,
> >> -    .encode2        = prores_encode_frame,
> >> -    .pix_fmts       = (const enum AVPixelFormat[]){AV_PIX_FMT_YUV422P10,
> >> AV_PIX_FMT_NONE},
> >> -    .capabilities   = AV_CODEC_CAP_FRAME_THREADS |
> >> AV_CODEC_CAP_INTRA_ONLY,
> >> -    .profiles       = profiles
> >> -};
> >> diff --git a/libavcodec/proresenc_kostya.c
> >> b/libavcodec/proresenc_kostya.c
> >> index 09bb611..ad979c2 100644
> >> --- a/libavcodec/proresenc_kostya.c
> >> +++ b/libavcodec/proresenc_kostya.c
> >> @@ -1341,6 +1341,13 @@ static const AVClass proresenc_class = {
> >>      .version    = LIBAVUTIL_VERSION_INT,
> >>  };
> >>
> >> +static const AVClass prores_class = {
> >> +    .class_name = "ProRes",
> >> +    .item_name  = av_default_item_name,
> >> +    .option     = options,
> >> +    .version    = LIBAVUTIL_VERSION_INT,
> >> +};
> >> +
> >>  AVCodec ff_prores_ks_encoder = {
> >>      .name           = "prores_ks",
> >>      .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec Pro)"),
> >> @@ -1357,3 +1364,20 @@ AVCodec ff_prores_ks_encoder = {
> >>                        },
> >>      .priv_class     = &proresenc_class,
> >>  };
> >> +
> >> +AVCodec ff_prores_encoder = {
> >> +    .name           = "prores",
> >> +    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec Pro)"),
> >> +    .type           = AVMEDIA_TYPE_VIDEO,
> >> +    .id             = AV_CODEC_ID_PRORES,
> >> +    .priv_data_size = sizeof(ProresContext),
> >> +    .init           = encode_init,
> >> +    .close          = encode_close,
> >> +    .encode2        = encode_frame,
> >> +    .capabilities   = AV_CODEC_CAP_SLICE_THREADS |
> >> AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
> >> +    .pix_fmts       = (const enum AVPixelFormat[]) {
> >> +                          AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
> >> +                          AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_NONE
> >> +                      },
> >> +    .priv_class     = &prores_class,
> >> +};
> >> diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak
> >> index 8c24510..3e92f3c 100644
> >> --- a/tests/fate/vcodec.mak
> >> +++ b/tests/fate/vcodec.mak
> >> @@ -329,6 +329,7 @@ fate-vsynth%-mpng:               CODEC   = png
> >>  FATE_VCODEC-$(call ENCDEC, MSVIDEO1, AVI) += msvideo1
> >>
> >>  FATE_VCODEC-$(call ENCDEC, PRORES, MOV) += prores prores_ks
> >> +fate-vsynth%-prores:             ENCOPTS = -qscale:v 1
> >>  fate-vsynth%-prores:             FMT     = mov
> >>
> >>  fate-vsynth%-prores_ks:          ENCOPTS = -profile hq
> >
> >> diff --git a/tests/ref/vsynth/vsynth1-prores
> >> b/tests/ref/vsynth/vsynth1-prores
> >> index 14de8b9..bf7adaa 100644
> >> --- a/tests/ref/vsynth/vsynth1-prores
> >> +++ b/tests/ref/vsynth/vsynth1-prores
> >> @@ -1,4 +1,4 @@
> >> -7ca7d2f9f5d8ac2ead691b1b6a70d409 *tests/data/fate/vsynth1-prores.mov
> >> -5022821 tests/data/fate/vsynth1-prores.mov
> >> -fb4a9e025d12afc0dbbca8d82831858f
> >> *tests/data/fate/vsynth1-prores.out.rawvideo
> >> -stddev:    2.47 PSNR: 40.27 MAXDIFF:   31 bytes:  7603200/  7603200
> >> +58d0065f5a67a7fa70e7443ac82c336d *tests/data/fate/vsynth1-prores.mov
> >> +10690091 tests/data/fate/vsynth1-prores.mov
> >> +b059fbb85caccfb6e5ad7fe402e2539b
> >> *tests/data/fate/vsynth1-prores.out.rawvideo
> >> +stddev:    1.88 PSNR: 42.64 MAXDIFF:   29 bytes:  7603200/  7603200
> >> diff --git a/tests/ref/vsynth/vsynth2-prores
> >> b/tests/ref/vsynth/vsynth2-prores
> >> index a1b4bb7..6e9a397 100644
> >> --- a/tests/ref/vsynth/vsynth2-prores
> >> +++ b/tests/ref/vsynth/vsynth2-prores
> >> @@ -1,4 +1,4 @@
> >> -aa57fd1221b7eefaf1f34f9d57d6a7cb *tests/data/fate/vsynth2-prores.mov
> >> -3265056 tests/data/fate/vsynth2-prores.mov
> >> -537b0ff66d7c8c3c12faa89d042e6a49
> >> *tests/data/fate/vsynth2-prores.out.rawvideo
> >> -stddev:    1.38 PSNR: 45.29 MAXDIFF:   12 bytes:  7603200/  7603200
> >> +4240da05dc68221a36071cbe3a846877 *tests/data/fate/vsynth2-prores.mov
> >> +8463884 tests/data/fate/vsynth2-prores.mov
> >> +0ed1c1b659beb23928388a34a988786b
> >> *tests/data/fate/vsynth2-prores.out.rawvideo
> >> +stddev:    0.47 PSNR: 54.57 MAXDIFF:    9 bytes:  7603200/  7603200
> >> diff --git a/tests/ref/vsynth/vsynth3-prores
> >> b/tests/ref/vsynth/vsynth3-prores
> >> index f63a7a7..f772805 100644
> >> --- a/tests/ref/vsynth/vsynth3-prores
> >> +++ b/tests/ref/vsynth/vsynth3-prores
> >> @@ -1,4 +1,4 @@
> >> -b060c59be88b4b089ece5ee8dc4f1c58 *tests/data/fate/vsynth3-prores.mov
> >> -105367 tests/data/fate/vsynth3-prores.mov
> >> -fff5e7ad21d78501c8fa4749bf4bf289
> >> *tests/data/fate/vsynth3-prores.out.rawvideo
> >> -stddev:    2.80 PSNR: 39.17 MAXDIFF:   27 bytes:    86700/    86700
> >> +5919b3ca66dd7b5f37fd30e82e033fad *tests/data/fate/vsynth3-prores.mov
> >> +196893 tests/data/fate/vsynth3-prores.mov
> >> +81df91f1f0fd6693ff89c7743df631ea
> >> *tests/data/fate/vsynth3-prores.out.rawvideo
> >> +stddev:    2.15 PSNR: 41.46 MAXDIFF:   26 bytes:    86700/    86700
> >
> > The new files from these tests are higher quality but they are also
> > much higher bitrate and larger
> >
> > does prores_ks produce higher quality at the same bitrate ?
> 
> How you can claim anything with those synthetic videos?

you claimed its higher quality:
"and gives better quality output."

Id like to reproduce this to ensure we keep the encoder with better
quality
I did not mean the synthetic videos in particular, that was just what
i saw in the commit. There were no other quality statistics

allthough it seems strange to me if one encoder was better quality on
real life videos but worse on synthetic ones.


> 
> The size and bitrates of QT ones are even higher.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Paul B Mahol June 27, 2017, 8:38 a.m. UTC | #4
On 6/27/17, Michael Niedermayer <michael@niedermayer.cc> wrote:
> On Tue, Jun 27, 2017 at 12:20:05AM +0200, Paul B Mahol wrote:
>> On 6/27/17, Michael Niedermayer <michael@niedermayer.cc> wrote:
>> > On Mon, Jun 26, 2017 at 11:55:35PM +0200, Paul B Mahol wrote:
>> >> Rationale:
>> >> prores_ks have more features and is faster for qscale > 0
>> >> and gives better quality output.
>> >>
>> >> Signed-off-by: Paul B Mahol <onemda@gmail.com>
>> >> ---
>> >>  libavcodec/Makefile             |  2 +-
>> >>  libavcodec/proresenc_anatoliy.c | 14 --------------
>> >>  libavcodec/proresenc_kostya.c   | 24 ++++++++++++++++++++++++
>> >>  tests/fate/vcodec.mak           |  1 +
>> >>  tests/ref/vsynth/vsynth1-prores |  8 ++++----
>> >>  tests/ref/vsynth/vsynth2-prores |  8 ++++----
>> >>  tests/ref/vsynth/vsynth3-prores |  8 ++++----
>> >>  7 files changed, 38 insertions(+), 27 deletions(-)
>> >>
>> >> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>> >> index f0cba88..16dce40 100644
>> >> --- a/libavcodec/Makefile
>> >> +++ b/libavcodec/Makefile
>> >> @@ -477,7 +477,7 @@ OBJS-$(CONFIG_PPM_DECODER)             += pnmdec.o
>> >> pnm.o
>> >>  OBJS-$(CONFIG_PPM_ENCODER)             += pnmenc.o
>> >>  OBJS-$(CONFIG_PRORES_DECODER)          += proresdec2.o proresdsp.o
>> >> proresdata.o
>> >>  OBJS-$(CONFIG_PRORES_LGPL_DECODER)     += proresdec_lgpl.o
>> >> proresdsp.o
>> >> proresdata.o
>> >> -OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_anatoliy.o
>> >> +OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_kostya.o
>> >> proresdata.o
>> >>  OBJS-$(CONFIG_PRORES_AW_ENCODER)       += proresenc_anatoliy.o
>> >>  OBJS-$(CONFIG_PRORES_KS_ENCODER)       += proresenc_kostya.o
>> >> proresdata.o
>> >>  OBJS-$(CONFIG_PSD_DECODER)             += psd.o
>> >> diff --git a/libavcodec/proresenc_anatoliy.c
>> >> b/libavcodec/proresenc_anatoliy.c
>> >> index 0516066..7ff6ff7 100644
>> >> --- a/libavcodec/proresenc_anatoliy.c
>> >> +++ b/libavcodec/proresenc_anatoliy.c
>> >> @@ -614,17 +614,3 @@ AVCodec ff_prores_aw_encoder = {
>> >>      .capabilities   = AV_CODEC_CAP_FRAME_THREADS |
>> >> AV_CODEC_CAP_INTRA_ONLY,
>> >>      .profiles       = profiles
>> >>  };
>> >> -
>> >> -AVCodec ff_prores_encoder = {
>> >> -    .name           = "prores",
>> >> -    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes"),
>> >> -    .type           = AVMEDIA_TYPE_VIDEO,
>> >> -    .id             = AV_CODEC_ID_PRORES,
>> >> -    .priv_data_size = sizeof(ProresContext),
>> >> -    .init           = prores_encode_init,
>> >> -    .close          = prores_encode_close,
>> >> -    .encode2        = prores_encode_frame,
>> >> -    .pix_fmts       = (const enum
>> >> AVPixelFormat[]){AV_PIX_FMT_YUV422P10,
>> >> AV_PIX_FMT_NONE},
>> >> -    .capabilities   = AV_CODEC_CAP_FRAME_THREADS |
>> >> AV_CODEC_CAP_INTRA_ONLY,
>> >> -    .profiles       = profiles
>> >> -};
>> >> diff --git a/libavcodec/proresenc_kostya.c
>> >> b/libavcodec/proresenc_kostya.c
>> >> index 09bb611..ad979c2 100644
>> >> --- a/libavcodec/proresenc_kostya.c
>> >> +++ b/libavcodec/proresenc_kostya.c
>> >> @@ -1341,6 +1341,13 @@ static const AVClass proresenc_class = {
>> >>      .version    = LIBAVUTIL_VERSION_INT,
>> >>  };
>> >>
>> >> +static const AVClass prores_class = {
>> >> +    .class_name = "ProRes",
>> >> +    .item_name  = av_default_item_name,
>> >> +    .option     = options,
>> >> +    .version    = LIBAVUTIL_VERSION_INT,
>> >> +};
>> >> +
>> >>  AVCodec ff_prores_ks_encoder = {
>> >>      .name           = "prores_ks",
>> >>      .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec
>> >> Pro)"),
>> >> @@ -1357,3 +1364,20 @@ AVCodec ff_prores_ks_encoder = {
>> >>                        },
>> >>      .priv_class     = &proresenc_class,
>> >>  };
>> >> +
>> >> +AVCodec ff_prores_encoder = {
>> >> +    .name           = "prores",
>> >> +    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec
>> >> Pro)"),
>> >> +    .type           = AVMEDIA_TYPE_VIDEO,
>> >> +    .id             = AV_CODEC_ID_PRORES,
>> >> +    .priv_data_size = sizeof(ProresContext),
>> >> +    .init           = encode_init,
>> >> +    .close          = encode_close,
>> >> +    .encode2        = encode_frame,
>> >> +    .capabilities   = AV_CODEC_CAP_SLICE_THREADS |
>> >> AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
>> >> +    .pix_fmts       = (const enum AVPixelFormat[]) {
>> >> +                          AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
>> >> +                          AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_NONE
>> >> +                      },
>> >> +    .priv_class     = &prores_class,
>> >> +};
>> >> diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak
>> >> index 8c24510..3e92f3c 100644
>> >> --- a/tests/fate/vcodec.mak
>> >> +++ b/tests/fate/vcodec.mak
>> >> @@ -329,6 +329,7 @@ fate-vsynth%-mpng:               CODEC   = png
>> >>  FATE_VCODEC-$(call ENCDEC, MSVIDEO1, AVI) += msvideo1
>> >>
>> >>  FATE_VCODEC-$(call ENCDEC, PRORES, MOV) += prores prores_ks
>> >> +fate-vsynth%-prores:             ENCOPTS = -qscale:v 1
>> >>  fate-vsynth%-prores:             FMT     = mov
>> >>
>> >>  fate-vsynth%-prores_ks:          ENCOPTS = -profile hq
>> >
>> >> diff --git a/tests/ref/vsynth/vsynth1-prores
>> >> b/tests/ref/vsynth/vsynth1-prores
>> >> index 14de8b9..bf7adaa 100644
>> >> --- a/tests/ref/vsynth/vsynth1-prores
>> >> +++ b/tests/ref/vsynth/vsynth1-prores
>> >> @@ -1,4 +1,4 @@
>> >> -7ca7d2f9f5d8ac2ead691b1b6a70d409 *tests/data/fate/vsynth1-prores.mov
>> >> -5022821 tests/data/fate/vsynth1-prores.mov
>> >> -fb4a9e025d12afc0dbbca8d82831858f
>> >> *tests/data/fate/vsynth1-prores.out.rawvideo
>> >> -stddev:    2.47 PSNR: 40.27 MAXDIFF:   31 bytes:  7603200/  7603200
>> >> +58d0065f5a67a7fa70e7443ac82c336d *tests/data/fate/vsynth1-prores.mov
>> >> +10690091 tests/data/fate/vsynth1-prores.mov
>> >> +b059fbb85caccfb6e5ad7fe402e2539b
>> >> *tests/data/fate/vsynth1-prores.out.rawvideo
>> >> +stddev:    1.88 PSNR: 42.64 MAXDIFF:   29 bytes:  7603200/  7603200
>> >> diff --git a/tests/ref/vsynth/vsynth2-prores
>> >> b/tests/ref/vsynth/vsynth2-prores
>> >> index a1b4bb7..6e9a397 100644
>> >> --- a/tests/ref/vsynth/vsynth2-prores
>> >> +++ b/tests/ref/vsynth/vsynth2-prores
>> >> @@ -1,4 +1,4 @@
>> >> -aa57fd1221b7eefaf1f34f9d57d6a7cb *tests/data/fate/vsynth2-prores.mov
>> >> -3265056 tests/data/fate/vsynth2-prores.mov
>> >> -537b0ff66d7c8c3c12faa89d042e6a49
>> >> *tests/data/fate/vsynth2-prores.out.rawvideo
>> >> -stddev:    1.38 PSNR: 45.29 MAXDIFF:   12 bytes:  7603200/  7603200
>> >> +4240da05dc68221a36071cbe3a846877 *tests/data/fate/vsynth2-prores.mov
>> >> +8463884 tests/data/fate/vsynth2-prores.mov
>> >> +0ed1c1b659beb23928388a34a988786b
>> >> *tests/data/fate/vsynth2-prores.out.rawvideo
>> >> +stddev:    0.47 PSNR: 54.57 MAXDIFF:    9 bytes:  7603200/  7603200
>> >> diff --git a/tests/ref/vsynth/vsynth3-prores
>> >> b/tests/ref/vsynth/vsynth3-prores
>> >> index f63a7a7..f772805 100644
>> >> --- a/tests/ref/vsynth/vsynth3-prores
>> >> +++ b/tests/ref/vsynth/vsynth3-prores
>> >> @@ -1,4 +1,4 @@
>> >> -b060c59be88b4b089ece5ee8dc4f1c58 *tests/data/fate/vsynth3-prores.mov
>> >> -105367 tests/data/fate/vsynth3-prores.mov
>> >> -fff5e7ad21d78501c8fa4749bf4bf289
>> >> *tests/data/fate/vsynth3-prores.out.rawvideo
>> >> -stddev:    2.80 PSNR: 39.17 MAXDIFF:   27 bytes:    86700/    86700
>> >> +5919b3ca66dd7b5f37fd30e82e033fad *tests/data/fate/vsynth3-prores.mov
>> >> +196893 tests/data/fate/vsynth3-prores.mov
>> >> +81df91f1f0fd6693ff89c7743df631ea
>> >> *tests/data/fate/vsynth3-prores.out.rawvideo
>> >> +stddev:    2.15 PSNR: 41.46 MAXDIFF:   26 bytes:    86700/    86700
>> >
>> > The new files from these tests are higher quality but they are also
>> > much higher bitrate and larger
>> >
>> > does prores_ks produce higher quality at the same bitrate ?
>>
>> How you can claim anything with those synthetic videos?
>
> you claimed its higher quality:
> "and gives better quality output."

Yes. It supports yuv(a)444p10, is that better quality or what?

>
> Id like to reproduce this to ensure we keep the encoder with better
> quality
> I did not mean the synthetic videos in particular, that was just what
> i saw in the commit. There were no other quality statistics
>
> allthough it seems strange to me if one encoder was better quality on
> real life videos but worse on synthetic ones.

When I match profile, pixel format and bitrate very small win goes to
aw encoder.
I see no reason to keep it even in that case as aw one does not
support any bitrate
control besides its profiles. So using -qscale gives always same output.
Michael Niedermayer June 27, 2017, 12:31 p.m. UTC | #5
On Tue, Jun 27, 2017 at 10:38:47AM +0200, Paul B Mahol wrote:
> On 6/27/17, Michael Niedermayer <michael@niedermayer.cc> wrote:
> > On Tue, Jun 27, 2017 at 12:20:05AM +0200, Paul B Mahol wrote:
> >> On 6/27/17, Michael Niedermayer <michael@niedermayer.cc> wrote:
> >> > On Mon, Jun 26, 2017 at 11:55:35PM +0200, Paul B Mahol wrote:
> >> >> Rationale:
> >> >> prores_ks have more features and is faster for qscale > 0
> >> >> and gives better quality output.
> >> >>
> >> >> Signed-off-by: Paul B Mahol <onemda@gmail.com>
> >> >> ---
> >> >>  libavcodec/Makefile             |  2 +-
> >> >>  libavcodec/proresenc_anatoliy.c | 14 --------------
> >> >>  libavcodec/proresenc_kostya.c   | 24 ++++++++++++++++++++++++
> >> >>  tests/fate/vcodec.mak           |  1 +
> >> >>  tests/ref/vsynth/vsynth1-prores |  8 ++++----
> >> >>  tests/ref/vsynth/vsynth2-prores |  8 ++++----
> >> >>  tests/ref/vsynth/vsynth3-prores |  8 ++++----
> >> >>  7 files changed, 38 insertions(+), 27 deletions(-)
> >> >>
> >> >> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> >> >> index f0cba88..16dce40 100644
> >> >> --- a/libavcodec/Makefile
> >> >> +++ b/libavcodec/Makefile
> >> >> @@ -477,7 +477,7 @@ OBJS-$(CONFIG_PPM_DECODER)             += pnmdec.o
> >> >> pnm.o
> >> >>  OBJS-$(CONFIG_PPM_ENCODER)             += pnmenc.o
> >> >>  OBJS-$(CONFIG_PRORES_DECODER)          += proresdec2.o proresdsp.o
> >> >> proresdata.o
> >> >>  OBJS-$(CONFIG_PRORES_LGPL_DECODER)     += proresdec_lgpl.o
> >> >> proresdsp.o
> >> >> proresdata.o
> >> >> -OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_anatoliy.o
> >> >> +OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_kostya.o
> >> >> proresdata.o
> >> >>  OBJS-$(CONFIG_PRORES_AW_ENCODER)       += proresenc_anatoliy.o
> >> >>  OBJS-$(CONFIG_PRORES_KS_ENCODER)       += proresenc_kostya.o
> >> >> proresdata.o
> >> >>  OBJS-$(CONFIG_PSD_DECODER)             += psd.o
> >> >> diff --git a/libavcodec/proresenc_anatoliy.c
> >> >> b/libavcodec/proresenc_anatoliy.c
> >> >> index 0516066..7ff6ff7 100644
> >> >> --- a/libavcodec/proresenc_anatoliy.c
> >> >> +++ b/libavcodec/proresenc_anatoliy.c
> >> >> @@ -614,17 +614,3 @@ AVCodec ff_prores_aw_encoder = {
> >> >>      .capabilities   = AV_CODEC_CAP_FRAME_THREADS |
> >> >> AV_CODEC_CAP_INTRA_ONLY,
> >> >>      .profiles       = profiles
> >> >>  };
> >> >> -
> >> >> -AVCodec ff_prores_encoder = {
> >> >> -    .name           = "prores",
> >> >> -    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes"),
> >> >> -    .type           = AVMEDIA_TYPE_VIDEO,
> >> >> -    .id             = AV_CODEC_ID_PRORES,
> >> >> -    .priv_data_size = sizeof(ProresContext),
> >> >> -    .init           = prores_encode_init,
> >> >> -    .close          = prores_encode_close,
> >> >> -    .encode2        = prores_encode_frame,
> >> >> -    .pix_fmts       = (const enum
> >> >> AVPixelFormat[]){AV_PIX_FMT_YUV422P10,
> >> >> AV_PIX_FMT_NONE},
> >> >> -    .capabilities   = AV_CODEC_CAP_FRAME_THREADS |
> >> >> AV_CODEC_CAP_INTRA_ONLY,
> >> >> -    .profiles       = profiles
> >> >> -};
> >> >> diff --git a/libavcodec/proresenc_kostya.c
> >> >> b/libavcodec/proresenc_kostya.c
> >> >> index 09bb611..ad979c2 100644
> >> >> --- a/libavcodec/proresenc_kostya.c
> >> >> +++ b/libavcodec/proresenc_kostya.c
> >> >> @@ -1341,6 +1341,13 @@ static const AVClass proresenc_class = {
> >> >>      .version    = LIBAVUTIL_VERSION_INT,
> >> >>  };
> >> >>
> >> >> +static const AVClass prores_class = {
> >> >> +    .class_name = "ProRes",
> >> >> +    .item_name  = av_default_item_name,
> >> >> +    .option     = options,
> >> >> +    .version    = LIBAVUTIL_VERSION_INT,
> >> >> +};
> >> >> +
> >> >>  AVCodec ff_prores_ks_encoder = {
> >> >>      .name           = "prores_ks",
> >> >>      .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec
> >> >> Pro)"),
> >> >> @@ -1357,3 +1364,20 @@ AVCodec ff_prores_ks_encoder = {
> >> >>                        },
> >> >>      .priv_class     = &proresenc_class,
> >> >>  };
> >> >> +
> >> >> +AVCodec ff_prores_encoder = {
> >> >> +    .name           = "prores",
> >> >> +    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec
> >> >> Pro)"),
> >> >> +    .type           = AVMEDIA_TYPE_VIDEO,
> >> >> +    .id             = AV_CODEC_ID_PRORES,
> >> >> +    .priv_data_size = sizeof(ProresContext),
> >> >> +    .init           = encode_init,
> >> >> +    .close          = encode_close,
> >> >> +    .encode2        = encode_frame,
> >> >> +    .capabilities   = AV_CODEC_CAP_SLICE_THREADS |
> >> >> AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
> >> >> +    .pix_fmts       = (const enum AVPixelFormat[]) {
> >> >> +                          AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
> >> >> +                          AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_NONE
> >> >> +                      },
> >> >> +    .priv_class     = &prores_class,
> >> >> +};
> >> >> diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak
> >> >> index 8c24510..3e92f3c 100644
> >> >> --- a/tests/fate/vcodec.mak
> >> >> +++ b/tests/fate/vcodec.mak
> >> >> @@ -329,6 +329,7 @@ fate-vsynth%-mpng:               CODEC   = png
> >> >>  FATE_VCODEC-$(call ENCDEC, MSVIDEO1, AVI) += msvideo1
> >> >>
> >> >>  FATE_VCODEC-$(call ENCDEC, PRORES, MOV) += prores prores_ks
> >> >> +fate-vsynth%-prores:             ENCOPTS = -qscale:v 1
> >> >>  fate-vsynth%-prores:             FMT     = mov
> >> >>
> >> >>  fate-vsynth%-prores_ks:          ENCOPTS = -profile hq
> >> >
> >> >> diff --git a/tests/ref/vsynth/vsynth1-prores
> >> >> b/tests/ref/vsynth/vsynth1-prores
> >> >> index 14de8b9..bf7adaa 100644
> >> >> --- a/tests/ref/vsynth/vsynth1-prores
> >> >> +++ b/tests/ref/vsynth/vsynth1-prores
> >> >> @@ -1,4 +1,4 @@
> >> >> -7ca7d2f9f5d8ac2ead691b1b6a70d409 *tests/data/fate/vsynth1-prores.mov
> >> >> -5022821 tests/data/fate/vsynth1-prores.mov
> >> >> -fb4a9e025d12afc0dbbca8d82831858f
> >> >> *tests/data/fate/vsynth1-prores.out.rawvideo
> >> >> -stddev:    2.47 PSNR: 40.27 MAXDIFF:   31 bytes:  7603200/  7603200
> >> >> +58d0065f5a67a7fa70e7443ac82c336d *tests/data/fate/vsynth1-prores.mov
> >> >> +10690091 tests/data/fate/vsynth1-prores.mov
> >> >> +b059fbb85caccfb6e5ad7fe402e2539b
> >> >> *tests/data/fate/vsynth1-prores.out.rawvideo
> >> >> +stddev:    1.88 PSNR: 42.64 MAXDIFF:   29 bytes:  7603200/  7603200
> >> >> diff --git a/tests/ref/vsynth/vsynth2-prores
> >> >> b/tests/ref/vsynth/vsynth2-prores
> >> >> index a1b4bb7..6e9a397 100644
> >> >> --- a/tests/ref/vsynth/vsynth2-prores
> >> >> +++ b/tests/ref/vsynth/vsynth2-prores
> >> >> @@ -1,4 +1,4 @@
> >> >> -aa57fd1221b7eefaf1f34f9d57d6a7cb *tests/data/fate/vsynth2-prores.mov
> >> >> -3265056 tests/data/fate/vsynth2-prores.mov
> >> >> -537b0ff66d7c8c3c12faa89d042e6a49
> >> >> *tests/data/fate/vsynth2-prores.out.rawvideo
> >> >> -stddev:    1.38 PSNR: 45.29 MAXDIFF:   12 bytes:  7603200/  7603200
> >> >> +4240da05dc68221a36071cbe3a846877 *tests/data/fate/vsynth2-prores.mov
> >> >> +8463884 tests/data/fate/vsynth2-prores.mov
> >> >> +0ed1c1b659beb23928388a34a988786b
> >> >> *tests/data/fate/vsynth2-prores.out.rawvideo
> >> >> +stddev:    0.47 PSNR: 54.57 MAXDIFF:    9 bytes:  7603200/  7603200
> >> >> diff --git a/tests/ref/vsynth/vsynth3-prores
> >> >> b/tests/ref/vsynth/vsynth3-prores
> >> >> index f63a7a7..f772805 100644
> >> >> --- a/tests/ref/vsynth/vsynth3-prores
> >> >> +++ b/tests/ref/vsynth/vsynth3-prores
> >> >> @@ -1,4 +1,4 @@
> >> >> -b060c59be88b4b089ece5ee8dc4f1c58 *tests/data/fate/vsynth3-prores.mov
> >> >> -105367 tests/data/fate/vsynth3-prores.mov
> >> >> -fff5e7ad21d78501c8fa4749bf4bf289
> >> >> *tests/data/fate/vsynth3-prores.out.rawvideo
> >> >> -stddev:    2.80 PSNR: 39.17 MAXDIFF:   27 bytes:    86700/    86700
> >> >> +5919b3ca66dd7b5f37fd30e82e033fad *tests/data/fate/vsynth3-prores.mov
> >> >> +196893 tests/data/fate/vsynth3-prores.mov
> >> >> +81df91f1f0fd6693ff89c7743df631ea
> >> >> *tests/data/fate/vsynth3-prores.out.rawvideo
> >> >> +stddev:    2.15 PSNR: 41.46 MAXDIFF:   26 bytes:    86700/    86700
> >> >
> >> > The new files from these tests are higher quality but they are also
> >> > much higher bitrate and larger
> >> >
> >> > does prores_ks produce higher quality at the same bitrate ?
> >>
> >> How you can claim anything with those synthetic videos?
> >
> > you claimed its higher quality:
> > "and gives better quality output."
> 
> Yes. It supports yuv(a)444p10, is that better quality or what?
> 
> >
> > Id like to reproduce this to ensure we keep the encoder with better
> > quality
> > I did not mean the synthetic videos in particular, that was just what
> > i saw in the commit. There were no other quality statistics
> >
> > allthough it seems strange to me if one encoder was better quality on
> > real life videos but worse on synthetic ones.
> 

> When I match profile, pixel format and bitrate very small win goes to
> aw encoder.

why is the aw encoder better ?
can the ks encoder be improved to eliminate that difference ?


> I see no reason to keep it even in that case as aw one does not
> support any bitrate
> control besides its profiles. So using -qscale gives always same output.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Paul B Mahol June 27, 2017, 1 p.m. UTC | #6
On 6/27/17, Michael Niedermayer <michael@niedermayer.cc> wrote:
> On Tue, Jun 27, 2017 at 10:38:47AM +0200, Paul B Mahol wrote:
>> On 6/27/17, Michael Niedermayer <michael@niedermayer.cc> wrote:
>> > On Tue, Jun 27, 2017 at 12:20:05AM +0200, Paul B Mahol wrote:
>> >> On 6/27/17, Michael Niedermayer <michael@niedermayer.cc> wrote:
>> >> > On Mon, Jun 26, 2017 at 11:55:35PM +0200, Paul B Mahol wrote:
>> >> >> Rationale:
>> >> >> prores_ks have more features and is faster for qscale > 0
>> >> >> and gives better quality output.
>> >> >>
>> >> >> Signed-off-by: Paul B Mahol <onemda@gmail.com>
>> >> >> ---
>> >> >>  libavcodec/Makefile             |  2 +-
>> >> >>  libavcodec/proresenc_anatoliy.c | 14 --------------
>> >> >>  libavcodec/proresenc_kostya.c   | 24 ++++++++++++++++++++++++
>> >> >>  tests/fate/vcodec.mak           |  1 +
>> >> >>  tests/ref/vsynth/vsynth1-prores |  8 ++++----
>> >> >>  tests/ref/vsynth/vsynth2-prores |  8 ++++----
>> >> >>  tests/ref/vsynth/vsynth3-prores |  8 ++++----
>> >> >>  7 files changed, 38 insertions(+), 27 deletions(-)
>> >> >>
>> >> >> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>> >> >> index f0cba88..16dce40 100644
>> >> >> --- a/libavcodec/Makefile
>> >> >> +++ b/libavcodec/Makefile
>> >> >> @@ -477,7 +477,7 @@ OBJS-$(CONFIG_PPM_DECODER)             +=
>> >> >> pnmdec.o
>> >> >> pnm.o
>> >> >>  OBJS-$(CONFIG_PPM_ENCODER)             += pnmenc.o
>> >> >>  OBJS-$(CONFIG_PRORES_DECODER)          += proresdec2.o proresdsp.o
>> >> >> proresdata.o
>> >> >>  OBJS-$(CONFIG_PRORES_LGPL_DECODER)     += proresdec_lgpl.o
>> >> >> proresdsp.o
>> >> >> proresdata.o
>> >> >> -OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_anatoliy.o
>> >> >> +OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_kostya.o
>> >> >> proresdata.o
>> >> >>  OBJS-$(CONFIG_PRORES_AW_ENCODER)       += proresenc_anatoliy.o
>> >> >>  OBJS-$(CONFIG_PRORES_KS_ENCODER)       += proresenc_kostya.o
>> >> >> proresdata.o
>> >> >>  OBJS-$(CONFIG_PSD_DECODER)             += psd.o
>> >> >> diff --git a/libavcodec/proresenc_anatoliy.c
>> >> >> b/libavcodec/proresenc_anatoliy.c
>> >> >> index 0516066..7ff6ff7 100644
>> >> >> --- a/libavcodec/proresenc_anatoliy.c
>> >> >> +++ b/libavcodec/proresenc_anatoliy.c
>> >> >> @@ -614,17 +614,3 @@ AVCodec ff_prores_aw_encoder = {
>> >> >>      .capabilities   = AV_CODEC_CAP_FRAME_THREADS |
>> >> >> AV_CODEC_CAP_INTRA_ONLY,
>> >> >>      .profiles       = profiles
>> >> >>  };
>> >> >> -
>> >> >> -AVCodec ff_prores_encoder = {
>> >> >> -    .name           = "prores",
>> >> >> -    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes"),
>> >> >> -    .type           = AVMEDIA_TYPE_VIDEO,
>> >> >> -    .id             = AV_CODEC_ID_PRORES,
>> >> >> -    .priv_data_size = sizeof(ProresContext),
>> >> >> -    .init           = prores_encode_init,
>> >> >> -    .close          = prores_encode_close,
>> >> >> -    .encode2        = prores_encode_frame,
>> >> >> -    .pix_fmts       = (const enum
>> >> >> AVPixelFormat[]){AV_PIX_FMT_YUV422P10,
>> >> >> AV_PIX_FMT_NONE},
>> >> >> -    .capabilities   = AV_CODEC_CAP_FRAME_THREADS |
>> >> >> AV_CODEC_CAP_INTRA_ONLY,
>> >> >> -    .profiles       = profiles
>> >> >> -};
>> >> >> diff --git a/libavcodec/proresenc_kostya.c
>> >> >> b/libavcodec/proresenc_kostya.c
>> >> >> index 09bb611..ad979c2 100644
>> >> >> --- a/libavcodec/proresenc_kostya.c
>> >> >> +++ b/libavcodec/proresenc_kostya.c
>> >> >> @@ -1341,6 +1341,13 @@ static const AVClass proresenc_class = {
>> >> >>      .version    = LIBAVUTIL_VERSION_INT,
>> >> >>  };
>> >> >>
>> >> >> +static const AVClass prores_class = {
>> >> >> +    .class_name = "ProRes",
>> >> >> +    .item_name  = av_default_item_name,
>> >> >> +    .option     = options,
>> >> >> +    .version    = LIBAVUTIL_VERSION_INT,
>> >> >> +};
>> >> >> +
>> >> >>  AVCodec ff_prores_ks_encoder = {
>> >> >>      .name           = "prores_ks",
>> >> >>      .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec
>> >> >> Pro)"),
>> >> >> @@ -1357,3 +1364,20 @@ AVCodec ff_prores_ks_encoder = {
>> >> >>                        },
>> >> >>      .priv_class     = &proresenc_class,
>> >> >>  };
>> >> >> +
>> >> >> +AVCodec ff_prores_encoder = {
>> >> >> +    .name           = "prores",
>> >> >> +    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec
>> >> >> Pro)"),
>> >> >> +    .type           = AVMEDIA_TYPE_VIDEO,
>> >> >> +    .id             = AV_CODEC_ID_PRORES,
>> >> >> +    .priv_data_size = sizeof(ProresContext),
>> >> >> +    .init           = encode_init,
>> >> >> +    .close          = encode_close,
>> >> >> +    .encode2        = encode_frame,
>> >> >> +    .capabilities   = AV_CODEC_CAP_SLICE_THREADS |
>> >> >> AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
>> >> >> +    .pix_fmts       = (const enum AVPixelFormat[]) {
>> >> >> +                          AV_PIX_FMT_YUV422P10,
>> >> >> AV_PIX_FMT_YUV444P10,
>> >> >> +                          AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_NONE
>> >> >> +                      },
>> >> >> +    .priv_class     = &prores_class,
>> >> >> +};
>> >> >> diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak
>> >> >> index 8c24510..3e92f3c 100644
>> >> >> --- a/tests/fate/vcodec.mak
>> >> >> +++ b/tests/fate/vcodec.mak
>> >> >> @@ -329,6 +329,7 @@ fate-vsynth%-mpng:               CODEC   = png
>> >> >>  FATE_VCODEC-$(call ENCDEC, MSVIDEO1, AVI) += msvideo1
>> >> >>
>> >> >>  FATE_VCODEC-$(call ENCDEC, PRORES, MOV) += prores prores_ks
>> >> >> +fate-vsynth%-prores:             ENCOPTS = -qscale:v 1
>> >> >>  fate-vsynth%-prores:             FMT     = mov
>> >> >>
>> >> >>  fate-vsynth%-prores_ks:          ENCOPTS = -profile hq
>> >> >
>> >> >> diff --git a/tests/ref/vsynth/vsynth1-prores
>> >> >> b/tests/ref/vsynth/vsynth1-prores
>> >> >> index 14de8b9..bf7adaa 100644
>> >> >> --- a/tests/ref/vsynth/vsynth1-prores
>> >> >> +++ b/tests/ref/vsynth/vsynth1-prores
>> >> >> @@ -1,4 +1,4 @@
>> >> >> -7ca7d2f9f5d8ac2ead691b1b6a70d409
>> >> >> *tests/data/fate/vsynth1-prores.mov
>> >> >> -5022821 tests/data/fate/vsynth1-prores.mov
>> >> >> -fb4a9e025d12afc0dbbca8d82831858f
>> >> >> *tests/data/fate/vsynth1-prores.out.rawvideo
>> >> >> -stddev:    2.47 PSNR: 40.27 MAXDIFF:   31 bytes:  7603200/
>> >> >> 7603200
>> >> >> +58d0065f5a67a7fa70e7443ac82c336d
>> >> >> *tests/data/fate/vsynth1-prores.mov
>> >> >> +10690091 tests/data/fate/vsynth1-prores.mov
>> >> >> +b059fbb85caccfb6e5ad7fe402e2539b
>> >> >> *tests/data/fate/vsynth1-prores.out.rawvideo
>> >> >> +stddev:    1.88 PSNR: 42.64 MAXDIFF:   29 bytes:  7603200/
>> >> >> 7603200
>> >> >> diff --git a/tests/ref/vsynth/vsynth2-prores
>> >> >> b/tests/ref/vsynth/vsynth2-prores
>> >> >> index a1b4bb7..6e9a397 100644
>> >> >> --- a/tests/ref/vsynth/vsynth2-prores
>> >> >> +++ b/tests/ref/vsynth/vsynth2-prores
>> >> >> @@ -1,4 +1,4 @@
>> >> >> -aa57fd1221b7eefaf1f34f9d57d6a7cb
>> >> >> *tests/data/fate/vsynth2-prores.mov
>> >> >> -3265056 tests/data/fate/vsynth2-prores.mov
>> >> >> -537b0ff66d7c8c3c12faa89d042e6a49
>> >> >> *tests/data/fate/vsynth2-prores.out.rawvideo
>> >> >> -stddev:    1.38 PSNR: 45.29 MAXDIFF:   12 bytes:  7603200/
>> >> >> 7603200
>> >> >> +4240da05dc68221a36071cbe3a846877
>> >> >> *tests/data/fate/vsynth2-prores.mov
>> >> >> +8463884 tests/data/fate/vsynth2-prores.mov
>> >> >> +0ed1c1b659beb23928388a34a988786b
>> >> >> *tests/data/fate/vsynth2-prores.out.rawvideo
>> >> >> +stddev:    0.47 PSNR: 54.57 MAXDIFF:    9 bytes:  7603200/
>> >> >> 7603200
>> >> >> diff --git a/tests/ref/vsynth/vsynth3-prores
>> >> >> b/tests/ref/vsynth/vsynth3-prores
>> >> >> index f63a7a7..f772805 100644
>> >> >> --- a/tests/ref/vsynth/vsynth3-prores
>> >> >> +++ b/tests/ref/vsynth/vsynth3-prores
>> >> >> @@ -1,4 +1,4 @@
>> >> >> -b060c59be88b4b089ece5ee8dc4f1c58
>> >> >> *tests/data/fate/vsynth3-prores.mov
>> >> >> -105367 tests/data/fate/vsynth3-prores.mov
>> >> >> -fff5e7ad21d78501c8fa4749bf4bf289
>> >> >> *tests/data/fate/vsynth3-prores.out.rawvideo
>> >> >> -stddev:    2.80 PSNR: 39.17 MAXDIFF:   27 bytes:    86700/
>> >> >> 86700
>> >> >> +5919b3ca66dd7b5f37fd30e82e033fad
>> >> >> *tests/data/fate/vsynth3-prores.mov
>> >> >> +196893 tests/data/fate/vsynth3-prores.mov
>> >> >> +81df91f1f0fd6693ff89c7743df631ea
>> >> >> *tests/data/fate/vsynth3-prores.out.rawvideo
>> >> >> +stddev:    2.15 PSNR: 41.46 MAXDIFF:   26 bytes:    86700/
>> >> >> 86700
>> >> >
>> >> > The new files from these tests are higher quality but they are also
>> >> > much higher bitrate and larger
>> >> >
>> >> > does prores_ks produce higher quality at the same bitrate ?
>> >>
>> >> How you can claim anything with those synthetic videos?
>> >
>> > you claimed its higher quality:
>> > "and gives better quality output."
>>
>> Yes. It supports yuv(a)444p10, is that better quality or what?
>>
>> >
>> > Id like to reproduce this to ensure we keep the encoder with better
>> > quality
>> > I did not mean the synthetic videos in particular, that was just what
>> > i saw in the commit. There were no other quality statistics
>> >
>> > allthough it seems strange to me if one encoder was better quality on
>> > real life videos but worse on synthetic ones.
>>
>
>> When I match profile, pixel format and bitrate very small win goes to
>> aw encoder.
>
> why is the aw encoder better ?
> can the ks encoder be improved to eliminate that difference ?

The difference is marginal, few kbs higher usage for same psnr, ssim result.
diff mbox

Patch

diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index f0cba88..16dce40 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -477,7 +477,7 @@  OBJS-$(CONFIG_PPM_DECODER)             += pnmdec.o pnm.o
 OBJS-$(CONFIG_PPM_ENCODER)             += pnmenc.o
 OBJS-$(CONFIG_PRORES_DECODER)          += proresdec2.o proresdsp.o proresdata.o
 OBJS-$(CONFIG_PRORES_LGPL_DECODER)     += proresdec_lgpl.o proresdsp.o proresdata.o
-OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_anatoliy.o
+OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_kostya.o proresdata.o
 OBJS-$(CONFIG_PRORES_AW_ENCODER)       += proresenc_anatoliy.o
 OBJS-$(CONFIG_PRORES_KS_ENCODER)       += proresenc_kostya.o proresdata.o
 OBJS-$(CONFIG_PSD_DECODER)             += psd.o
diff --git a/libavcodec/proresenc_anatoliy.c b/libavcodec/proresenc_anatoliy.c
index 0516066..7ff6ff7 100644
--- a/libavcodec/proresenc_anatoliy.c
+++ b/libavcodec/proresenc_anatoliy.c
@@ -614,17 +614,3 @@  AVCodec ff_prores_aw_encoder = {
     .capabilities   = AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
     .profiles       = profiles
 };
-
-AVCodec ff_prores_encoder = {
-    .name           = "prores",
-    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes"),
-    .type           = AVMEDIA_TYPE_VIDEO,
-    .id             = AV_CODEC_ID_PRORES,
-    .priv_data_size = sizeof(ProresContext),
-    .init           = prores_encode_init,
-    .close          = prores_encode_close,
-    .encode2        = prores_encode_frame,
-    .pix_fmts       = (const enum AVPixelFormat[]){AV_PIX_FMT_YUV422P10, AV_PIX_FMT_NONE},
-    .capabilities   = AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
-    .profiles       = profiles
-};
diff --git a/libavcodec/proresenc_kostya.c b/libavcodec/proresenc_kostya.c
index 09bb611..ad979c2 100644
--- a/libavcodec/proresenc_kostya.c
+++ b/libavcodec/proresenc_kostya.c
@@ -1341,6 +1341,13 @@  static const AVClass proresenc_class = {
     .version    = LIBAVUTIL_VERSION_INT,
 };
 
+static const AVClass prores_class = {
+    .class_name = "ProRes",
+    .item_name  = av_default_item_name,
+    .option     = options,
+    .version    = LIBAVUTIL_VERSION_INT,
+};
+
 AVCodec ff_prores_ks_encoder = {
     .name           = "prores_ks",
     .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec Pro)"),
@@ -1357,3 +1364,20 @@  AVCodec ff_prores_ks_encoder = {
                       },
     .priv_class     = &proresenc_class,
 };
+
+AVCodec ff_prores_encoder = {
+    .name           = "prores",
+    .long_name      = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec Pro)"),
+    .type           = AVMEDIA_TYPE_VIDEO,
+    .id             = AV_CODEC_ID_PRORES,
+    .priv_data_size = sizeof(ProresContext),
+    .init           = encode_init,
+    .close          = encode_close,
+    .encode2        = encode_frame,
+    .capabilities   = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
+    .pix_fmts       = (const enum AVPixelFormat[]) {
+                          AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
+                          AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_NONE
+                      },
+    .priv_class     = &prores_class,
+};
diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak
index 8c24510..3e92f3c 100644
--- a/tests/fate/vcodec.mak
+++ b/tests/fate/vcodec.mak
@@ -329,6 +329,7 @@  fate-vsynth%-mpng:               CODEC   = png
 FATE_VCODEC-$(call ENCDEC, MSVIDEO1, AVI) += msvideo1
 
 FATE_VCODEC-$(call ENCDEC, PRORES, MOV) += prores prores_ks
+fate-vsynth%-prores:             ENCOPTS = -qscale:v 1
 fate-vsynth%-prores:             FMT     = mov
 
 fate-vsynth%-prores_ks:          ENCOPTS = -profile hq
diff --git a/tests/ref/vsynth/vsynth1-prores b/tests/ref/vsynth/vsynth1-prores
index 14de8b9..bf7adaa 100644
--- a/tests/ref/vsynth/vsynth1-prores
+++ b/tests/ref/vsynth/vsynth1-prores
@@ -1,4 +1,4 @@ 
-7ca7d2f9f5d8ac2ead691b1b6a70d409 *tests/data/fate/vsynth1-prores.mov
-5022821 tests/data/fate/vsynth1-prores.mov
-fb4a9e025d12afc0dbbca8d82831858f *tests/data/fate/vsynth1-prores.out.rawvideo
-stddev:    2.47 PSNR: 40.27 MAXDIFF:   31 bytes:  7603200/  7603200
+58d0065f5a67a7fa70e7443ac82c336d *tests/data/fate/vsynth1-prores.mov
+10690091 tests/data/fate/vsynth1-prores.mov
+b059fbb85caccfb6e5ad7fe402e2539b *tests/data/fate/vsynth1-prores.out.rawvideo
+stddev:    1.88 PSNR: 42.64 MAXDIFF:   29 bytes:  7603200/  7603200
diff --git a/tests/ref/vsynth/vsynth2-prores b/tests/ref/vsynth/vsynth2-prores
index a1b4bb7..6e9a397 100644
--- a/tests/ref/vsynth/vsynth2-prores
+++ b/tests/ref/vsynth/vsynth2-prores
@@ -1,4 +1,4 @@ 
-aa57fd1221b7eefaf1f34f9d57d6a7cb *tests/data/fate/vsynth2-prores.mov
-3265056 tests/data/fate/vsynth2-prores.mov
-537b0ff66d7c8c3c12faa89d042e6a49 *tests/data/fate/vsynth2-prores.out.rawvideo
-stddev:    1.38 PSNR: 45.29 MAXDIFF:   12 bytes:  7603200/  7603200
+4240da05dc68221a36071cbe3a846877 *tests/data/fate/vsynth2-prores.mov
+8463884 tests/data/fate/vsynth2-prores.mov
+0ed1c1b659beb23928388a34a988786b *tests/data/fate/vsynth2-prores.out.rawvideo
+stddev:    0.47 PSNR: 54.57 MAXDIFF:    9 bytes:  7603200/  7603200
diff --git a/tests/ref/vsynth/vsynth3-prores b/tests/ref/vsynth/vsynth3-prores
index f63a7a7..f772805 100644
--- a/tests/ref/vsynth/vsynth3-prores
+++ b/tests/ref/vsynth/vsynth3-prores
@@ -1,4 +1,4 @@ 
-b060c59be88b4b089ece5ee8dc4f1c58 *tests/data/fate/vsynth3-prores.mov
-105367 tests/data/fate/vsynth3-prores.mov
-fff5e7ad21d78501c8fa4749bf4bf289 *tests/data/fate/vsynth3-prores.out.rawvideo
-stddev:    2.80 PSNR: 39.17 MAXDIFF:   27 bytes:    86700/    86700
+5919b3ca66dd7b5f37fd30e82e033fad *tests/data/fate/vsynth3-prores.mov
+196893 tests/data/fate/vsynth3-prores.mov
+81df91f1f0fd6693ff89c7743df631ea *tests/data/fate/vsynth3-prores.out.rawvideo
+stddev:    2.15 PSNR: 41.46 MAXDIFF:   26 bytes:    86700/    86700