summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Bian <jonathan.bian@intel.com>2013-04-10 16:26:37 -0700
committerXiang, Haihao <haihao.xiang@intel.com>2014-07-18 20:03:49 +0800
commit30791753da9d968cb8a68914db71467ee543384d (patch)
tree5b4e62e29f0a0aff9724806a8addc7187cd54702
parentc61d8c6ce9ffc27320e9e177c1e1123d5f1b5014 (diff)
Added support for VP8 encoding.
(cherry picked from commit d46a07340a641770487e7624bebc49f3258ea2ec) Conflicts: va/Android.mk
-rwxr-xr-xva/Android.mk1
-rw-r--r--va/Makefile.am1
-rw-r--r--va/va.h1
-rw-r--r--va/va_enc_vp8.h318
4 files changed, 321 insertions, 0 deletions
diff --git a/va/Android.mk b/va/Android.mk
index 88f1e80..eac34eb 100755
--- a/va/Android.mk
+++ b/va/Android.mk
@@ -64,6 +64,7 @@ LOCAL_COPY_HEADERS := \
va_backend.h \
va_dec_jpeg.h \
va_drmcommon.h \
+ va_enc_vp8.h \
va_version.h
LOCAL_COPY_HEADERS_TO := libva/va
diff --git a/va/Makefile.am b/va/Makefile.am
index 20e2f97..05c62a7 100644
--- a/va/Makefile.am
+++ b/va/Makefile.am
@@ -46,6 +46,7 @@ libva_source_h = \
va_dec_vp8.h \
va_drmcommon.h \
va_enc_h264.h \
+ va_enc_vp8.h \
va_enc_mpeg2.h \
va_tpi.h \
va_version.h \
diff --git a/va/va.h b/va/va.h
index 4e35b06..c82cbdb 100644
--- a/va/va.h
+++ b/va/va.h
@@ -886,6 +886,7 @@ typedef enum
VAEncPackedHeaderDataBufferType = 26,
VAEncMiscParameterBufferType = 27,
VAEncMacroblockParameterBufferType = 28,
+ VAEncMacroblockMapBufferType = 29,
/* Following are video processing buffer types */
/**
* \brief Video processing pipeline parameter buffer.
diff --git a/va/va_enc_vp8.h b/va/va_enc_vp8.h
new file mode 100644
index 0000000..31dfe3e
--- /dev/null
+++ b/va/va_enc_vp8.h
@@ -0,0 +1,318 @@
+/*
+ * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file va_enc_vp8.h
+ * \brief VP8 encoding API
+ *
+ * This file contains the \ref api_enc_vp8 "VP8 encoding API".
+ */
+
+#ifndef VA_ENC_VP8_H
+#define VA_ENC_VP8_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup api_enc_vp8 VP8 encoding API
+ *
+ * @{
+ */
+
+/**
+ * \brief VP8 Encoding Sequence Parameter Buffer Structure
+ *
+ * This structure conveys sequence level parameters.
+ *
+ */
+typedef struct _VAEncSequenceParameterBufferVP8
+{
+ /* frame width in pixels */
+ unsigned int frame_width;
+ /* frame height in pixels */
+ unsigned int frame_height;
+ /* frame rate */
+ unsigned int frame_rate;
+ /* whether to enable error resilience features */
+ unsigned int error_resilient;
+ /* auto keyframe placement, non-zero means enable auto keyframe placement */
+ unsigned int kf_auto;
+ /* keyframe minimum interval */
+ unsigned int kf_min_dist;
+ /* keyframe maximum interval */
+ unsigned int kf_max_dist;
+
+
+ /* RC related fields. RC modes are set with VAConfigAttribRateControl */
+ /* For VP8, CBR implies HRD conformance and VBR implies no HRD conformance */
+
+ /* target bit-rate */
+ unsigned int bits_per_second;
+ /* min QP */
+ unsigned int min_qp;
+ /* max QP */
+ unsigned int max_qp;
+ /* RC undershoot percentage */
+ unsigned int rc_undershoot;
+ /* RC overshoot percentage */
+ unsigned int rc_overshoot;
+ /* HRD buffer size */
+ unsigned int hrd_buf_size;
+ /* HRD buffer initial fullness */
+ unsigned int hrd_buf_initial_fullness;
+ /* HRD buffer optimal fullness */
+ unsigned int hrd_buf_optimal_fullness;
+
+ /* up to 3 modes are honored, quality (1), normal (2) and performance (3) */
+ unsigned char target_usage;
+ /* only valid for avbr mode */
+ unsigned int user_max_frame_size;
+ /**
+ * min number of frames for bit rate to converge.
+ * value should be >= 100. used for avbr mode
+ */
+ unsigned int avbr_convergence;
+
+ /* reference and reconstructed frame buffers*/
+ VASurfaceID reference_frames[4];
+
+} VAEncSequenceParameterBufferVP8;
+
+
+/**
+ * \brief VP8 Encoding Picture Parameter Buffer Structure
+ *
+ * This structure conveys picture level parameters.
+ *
+ */
+typedef struct _VAEncPictureParameterBufferVP8
+{
+ /* surface to store reconstructed frame */
+ VASurfaceID reconstructed_frame;
+
+ /* buffer to store coded data */
+ VABufferID coded_buf;
+
+ union {
+ struct {
+ /* force this frame to be a keyframe */
+ unsigned int force_kf : 1;
+ /* don't reference the last frame */
+ unsigned int no_ref_last : 1;
+ /* don't reference the golden frame */
+ unsigned int no_ref_gf : 1;
+ /* don't reference the alternate reference frame */
+ unsigned int no_ref_arf : 1;
+ /* 0: bicubic, 1: bilinear, other: none */
+ unsigned int recon_filter_type : 2;
+ /* 0: no loop fitler, 1: simple loop filter */
+ unsigned int loop_filter_type : 2;
+ /* 0: disabled, 1: normal, 2: simple */
+ unsigned int auto_partitions : 1;
+ /* number of token partitions */
+ unsigned int num_token_partitions : 2;
+
+ /**
+ * The following fields correspond to the same VP8 syntax elements
+ * in the frame header.
+ */
+ /**
+ * 0: clamping of reconstruction pixels is disabled,
+ * 1: clamping enabled.
+ */
+ unsigned int clamping_type : 1;
+ /* indicate segmentation is enabled for the current frame. */
+ unsigned int segmentation_enabled : 1;
+ /**
+ * Determines if the MB segmentation map is updated in the current
+ * frame.
+ */
+ unsigned int update_mb_segmentation_map : 1;
+ /**
+ * Indicates if the segment feature data is updated in the current
+ * frame.
+ */
+ unsigned int update_segment_feature_data : 1;
+ /**
+ * indicates if the MB level loop filter adjustment is enabled for
+ * the current frame (0 off, 1 on).
+ */
+ unsigned int loop_filter_adj_enable : 1;
+ /**
+ * Determines whether updated token probabilities are used only for
+ * this frame or until further update.
+ * It may be used by application to enable error resilient mode.
+ * In this mode probability updates are allowed only at Key Frames.
+ */
+ unsigned int refresh_entropy_probs : 1;
+ /**
+ * Determines if the current decoded frame refreshes the golden frame.
+ */
+ unsigned int refresh_golden_frame : 1;
+ /**
+ * Determines if the current decoded frame refreshes the alternate
+ * reference frame.
+ */
+ unsigned int refresh_alternate_frame : 1;
+ /**
+ * Determines if the current decoded frame refreshes the last frame
+ * reference buffer.
+ */
+ unsigned int refresh_last : 1;
+ /**
+ * Determines if the golden reference is replaced by another reference.
+ */
+ unsigned int copy_buffer_to_golden : 2;
+ /**
+ * Determines if the alternate reference is replaced by another reference.
+ */
+ unsigned int copy_buffer_to_alternate : 2;
+ /**
+ * Controls the sign of motion vectors when the golden frame is referenced.
+ */
+ unsigned int sign_bias_golden : 1;
+ /**
+ * Controls the sign of motion vectors when the alternate frame is
+ * referenced.
+ */
+ unsigned int sign_bias_alternate : 1;
+ /**
+ * Enables or disables the skipping of macroblocks containing no
+ * non-zero coefficients.
+ */
+ unsigned int mb_no_coeff_skip : 1;
+ /**
+ * Enforces unconditional per-MB loop filter delta update setting frame
+ * header flags mode_ref_lf_delta_update, all mb_mode_delta_update_flag[4],
+ * and all ref_frame_delta_update_flag[4] to 1.
+ * Since loop filter deltas are not automatically refreshed to default
+ * values at key frames, dropped frame with delta update may prevent
+ * correct decoding from the next key frame.
+ * Encoder application is advised to set this flag to 1 at key frames.
+ */
+ unsigned int forced_lf_adjustment : 1;
+ unsigned int reserved : 4;
+ } bits;
+ unsigned int value;
+ } pic_flags;
+
+ /* quality setting, equivalent to VP8E_SET_CPUUSED */
+ unsigned int quality_setting;
+
+ /**
+ * Contains a list of 4 loop filter level values (updated value if applicable)
+ * controlling the deblocking filter strength. Each entry represents a segment.
+ * When segmentation is disabled, use entry 0.
+ * When loop_filter_level is 0, loop filter shall be disabled.
+ */
+ char loop_filter_level[4];
+
+ /**
+ * Contains a list of 4 delta values for reference frame based MB-level
+ * loop filter adjustment.
+ * If no update, then set to 0.
+ */
+ char ref_lf_delta[4];
+
+ /**
+ * Contains a list of 4 delta values for coding mode based MB-level loop
+ * filter adjustment.
+ * If no update, then set to 0.
+ */
+ char mode_lf_delta[4];
+
+ /**
+ * Controls the deblocking filter sensitivity.
+ * Corresponds to the same VP8 syntax element in frame header.
+ */
+ unsigned char sharpness_level;
+
+ /**
+ * Application supplied maximum clamp value for Qindex used in quantization.
+ * Qindex will not be allowed to exceed this value.
+ * It has a valid range [0..127] inclusive.
+ */
+ unsigned char clamp_qindex_high;
+
+ /**
+ * Application supplied minimum clamp value for Qindex used in quantization.
+ * Qindex will not be allowed to be lower than this value.
+ * It has a valid range [0..127] inclusive.
+ * Condition clamp_qindex_low <= clamp_qindex_high must be guaranteed,
+ * otherwise they are ignored.
+ */
+ unsigned char clamp_qindex_low;
+
+} VAEncPictureParameterBufferVP8;
+
+
+/**
+ * \brief VP8 MB Segmentation ID Buffer
+ *
+ * application provides buffer containing the initial segmentation id for each
+ * MB, in raster scan order. Rate control may reassign it.
+ * For an 640x480 video, the buffer has 1200 entries.
+ * the value of each entry should be in the range [0..3], inclusive.
+ * If segmentation is not enabled, application does not need to provide it.
+ */
+typedef struct _VAEncMBMapBufferVP8
+{
+ /**
+ * number of MBs in the frame.
+ * It is also the number of entries of mb_segment_id[];
+ */
+ unsigned int num_mbs;
+ /**
+ * per MB Segmentation ID Buffer
+ */
+ unsigned char *mb_segment_id;
+} VAEncMBMapBufferVP8;
+
+
+/**
+ * \brief VP8 Quantization Matrix Buffer Structure
+ *
+ * Contains quantization indices for yac(0),ydc(1),y2dc(2),y2ac(3),uvdc(4),
+ * uvac(5) for each segment (0-3). When segmentation is disabled, only
+ * quantization_index[0][] will be used. This structure is sent once per frame.
+ */
+typedef struct _VAQMatrixBufferVP8
+{
+ /*
+ * array first dimensional is segment and 2nd dimensional is Q index
+ */
+ unsigned short quantization_index[4][6];
+} VAQMatrixBufferVP8;
+
+
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* VA_ENC_VP8_H */