[x265] [PATCH] api: add options max-luma and min-luma to set luma range of source pictures
Deepthi Nandakumar
deepthi at multicorewareinc.com
Wed Aug 12 05:38:46 CEST 2015
Kavitha,
This was pushed, but copyFromPicture has a couple of issues.
The clipping is applied only on x-padding component. As is apparent, the
number of pixels here is just padx, not m_stride.
The clipping needs to be performed on the main picture itself, as well as
pady.
On Mon, Aug 10, 2015 at 1:14 PM, <kavitha at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Kavitha Sampath <kavitha at multicorewareinc.com>
> # Date 1439192580 -19800
> # Mon Aug 10 13:13:00 2015 +0530
> # Node ID 2fca8a3399e4760a915c9952d3ac9f7143c0d364
> # Parent cbdefdfca87723342d21d90c41a93254553ed3d1
> api: add options max-luma and min-luma to set luma range of source pictures
>
> diff -r cbdefdfca877 -r 2fca8a3399e4 doc/reST/cli.rst
> --- a/doc/reST/cli.rst Thu Aug 06 14:23:43 2015 +0530
> +++ b/doc/reST/cli.rst Mon Aug 10 13:13:00 2015 +0530
> @@ -1638,6 +1638,16 @@
> Note that this string value will need to be escaped or quoted to
> protect against shell expansion on many platforms. No default.
>
> +.. option:: --min-luma <integer>
> +
> + Increase any luma values of source picture that are below the
> specified
> + min-luma value to that value. No default.
> +
> +.. option:: --max-luma <integer>
> +
> + Decrease any luma values of source picture that are above the
> specified
> + max-luma value to that value. No default.
> +
> Bitstream options
> =================
>
> diff -r cbdefdfca877 -r 2fca8a3399e4 source/CMakeLists.txt
> --- a/source/CMakeLists.txt Thu Aug 06 14:23:43 2015 +0530
> +++ b/source/CMakeLists.txt Mon Aug 10 13:13:00 2015 +0530
> @@ -30,7 +30,7 @@
> mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD)
>
> # X265_BUILD must be incremented each time the public API is changed
> -set(X265_BUILD 68)
> +set(X265_BUILD 70)
> configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
> "${PROJECT_BINARY_DIR}/x265.def")
> configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
> diff -r cbdefdfca877 -r 2fca8a3399e4 source/common/param.cpp
> --- a/source/common/param.cpp Thu Aug 06 14:23:43 2015 +0530
> +++ b/source/common/param.cpp Mon Aug 10 13:13:00 2015 +0530
> @@ -241,6 +241,8 @@
> param->vui.defDispWinRightOffset = 0;
> param->vui.defDispWinTopOffset = 0;
> param->vui.defDispWinBottomOffset = 0;
> + param->minLuma = 0;
> + param->maxLuma = (1 << X265_DEPTH) - 1;
> }
>
> int x265_param_default_preset(x265_param* param, const char* preset,
> const char* tune)
> @@ -855,6 +857,8 @@
> OPT("qg-size") p->rc.qgSize = atoi(value);
> OPT("master-display") p->masteringDisplayColorVolume = strdup(value);
> OPT("max-cll") p->contentLightLevelInfo = strdup(value);
> + OPT("min-luma") p->minLuma = (uint16_t)atoi(value);
> + OPT("max-luma") p->maxLuma = (uint16_t)atoi(value);
> else
> return X265_PARAM_BAD_NAME;
> #undef OPT
> diff -r cbdefdfca877 -r 2fca8a3399e4 source/common/picyuv.cpp
> --- a/source/common/picyuv.cpp Thu Aug 06 14:23:43 2015 +0530
> +++ b/source/common/picyuv.cpp Mon Aug 10 13:13:00 2015 +0530
> @@ -121,7 +121,7 @@
>
> /* Copy pixels from an x265_picture into internal PicYuv instance.
> * Shift pixels as necessary, mask off bits above X265_DEPTH for safety.
> */
> -void PicYuv::copyFromPicture(const x265_picture& pic, int padx, int pady)
> +void PicYuv::copyFromPicture(const x265_picture& pic, const x265_param&
> param, int padx, int pady)
> {
> /* m_picWidth is the width that is being encoded, padx indicates how
> many
> * of those pixels are padding to reach multiple of MinCU(4) size.
> @@ -237,6 +237,10 @@
>
> for (int r = 0; r < height; r++)
> {
> + /* Clip luma of source picture to max and min values before
> extending edges of picYuv */
> + for (int c = 0; c < m_stride; c++)
> + Y[c] = x265_clip3((pixel)param.minLuma,
> (pixel)param.maxLuma, Y[c]);
> +
> for (int x = 0; x < padx; x++)
> Y[width + x] = Y[width - 1];
>
> diff -r cbdefdfca877 -r 2fca8a3399e4 source/common/picyuv.h
> --- a/source/common/picyuv.h Thu Aug 06 14:23:43 2015 +0530
> +++ b/source/common/picyuv.h Mon Aug 10 13:13:00 2015 +0530
> @@ -66,7 +66,7 @@
> bool createOffsets(const SPS& sps);
> void destroy();
>
> - void copyFromPicture(const x265_picture&, int padx, int pady);
> + void copyFromPicture(const x265_picture&, const x265_param& param,
> int padx, int pady);
>
> intptr_t getChromaAddrOffset(uint32_t ctuAddr, uint32_t absPartIdx)
> const { return m_cuOffsetC[ctuAddr] + m_buOffsetC[absPartIdx]; }
>
> diff -r cbdefdfca877 -r 2fca8a3399e4 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp Thu Aug 06 14:23:43 2015 +0530
> +++ b/source/encoder/encoder.cpp Mon Aug 10 13:13:00 2015 +0530
> @@ -458,7 +458,7 @@
> }
>
> /* Copy input picture into a Frame and PicYuv, send to lookahead
> */
> - inFrame->m_fencPic->copyFromPicture(*pic_in,
> m_sps.conformanceWindow.rightOffset, m_sps.conformanceWindow.bottomOffset);
> + inFrame->m_fencPic->copyFromPicture(*pic_in, *m_param,
> m_sps.conformanceWindow.rightOffset, m_sps.conformanceWindow.bottomOffset);
>
> inFrame->m_poc = ++m_pocLast;
> inFrame->m_userData = pic_in->userData;
> diff -r cbdefdfca877 -r 2fca8a3399e4 source/x265.h
> --- a/source/x265.h Thu Aug 06 14:23:43 2015 +0530
> +++ b/source/x265.h Mon Aug 10 13:13:00 2015 +0530
> @@ -1172,6 +1172,16 @@
> * picture average light level (or 0). */
> const char* contentLightLevelInfo;
>
> + /* Minimum luma level of input source picture, specified as a integer
> which
> + * would automatically increase any luma values below the specified
> --min-luma
> + * value to that value. */
> + uint16_t minLuma;
> +
> + /* Maximum luma level of input source picture, specified as a integer
> which
> + * would automatically decrease any luma values above the specified
> --max-luma
> + * value to that value. */
> + uint16_t maxLuma;
> +
> } x265_param;
>
> /* x265_param_alloc:
> diff -r cbdefdfca877 -r 2fca8a3399e4 source/x265cli.h
> --- a/source/x265cli.h Thu Aug 06 14:23:43 2015 +0530
> +++ b/source/x265cli.h Mon Aug 10 13:13:00 2015 +0530
> @@ -192,6 +192,8 @@
> { "crop-rect", required_argument, NULL, 0 }, /* DEPRECATED */
> { "master-display", required_argument, NULL, 0 },
> { "max-cll", required_argument, NULL, 0 },
> + { "min-luma", required_argument, NULL, 0 },
> + { "max-luma", required_argument, NULL, 0 },
> { "no-dither", no_argument, NULL, 0 },
> { "dither", no_argument, NULL, 0 },
> { "no-repeat-headers", no_argument, NULL, 0 },
> @@ -403,6 +405,8 @@
> H0(" --master-display <string> SMPTE ST 2086 master display
> color volume info SEI (HDR)\n");
> H0(" format:
> G(x,y)B(x,y)R(x,y)WP(x,y)L(max,min)\n");
> H0(" --max-cll <string> Emit content light level info
> SEI as \"cll,fall\" (HDR)\n");
> + H0(" --min-luma <integer> Minimum luma plane value of
> input source picture\n");
> + H0(" --max-luma <integer> Maximum luma plane value of
> input source picture\n");
> H0("\nBitstream options:\n");
> H0(" --[no-]repeat-headers Emit SPS and PPS headers at each
> keyframe. Default %s\n", OPT(param->bRepeatHeaders));
> H0(" --[no-]info Emit SEI identifying encoder and
> parameters. Default %s\n", OPT(param->bEmitInfoSEI));
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20150812/37465b6b/attachment-0001.html>
More information about the x265-devel
mailing list