diff options
author | Wang, Chengwei C <chengwei.c.wang@intel.com> | 2018-09-04 11:53:15 +0800 |
---|---|---|
committer | XinfengZhang <carl.zhang@intel.com> | 2018-09-20 15:13:28 +0800 |
commit | 250b3dc8f370bc6d85be767c9722fd98e8b02ebb (patch) | |
tree | 3e63adcd626a06c66a7e23b359f397ed659545ae | |
parent | 9c511355abea4330e3eaba603f2b2964396bc355 (diff) | |
download | libva-250b3dc8f370bc6d85be767c9722fd98e8b02ebb.tar.gz |
Add max frame size parameters for multiple pass case in legacy mode
Add new data structure and parameter buffer type for max frame size parameters in multiple pass case.
Signed-off-by: Wang, Chengwei C <chengwei.c.wang@intel.com>
-rw-r--r-- | va/va.h | 27 | ||||
-rw-r--r-- | va/va_trace.c | 12 |
2 files changed, 39 insertions, 0 deletions
@@ -1748,6 +1748,8 @@ typedef enum VAEncMiscParameterTypeSkipFrame = 9, /** \brief Buffer type used for region-of-interest (ROI) parameters. */ VAEncMiscParameterTypeROI = 10, + /** \brief Buffer type used to express a maximum frame size (in bytes) settings for multiple pass. */ + VAEncMiscParameterTypeMultiPassFrameSize = 11, /** \brief Buffer type used for temporal layer structure */ VAEncMiscParameterTypeTemporalLayerStructure = 12, /** \brief Buffer type used for dirty region-of-interest (ROI) parameters. */ @@ -2116,6 +2118,31 @@ typedef struct _VAEncMiscParameterBufferMaxFrameSize { } VAEncMiscParameterBufferMaxFrameSize; /** + * \brief Maximum frame size (in bytes) settings for multiple pass. + * + * This misc parameter buffer defines the maximum size of a frame (in + * bytes) settings for multiple pass. currently only AVC encoder can + * support this settings in multiple pass case. If the frame size exceeds + * this size, the encoder will do more pak passes to adjust the QP value + * to control the frame size. + */ +typedef struct _VAEncMiscParameterBufferMultiPassFrameSize { + /** \brief Type. Shall be set to #VAEncMiscParameterTypeMultiPassMaxFrameSize. */ + VAEncMiscParameterType type; + /** \brief Maximum size of a frame (in byte) */ + uint32_t max_frame_size; + /** \brief Reserved bytes for future use, must be zero */ + uint32_t reserved; + /** \brief number of passes, every pass has different QP, currently AVC encoder can support up to 4 passes */ + uint8_t num_passes; + /** \brief delta QP list for every pass */ + uint8_t *delta_qp; + + /** \brief Reserved bytes for future use, must be zero */ + unsigned long va_reserved[VA_PADDING_LOW]; +} VAEncMiscParameterBufferMultiPassFrameSize; + +/** * \brief Encoding quality level. * * The encoding quality could be set through this structure, if the implementation diff --git a/va/va_trace.c b/va/va_trace.c index f0523ea..7c27b73 100644 --- a/va/va_trace.c +++ b/va/va_trace.c @@ -3241,6 +3241,18 @@ static void va_TraceVAEncMiscParameterBuffer( va_TraceMsg(trace_ctx, "\tmax_frame_size = %d\n", p->max_frame_size); break; } + case VAEncMiscParameterTypeMultiPassFrameSize: + { + int i; + VAEncMiscParameterBufferMultiPassFrameSize *p = (VAEncMiscParameterBufferMultiPassFrameSize *)tmp->data; + + va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterTypeMultiPassFrameSize\n"); + va_TraceMsg(trace_ctx, "\tmax_frame_size = %d\n", p->max_frame_size); + va_TraceMsg(trace_ctx, "\tnum_passes = %d\n", p->num_passes); + for(i = 0; i<p->num_passes; ++i) + va_TraceMsg(trace_ctx, "\tdelta_qp[%d] = %d\n", i, p->delta_qp[i]); + break; + } case VAEncMiscParameterTypeQualityLevel: { VAEncMiscParameterBufferQualityLevel *p = (VAEncMiscParameterBufferQualityLevel *)tmp->data; |