libmix: VP8 parser refinement
BZ: 131068
This patch refined content:
1. add trace in parser if meet error
2. remove non-used function
Change-Id: Ib5c7520f0e55a4ed1ba59c41c4c131d9f2dd4ebb
Reviewed-on: http://android.intel.com:8080/139257
Reviewed-by: Shi, PingX <pingx.shi@intel.com>
Tested-by: Shi, PingX <pingx.shi@intel.com>
Reviewed-by: cactus <cactus@intel.com>
Tested-by: cactus <cactus@intel.com>
diff --git a/mixvbp/vbp_manager/vbp_vp8_parser.c b/mixvbp/vbp_manager/vbp_vp8_parser.c
index 203ab75..51f8236 100755
--- a/mixvbp/vbp_manager/vbp_vp8_parser.c
+++ b/mixvbp/vbp_manager/vbp_vp8_parser.c
@@ -205,6 +205,7 @@
uint32 length = cxt->parse_cubby.size;
if (length < 3)
{
+ ETRACE("failure: invalid len %d in parse start code", length);
return VBP_DATA;
}
@@ -216,6 +217,7 @@
// check start code
if ((c[0] != 0x9d) || (c[1] != 0x01) || (c[2] != 0x2a))
{
+ ETRACE("failure: check start code failure");
return VBP_PARM;
}
}
@@ -484,7 +486,8 @@
}
pic_data->num_slices++;
- if (pic_data->num_slices > VP8_MAX_NUM_SLICES) {
+ if (pic_data->num_slices > VP8_MAX_NUM_SLICES)
+ {
ETRACE("Number of slices (%d) per picture exceeds the limit (%d).", pic_data->num_slices, VP8_MAX_NUM_SLICES);
return VBP_DATA;
}
@@ -517,7 +520,10 @@
{
error = vbp_add_slice_data_vp8(parser, query_data);
if (error != VBP_OK)
+ {
+ ETRACE("add slice data error %d", error);
return error;
+ }
}
/* Populate codec data */
diff --git a/mixvbp/vbp_plugin/vp8/include/vp8parse.h b/mixvbp/vbp_plugin/vp8/include/vp8parse.h
index a5c9c13..063d635 100755
--- a/mixvbp/vbp_plugin/vp8/include/vp8parse.h
+++ b/mixvbp/vbp_plugin/vp8/include/vp8parse.h
@@ -34,7 +34,7 @@
int32_t vp8_parse_frame_tag(FrameTagHeader *frame_tag, uint8_t *data, uint32_t data_sz);
-//vp8_Status vp8_translate_parse_status(vp8_Status status);
+void vp8_translate_parse_status(vp8_Status status);
void vp8_init_Info(vp8_Info *pi);
diff --git a/mixvbp/vbp_plugin/vp8/viddec_vp8_parse.c b/mixvbp/vbp_plugin/vp8/viddec_vp8_parse.c
index 4eb5919..860adc0 100755
--- a/mixvbp/vbp_plugin/vp8/viddec_vp8_parse.c
+++ b/mixvbp/vbp_plugin/vp8/viddec_vp8_parse.c
@@ -61,7 +61,12 @@
vp8_Status status = VP8_NO_ERROR;
vp8_viddec_parser *parser = (vp8_viddec_parser*)ctxt;
- if (1 != parser->got_start) return VP8_NO_INITIALIZATION;
+ if (1 != parser->got_start)
+ {
+ status = VP8_NO_INITIALIZATION;
+ vp8_translate_parse_status(status);
+ return status;
+ }
vp8_Info *pi = &(parser->info);
viddec_pm_cxt_t *pm_cxt = (viddec_pm_cxt_t *)parent;
@@ -70,7 +75,7 @@
if (pi->source_sz < 0)
{
- return VP8_UNEXPECTED_END_OF_BITSTREAM;
+ status = VP8_UNEXPECTED_END_OF_BITSTREAM;
}
else if (pi->source_sz == 0)
{
@@ -82,13 +87,12 @@
status = vp8_parse_frame_header(parser);
}
- return status;
-}
+ if (status != VP8_NO_ERROR)
+ {
+ vp8_translate_parse_status(status);
+ }
-uint32_t viddec_vp8_wkld_done(void *parent, void *ctxt, unsigned int next_sc,
- uint32_t *codec_specific_errors)
-{
- return 0;
+ return status;
}
void viddec_vp8_get_context_size(viddec_parser_memory_sizes_t *size)
@@ -99,20 +103,3 @@
return;
}
-uint32_t viddec_vp8_is_frame_start(void *ctxt)
-{
- vp8_viddec_parser* parser = ctxt;
-
- return parser->got_start;
-}
-
-void viddec_vp8_get_ops(viddec_parser_ops_t *ops)
-{
- ops->init = viddec_vp8_init;
-
- ops->parse_syntax = viddec_vp8_parse;
- ops->get_cxt_size = viddec_vp8_get_context_size;
- ops->is_wkld_done = viddec_vp8_wkld_done;
- ops->is_frame_start = viddec_vp8_is_frame_start;
- return;
-}
diff --git a/mixvbp/vbp_plugin/vp8/vp8parse.c b/mixvbp/vbp_plugin/vp8/vp8parse.c
index 4f15736..f3c789d 100755
--- a/mixvbp/vbp_plugin/vp8/vp8parse.c
+++ b/mixvbp/vbp_plugin/vp8/vp8parse.c
@@ -25,6 +25,7 @@
#include "vp8_tables.h"
#include "vp8parse.h"
+#include <vbp_trace.h>
static const uint8_t kVp8SyncCodeByte[] = {0x9d, 0x01, 0x2a};
@@ -115,7 +116,7 @@
/* Is segmentation enabled */
pi->Segmentation.Enabled = (uint8_t)vp8_decode_bool(bc, 128); //chapter 9.2 - macroblock uses segments ? 1: 0
- if(pi->Segmentation.Enabled )
+ if(pi->Segmentation.Enabled)
{
/* Signal whether or not the segmentation map is being explicitly updated this frame */
pi->Segmentation.UpdateMap = (uint8_t)vp8_decode_bool(bc, 128);
@@ -465,29 +466,40 @@
}
-#if 0
-vp8_Status vp8_translate_parse_status(vp8_Status status)
+
+void vp8_translate_parse_status(vp8_Status status)
{
switch (status)
{
case VP8_UNSUPPORTED_VERSION:
- LOGE("Parser returned VP8_UNSUPPORTED_VERSION");
- return VP8_UNSUPPORTED_VERSION;
+ ETRACE("Parser returns VP8_UNSUPPORTED_VERSION");
+ break;
case VP8_UNSUPPORTED_BITSTREAM:
- LOGE("Parser returned VP8_UNSUPPORTED_BITSTREAM");
- return VP8_UNSUPPORTED_BITSTREAM;
+ ETRACE("Parser returns VP8_UNSUPPORTED_BITSTREAM");
+ break;
case VP8_INVALID_FRAME_SYNC_CODE:
- LOGE("Parser returned VP8_INVALID_FRAME_SYNC_CODE");
- return VP8_INVALID_FRAME_SYNC_CODE;
+ ETRACE("Parser returns VP8_INVALID_FRAME_SYNC_CODE");
+ break;
case VP8_UNEXPECTED_END_OF_BITSTREAM:
- LOGE("Parser returned VP8_UNEXPECTED_END_OF_BITSTREAM");
- return VP8_UNEXPECTED_END_OF_BITSTREAM;
- default:
- LOGE("Parser returned VP8_UNKNOWN_ERROR");
- return VP8_UNKNOWN_ERROR;
+ ETRACE("Parser returns VP8_UNEXPECTED_END_OF_BITSTREAM");
+ break;
+ case VP8_CORRUPT_FRAME:
+ ETRACE("Parser returns VP8_CORRUPT_FRAME");
+ break;
+ case VP8_MEMORY_ERROR:
+ ETRACE("Parser returns MEMORY_ERROR");
+ break;
+ case VP8_NO_INITIALIZATION:
+ ETRACE("Parser returns VP8_NO_INITIALIZATION");
+ break;
+ case VP8_UNKNOWN_ERROR:
+ ETRACE("Parser returns VP8_UNKNOWN_ERROR");
+ break;
}
+
+ return;
}
-#endif
+
/* Parse VP8 frame header */
int32_t vp8_parse_frame_header(vp8_viddec_parser *parser)
@@ -508,6 +520,7 @@
ret = vp8_parse_frame_tag(&(pi->frame_tag), data, data_sz);
if (ret != VP8_NO_ERROR)
{
+ vp8_translate_parse_status(ret);
return ret;
}
@@ -523,7 +536,9 @@
/* Check sync code containg 3 bytes*/
if ((data[0] != kVp8SyncCodeByte[0]) || (data[1] != kVp8SyncCodeByte[1]) || (data[2] != kVp8SyncCodeByte[2]))
{
- return VP8_INVALID_FRAME_SYNC_CODE;
+ ret = VP8_INVALID_FRAME_SYNC_CODE;
+ vp8_translate_parse_status(ret);
+ return ret;
}
pi->width = (data[3] | (data[4] << 8)) & 0x3fff;
@@ -538,7 +553,9 @@
if (0 == pi->width || 0 == pi->height)
{
- return VP8_UNSUPPORTED_BITSTREAM;
+ ret = VP8_UNSUPPORTED_BITSTREAM;
+ vp8_translate_parse_status(ret);
+ return ret;
}
/* Initialize frame parameters*/