libmix: unify VP8 va parameter usage
BZ: 152589
unify some VP8 VA parameter usage
Change-Id: I242d13dc06e44dfe2e9bec6dbbc64bd3028285e8
Signed-off-by: Tianmi Chen <tianmi.chen@intel.com>
diff --git a/mixvbp/vbp_manager/vbp_vp8_parser.c b/mixvbp/vbp_manager/vbp_vp8_parser.c
index 51f8236..29ee8ad 100755
--- a/mixvbp/vbp_manager/vbp_vp8_parser.c
+++ b/mixvbp/vbp_manager/vbp_vp8_parser.c
@@ -25,6 +25,7 @@
#include <dlfcn.h>
#include "vp8.h"
+#include "vp8_tables.h"
#include "vbp_loader.h"
#include "vbp_utils.h"
#include "vbp_vp8_parser.h"
@@ -402,10 +403,10 @@
{
pic_parms->loop_filter_level[i] = baseline_filter_level[i];
}
- if ((pic_parms->pic_fields.bits.version == 0) || (pic_parms->pic_fields.bits.version == 1))
- {
- pic_parms->pic_fields.bits.loop_filter_disable = pic_parms->loop_filter_level[0] > 0 ? true : false;
- }
+
+ int profile = pic_parms->pic_fields.bits.version;
+ pic_parms->pic_fields.bits.loop_filter_disable = ((profile > 1) || (pic_parms->loop_filter_level[0] == 0)) ? true : false;
+
memcpy(pic_parms->loop_filter_deltas_ref_frame, pi->LoopFilter.DeltasRef, sizeof(char) * MAX_REF_LF_DELTAS);
memcpy(pic_parms->loop_filter_deltas_mode, pi->LoopFilter.DeltasMode, sizeof(char) * MAX_MODE_LF_DELTAS);
@@ -420,19 +421,28 @@
pic_parms->prob_last = pi->prob_lf;
pic_parms->prob_gf = pi->prob_gf;
- FrameContextData *fc = &(parser->info.FrameContext);
- memcpy(pic_parms->y_mode_probs, fc->Y_Mode_Prob, sizeof(unsigned char) * 4);
- memcpy(pic_parms->uv_mode_probs, fc->UV_Mode_Prob, sizeof(unsigned char) * 3);
- /* Motion vector context */
- for (i = 0; i < 2; i++)
+ if (pic_parms->pic_fields.bits.key_frame == KEY_FRAME)
{
- memcpy(pic_parms->mv_probs[i], fc->MVContext[i], sizeof(unsigned char) * 19);
+ memcpy(pic_parms->y_mode_probs, VP8_KF_YMode_Const, sizeof(VP8_KF_YMode_Const));
+ memcpy(pic_parms->uv_mode_probs, VP8_KF_UVMode_Const, sizeof(VP8_KF_UVMode_Const));
+ memcpy(pic_parms->mv_probs, VP8_MV_DefaultMVContext, sizeof(VP8_MV_DefaultMVContext));
+ }
+ else
+ {
+ FrameContextData *fc = &(parser->info.FrameContext);
+ memcpy(pic_parms->y_mode_probs, fc->Y_Mode_Prob, sizeof(unsigned char) * 4);
+ memcpy(pic_parms->uv_mode_probs, fc->UV_Mode_Prob, sizeof(unsigned char) * 3);
+ /* Motion vector context */
+ for (i = 0; i < 2; i++)
+ {
+ memcpy(pic_parms->mv_probs[i], fc->MVContext[i], sizeof(unsigned char) * 19);
+ }
}
/* Bool coder */
pic_parms->bool_coder_ctx.range = pi->bool_coder.range;
pic_parms->bool_coder_ctx.value = (pi->bool_coder.value >> 24) & 0xFF;
- pic_parms->bool_coder_ctx.count = pi->bool_coder.count;
+ pic_parms->bool_coder_ctx.count = 8 - (pi->bool_coder.count & 0x07);
//pic_parms->current_picture = VA_INVALID_SURFACE;
pic_parms->last_ref_frame = VA_INVALID_SURFACE;
@@ -460,9 +470,10 @@
vbp_picture_data_vp8 *pic_data = &(query_data->pic_data[pic_index]);
vbp_slice_data_vp8 *slc_data = &(pic_data->slc_data[pic_data->num_slices]);
- slc_data->buffer_addr = pi->source;
+ int slice_offset = (pi->frame_tag.frame_type == KEY_FRAME) ? 10 : 3;
+ slc_data->buffer_addr = pi->source + slice_offset;
slc_data->slice_offset = 0;
- slc_data->slice_size = pi->source_sz;
+ slc_data->slice_size = pi->source_sz - slice_offset;
VASliceParameterBufferVP8 *slc_parms = &(slc_data->slc_parms);
/* number of bytes in the slice data buffer for this slice */
@@ -475,7 +486,7 @@
slc_parms->slice_data_flag = VA_SLICE_DATA_FLAG_ALL;
/* the offset to the first bit of MB from the first byte of slice data */
- slc_parms->macroblock_offset = pi->header_bits;
+ slc_parms->macroblock_offset = pi->header_bits - (slice_offset << 3);
/* Token Partitions */
slc_parms->num_of_partitions = pi->partition_count;
diff --git a/mixvbp/vbp_plugin/vp8/include/vp8_tables.h b/mixvbp/vbp_plugin/vp8/include/vp8_tables.h
index 6980834..00c5ad2 100755
--- a/mixvbp/vbp_plugin/vp8/include/vp8_tables.h
+++ b/mixvbp/vbp_plugin/vp8/include/vp8_tables.h
@@ -532,7 +532,9 @@
};
const vp8_prob VP8_YMode_Const[VP8_YMODES-1] = {112,86,140,37};
+const vp8_prob VP8_KF_YMode_Const[VP8_YMODES-1] = {145,156,163,128};
-const vp8_prob VP8_UVMode_Const[VP8_UV_MODES-1] = {162, 101,204};
+const vp8_prob VP8_UVMode_Const[VP8_UV_MODES-1] = {162,101,204};
+const vp8_prob VP8_KF_UVMode_Const[VP8_UV_MODES-1] = {142,114,183};
#endif