summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWang, Chengwei C <chengwei.c.wang@intel.com>2018-09-04 11:53:15 +0800
committerXinfengZhang <carl.zhang@intel.com>2018-09-20 15:13:28 +0800
commit250b3dc8f370bc6d85be767c9722fd98e8b02ebb (patch)
tree3e63adcd626a06c66a7e23b359f397ed659545ae
parent9c511355abea4330e3eaba603f2b2964396bc355 (diff)
downloadlibva-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.h27
-rw-r--r--va/va_trace.c12
2 files changed, 39 insertions, 0 deletions
diff --git a/va/va.h b/va/va.h
index 0f7431a..217d60c 100644
--- a/va/va.h
+++ b/va/va.h
@@ -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;