S.khan S.khan - 17 days ago 16
C++ Question

In Hevc reference software HM 16.9 I need help for generating details of CUs, PUs and TUs

For a test sequence I want to get the following information:

  1. Where in the reference code and how can i get the CU depth information.

  2. Where and how can I get the PU sizes and modes for a specific CTU.

  3. Where and how can I get the Motion vector in formation for PUs.

  4. Where and how can I get the reference frame information of the PUs and their location in reference frame?

  5. Where and how can I get the information about the SKIP and Merge modes being used?

  6. Where and how can I get the information about the RD cost for PUs?

I want the information for statistical analysis so all the information above should be after all the decisions of CTU are made.

First part is for obtaining a data on which I can do some analysis. After that I need to know how to make the software use my calculated values for different parameters. That is the first part of my question.

Second part of my question is where in the reference software code we can modify the above parameters?

e.g. I want to set depth of 2 for a certain CTU, how can I achieve that?
or I want to force SKIP mode for a certain PU, how can I do that?
or I want to force the software to use 2Nx2N for a certain PU, how can I do that in the software?


First, all decisions for a CTU are made when m_pcCuEncoder->compressCtu( pCtu ); is called in TEncSlice.cpp

pCtu is of type TComDataCU, so if you have a look at TComDataCU.h, you can see all the information that is contained in the object (depth, partition size, prediction mode, information about motion vectors, etc.)

To access this information, you have the functions getDepth(), getPartitionSize(), getPredictionMode(), getMvField and so on.

Concerning the second part of your question, where to modify the above parameters depends on what you want to achieve. For example, if you modify the depth of your CTU before m_pcCuEncoder->compressCtu( pCtu ); is ran, the values you have changed will be overwritten by this function...