[FFmpeg-devel] [PATCH] lavc/videotoolboxenc: add hdr10, linear, hlg color transfer function for videotoolboxenc
Rick Kern
kernrj at gmail.com
Wed Jul 17 04:36:32 EEST 2019
On Wed, Jul 10, 2019 at 5:29 AM Dennis Mungai <dmngaie at gmail.com> wrote:
> On Wed, Jul 10, 2019, 11:06 Hendrik Leppkes <h.leppkes at gmail.com> wrote:
>
> > On Wed, Jul 10, 2019 at 4:23 AM Dennis Mungai <dmngaie at gmail.com> wrote:
> > >
> > > On Wed, Jul 10, 2019, 03:05 Aman Gupta <ffmpeg at tmm1.net> wrote:
> > >
> > > > On Wed, Jun 26, 2019 at 4:25 AM <lance.lmwang at gmail.com> wrote:
> > > >
> > > > > From: Limin Wang <lance.lmwang at gmail.com>
> > > > >
> > > > > Below is the testing ffmpeg command for the setting:
> > > > > ./ffmpeg -i input.ts -c:v hevc_videotoolbox -color_primaries bt2020
> > > > > -colorspace bt2020_ncl -color_trc smpte2084 smpte2048.ts
> > > > > ./ffmpeg -i input.ts -c:v hevc_videotoolbox -color_primaries bt2020
> > > > > -colorspace bt2020_ncl -color_trc linear linear.ts
> > > > > ./ffmpeg -i input.ts -c:v hevc_videotoolbox -color_primaries bt2020
> > > > > -colorspace bt2020_ncl -color_trc arib-std-b67 hlg.ts
> > > > >
> > > >
> > > > Patch looks reasonable to me. Will commit in a few days if no one
> else
> > > > comments.
> > > >
> > > > Aman
> > > >
> > > >
> > > > >
> > > > > Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> > > > > ---
> > > > > configure | 6 ++++++
> > > > > libavcodec/videotoolboxenc.c | 16 ++++++++++++++++
> > > > > 2 files changed, 22 insertions(+)
> > > > >
> > > > > diff --git a/configure b/configure
> > > > > index 7cea9d4d73..0a5e940c0c 100755
> > > > > --- a/configure
> > > > > +++ b/configure
> > > > > @@ -2260,6 +2260,9 @@ TOOLCHAIN_FEATURES="
> > > > > TYPES_LIST="
> > > > > kCMVideoCodecType_HEVC
> > > > > kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange
> > > > > + kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ
> > > > > + kCVImageBufferTransferFunction_ITU_R_2100_HLG
> > > > > + kCVImageBufferTransferFunction_Linear
> > > > > socklen_t
> > > > > struct_addrinfo
> > > > > struct_group_source_req
> > > > > @@ -6044,6 +6047,9 @@ enabled videotoolbox && {
> > > > > check_lib coreservices CoreServices/CoreServices.h
> > > > > UTGetOSTypeFromString "-framework CoreServices"
> > > > > check_func_headers CoreMedia/CMFormatDescription.h
> > > > > kCMVideoCodecType_HEVC "-framework CoreMedia"
> > > > > check_func_headers CoreVideo/CVPixelBuffer.h
> > > > > kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange "-framework
> > CoreVideo"
> > > > > + check_func_headers CoreVideo/CVImageBuffer.h
> > > > > kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ "-framework
> > CoreVideo"
> > > > > + check_func_headers CoreVideo/CVImageBuffer.h
> > > > > kCVImageBufferTransferFunction_ITU_R_2100_HLG "-framework
> CoreVideo"
> > > > > + check_func_headers CoreVideo/CVImageBuffer.h
> > > > > kCVImageBufferTransferFunction_Linear "-framework CoreVideo"
> > > > > }
> > > > >
> > > > > check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
> > > > > diff --git a/libavcodec/videotoolboxenc.c
> > b/libavcodec/videotoolboxenc.c
> > > > > index f8ccdea52d..0dc6eb4cf4 100644
> > > > > --- a/libavcodec/videotoolboxenc.c
> > > > > +++ b/libavcodec/videotoolboxenc.c
> > > > > @@ -915,6 +915,22 @@ static int
> > get_cv_transfer_function(AVCodecContext
> > > > > *avctx,
> > > > > *transfer_fnc =
> > > > > kCVImageBufferTransferFunction_SMPTE_240M_1995;
> > > > > break;
> > > > >
> > > > > +#if HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ
> > > > > + case AVCOL_TRC_SMPTE2084:
> > > > > + *transfer_fnc =
> > > > > kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ;
> > > > > + break;
> > > > > +#endif
> > > > > +#if HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR
> > > > > + case AVCOL_TRC_LINEAR:
> > > > > + *transfer_fnc = kCVImageBufferTransferFunction_Linear;
> > > > > + break;
> > > > > +#endif
> > > > > +#if HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG
> > > > > + case AVCOL_TRC_ARIB_STD_B67:
> > > > > + *transfer_fnc =
> > > > kCVImageBufferTransferFunction_ITU_R_2100_HLG;
> > > > > + break;
> > > > > +#endif
> > > > > +
> > > > > case AVCOL_TRC_GAMMA22:
> > > > > gamma = 2.2;
> > > > > *transfer_fnc =
> kCVImageBufferTransferFunction_UseGamma;
> > > > > --
> > > > > 2.21.0
> > > > >
> > > > > _______________________________________________
> > > > > ffmpeg-devel mailing list
> > > > > ffmpeg-devel at ffmpeg.org
> > > > > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> > > > >
> > > > > To unsubscribe, visit link above, or email
> > > > > ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> > > >
> > >
> > > A while back, a similar patch was rejected for NVENC (from the same
> > author)
> > > on the basis of such functionality not being suitably placed as an
> > encoder
> > > feature.
> > >
> > > Looking back at other implementations, eg hevc_vaapi, the same is
> indeed
> > > allowed, where SEI metadata retention for HDR is present.
> > >
> > > To the OP: If the patch for NVENC were refactored in a manner similar
> to
> > > this, abstracting details such as master display info for HDR
> (something
> > > that was specifically flagged as not suitable as an encoder feature),
> it
> > > might pass the patch review and be merged.
> > >
> > > Are there specific limitations (as implemented) that block such a
> feature
> > > in NVENC? Perhaps the initial patch with mastering display controls for
> > HDR
> > > was written that way to circumvent such a limitation.
> > >
> >
> > I think you are confusing the type of patches here. This does nothing
> > but extend existing functionality to forward a few more values in
> > basically an enum that was already being set.
> > The other patch was about parsing user inputs and generating SEI data,
> > which should arguably be done in a central place instead of every
> > encoder individually.
> >
> > - Hendrik
> >
>
> Thanks for the clarification.
>
Testing for the new transfer functions when compiling for OSX 10.12 reports
the color settings as "yuv420p(tv, bt2020nc/bt2020/reserved)" in ffprobe.
Is "reserved" (0) the expected default when the transfer function isn't
supported?
>
> >
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list