libmix: fix a VC1 parser issue
BZ: 129080
Two issues have been fixed in VC1 parser.
1. User data should be identified.
2. slice_vertical_position should be parsed from bitstream
instead of being assigned slice number.
Change-Id: Idaa5d40aa473b9f9771b0eb308c13d0553ddf2f9
Signed-off-by: Tianmi Chen <tianmi.chen@intel.com>
Reviewed-on: http://android.intel.com:8080/133550
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/mix_vbp/viddec_fw/fw/parser/vbp_vc1_parser.c b/mix_vbp/viddec_fw/fw/parser/vbp_vc1_parser.c
index 13a5a89..b42c812 100644
--- a/mix_vbp/viddec_fw/fw/parser/vbp_vc1_parser.c
+++ b/mix_vbp/viddec_fw/fw/parser/vbp_vc1_parser.c
@@ -340,7 +340,7 @@
cxt->list.data[cxt->list.num_items].stpos -
PREFIX_SIZE;
- if (start_code >= 0x0A && start_code <= 0x0F)
+ if ((start_code >= 0x0A && start_code <= 0x0F) || (start_code >= 0x1B && start_code <= 0x1F))
{
/* only put known start code to the list
* 0x0A: end of sequence
@@ -349,6 +349,7 @@
* 0x0D: field header
* 0x0E: entry point header
* 0x0F: sequence header
+ * 0x1B ~ 0x1F: user data
*/
cxt->list.num_items++;
}
@@ -1030,6 +1031,9 @@
uint8 is_emul;
viddec_pm_get_au_pos(cxt, &bit, &byte, &is_emul);
+ vc1_viddec_parser_t *parser = (vc1_viddec_parser_t *)cxt->codec_data;
+ vc1_PictureLayerHeader *picLayerHeader = &(parser->info.picLayerHeader);
+
vbp_slice_data_vc1 *slc_data = &(pic_data->slc_data[pic_data->num_slices]);
VASliceParameterBufferVC1 *slc_parms = &(slc_data->slc_parms);
@@ -1047,8 +1051,8 @@
slc_parms->macroblock_offset = bit + byte * 8;
- /* fix this. we need o get the slice_vertical_position from the code */
- slc_parms->slice_vertical_position = pic_data->num_slices;
+ /* get the slice_vertical_position from the code */
+ slc_parms->slice_vertical_position = (picLayerHeader->SLICE_ADDR % (pic_data->pic_parms->coded_height / 16));
pic_data->num_slices++;
}