[x265] [PATCH] api: 'x265_get_slicetype_poc_and_scenecut' to fetch slicetype, poc and scenecut information

Pradeep Ramachandran pradeep at multicorewareinc.com
Mon Nov 6 05:51:25 CET 2017


On Fri, Nov 3, 2017 at 4:19 PM, <praveen at multicorewareinc.com> wrote:

> # HG changeset patch
> # User Praveen Tiwari <praveen at multicorewareinc.com>
> # Date 1509438457 -19800
> #      Tue Oct 31 13:57:37 2017 +0530
> # Node ID de91aae2db5353e4e548d002e2dce530a6c8078d
> # Parent  6a310b24c6a2d831ef08bbda1bdcf9d929daa308
> api: 'x265_get_slicetype_poc_and_scenecut' to fetch slicetype, poc and
> scenecut information
>

Pushed to default branch. Thanks!


>
> diff -r 6a310b24c6a2 -r de91aae2db53 doc/reST/api.rst
> --- a/doc/reST/api.rst  Thu Nov 02 12:17:29 2017 +0530
> +++ b/doc/reST/api.rst  Tue Oct 31 13:57:37 2017 +0530
> @@ -192,6 +192,15 @@
>          *      presets is not recommended without a more fine-grained
> breakdown of
>          *      parameters to take this into account. */
>         int x265_encoder_reconfig(x265_encoder *, x265_param *);
> +
> +**x265_get_slicetype_poc_and_scenecut()** may be used to fetch slice
> type, poc and scene cut information mid-encode::
> +
> +    /* x265_get_slicetype_poc_and_scenecut:
> +     *     get the slice type, poc and scene cut information for the
> current frame,
> +     *     returns negative on error, 0 on success.
> +     *     This API must be called after(poc >= lookaheadDepth + bframes
> + 2) condition check. */
> +     int x265_get_slicetype_poc_and_scenecut(x265_encoder *encoder, int
> *slicetype, int *poc, int* sceneCut);
> +
>  **x265_encoder_ctu_info**
>         /* x265_encoder_ctu_info:
>          *    Copy CTU information such as ctu address and ctu partition
> structure of all
> diff -r 6a310b24c6a2 -r de91aae2db53 source/CMakeLists.txt
> --- a/source/CMakeLists.txt     Thu Nov 02 12:17:29 2017 +0530
> +++ b/source/CMakeLists.txt     Tue Oct 31 13:57:37 2017 +0530
> @@ -29,7 +29,7 @@
>  option(STATIC_LINK_CRT "Statically link C runtime for release builds" OFF)
>  mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD)
>  # X265_BUILD must be incremented each time the public API is changed
> -set(X265_BUILD 136)
> +set(X265_BUILD 137)
>  configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
>                 "${PROJECT_BINARY_DIR}/x265.def")
>  configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
> diff -r 6a310b24c6a2 -r de91aae2db53 source/common/piclist.cpp
> --- a/source/common/piclist.cpp Thu Nov 02 12:17:29 2017 +0530
> +++ b/source/common/piclist.cpp Tue Oct 31 13:57:37 2017 +0530
> @@ -117,6 +117,15 @@
>          return NULL;
>  }
>
> +Frame* PicList::getCurFrame(void)
> +{
> +    Frame *curFrame = m_start;
> +    if (curFrame != NULL)
> +        return curFrame;
> +    else
> +        return NULL;
> +}
> +
>  void PicList::remove(Frame& curFrame)
>  {
>  #if _DEBUG
> diff -r 6a310b24c6a2 -r de91aae2db53 source/common/piclist.h
> --- a/source/common/piclist.h   Thu Nov 02 12:17:29 2017 +0530
> +++ b/source/common/piclist.h   Tue Oct 31 13:57:37 2017 +0530
> @@ -62,6 +62,9 @@
>      /** Find frame with specified POC */
>      Frame* getPOC(int poc);
>
> +    /** Get the current Frame from the list **/
> +    Frame* getCurFrame(void);
> +
>      /** Remove picture from list */
>      void remove(Frame& pic);
>
> diff -r 6a310b24c6a2 -r de91aae2db53 source/encoder/api.cpp
> --- a/source/encoder/api.cpp    Thu Nov 02 12:17:29 2017 +0530
> +++ b/source/encoder/api.cpp    Tue Oct 31 13:57:37 2017 +0530
> @@ -340,6 +340,16 @@
>      return 0;
>  }
>
> +int x265_get_slicetype_poc_and_scenecut(x265_encoder *enc, int
> *slicetype, int *poc, int *sceneCut)
> +{
> +    if (!enc)
> +        return -1;
> +    Encoder *encoder = static_cast<Encoder*>(enc);
> +    if (!encoder->copySlicetypePocAndSceneCut(slicetype, poc, sceneCut))
> +        return 0;
> +    return -1;
> +}
> +
>  void x265_cleanup(void)
>  {
>      BitCost::destroy();
> @@ -413,6 +423,7 @@
>      sizeof(x265_frame_stats),
>      &x265_encoder_intra_refresh,
>      &x265_encoder_ctu_info,
> +    &x265_get_slicetype_poc_and_scenecut,
>  };
>
>  typedef const x265_api* (*api_get_func)(int bitDepth);
> diff -r 6a310b24c6a2 -r de91aae2db53 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp        Thu Nov 02 12:17:29 2017 +0530
> +++ b/source/encoder/encoder.cpp        Tue Oct 31 13:57:37 2017 +0530
> @@ -429,6 +429,23 @@
>      }
>  }
>
> +int Encoder::copySlicetypePocAndSceneCut(int *slicetype, int *poc, int
> *sceneCut)
> +{
> +    Frame *FramePtr = m_dpb->m_picList.getCurFrame();
> +    if (FramePtr != NULL)
> +    {
> +        *slicetype = FramePtr->m_lowres.sliceType;
> +        *poc = FramePtr->m_encData->m_slice->m_poc;
> +        *sceneCut = FramePtr->m_lowres.bScenecut;
> +    }
> +    else
> +    {
> +        x265_log(NULL, X265_LOG_WARNING, "Frame is still in lookahead
> pipeline, this API must be called after (poc >= lookaheadDepth + bframes +
> 2) condition check\n");
> +        return -1;
> +    }
> +    return 0;
> +}
> +
>  void Encoder::destroy()
>  {
>  #if ENABLE_HDR10_PLUS
> diff -r 6a310b24c6a2 -r de91aae2db53 source/encoder/encoder.h
> --- a/source/encoder/encoder.h  Thu Nov 02 12:17:29 2017 +0530
> +++ b/source/encoder/encoder.h  Tue Oct 31 13:57:37 2017 +0530
> @@ -205,6 +205,8 @@
>
>      void copyCtuInfo(x265_ctu_info_t** frameCtuInfo, int poc);
>
> +    int copySlicetypePocAndSceneCut(int *slicetype, int *poc, int
> *sceneCut);
> +
>      void getStreamHeaders(NALList& list, Entropy& sbacCoder, Bitstream&
> bs);
>
>      void fetchStats(x265_stats* stats, size_t statsSizeBytes);
> diff -r 6a310b24c6a2 -r de91aae2db53 source/x265.h
> --- a/source/x265.h     Thu Nov 02 12:17:29 2017 +0530
> +++ b/source/x265.h     Tue Oct 31 13:57:37 2017 +0530
> @@ -1705,6 +1705,13 @@
>  int x265_encoder_ctu_info(x265_encoder *, int poc, x265_ctu_info_t**
> ctu);
>  /* x265_cleanup:
>   *       release library static allocations, reset configured CTU size */
> +
> +/* x265_get_slicetype_poc_and_scenecut:
> + *     get the slice type, poc and scene cut information for the current
> frame,
> + *     returns negative on error, 0 when access unit were output.
> + *     This API must be called after(poc >= lookaheadDepth + bframes + 2)
> condition check */
> +int x265_get_slicetype_poc_and_scenecut(x265_encoder *encoder, int
> *slicetype, int *poc, int* sceneCut);
> +
>  void x265_cleanup(void);
>
>  #define X265_MAJOR_VERSION 1
> @@ -1752,6 +1759,7 @@
>      int           sizeof_frame_stats;   /* sizeof(x265_frame_stats) */
>      int           (*encoder_intra_refresh)(x265_encoder*);
>      int           (*encoder_ctu_info)(x265_encoder*, int,
> x265_ctu_info_t**);
> +    int           (*x265_get_slicetype_poc_and_scenecut)(x265_encoder*,
> int*, int*, int*);
>      /* add new pointers to the end, or increment X265_MAJOR_VERSION */
>  } x265_api;
>
> _______________________________________________
> 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/20171106/4f9ea7da/attachment.html>


More information about the x265-devel mailing list