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. */
} 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
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;