summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2015-12-07 16:03:18 -0800
committerSteve Kondik <steve@cyngn.com>2015-12-07 16:03:18 -0800
commit9cf14a5109535b374156969683595930977d1ccc (patch)
tree0614b01ef1aba458d2c631aa9ecc69560956e105
parentc67b6e93f45be6dd5d56c7e69ad48aad02c06026 (diff)
parent533e5a7f03b976e2fa621e722394f1e4891f340e (diff)
downloadandroid_external_libavc-9cf14a5109535b374156969683595930977d1ccc.tar.gz
android_external_libavc-9cf14a5109535b374156969683595930977d1ccc.tar.bz2
android_external_libavc-9cf14a5109535b374156969683595930977d1ccc.zip
Merge tag 'android-6.0.1_r3' of https://android.googlesource.com/platform/external/libavc into HEAD
Android 6.0.1 release 3
-rw-r--r--common/ih264_common_tables.c2
-rw-r--r--decoder/ih264d_api.c12
-rw-r--r--encoder/ih264e_api.c2
-rw-r--r--encoder/ih264e_encode_header.c137
-rw-r--r--encoder/ih264e_encode_header.h3
-rw-r--r--encoder/ih264e_process.c4
-rw-r--r--encoder/ih264e_structs.h5
-rw-r--r--encoder/ih264e_version.c7
8 files changed, 165 insertions, 7 deletions
diff --git a/common/ih264_common_tables.c b/common/ih264_common_tables.c
index 7d15440..df09f5a 100644
--- a/common/ih264_common_tables.c
+++ b/common/ih264_common_tables.c
@@ -128,7 +128,7 @@ const WORD32 gai4_ih264_max_luma_pic_size[] =
414720,
/* Level 3.1 */
921600,
- /* Level 3.1 */
+ /* Level 3.2 */
1310720,
/* Level 4 */
2097152,
diff --git a/decoder/ih264d_api.c b/decoder/ih264d_api.c
index ddbf769..cd91483 100644
--- a/decoder/ih264d_api.c
+++ b/decoder/ih264d_api.c
@@ -103,10 +103,17 @@
#define CODEC_RELEASE_VER "05.00"
#define CODEC_VENDOR "ITTIAM"
#define MAXVERSION_STRLEN 511
+#ifdef __ANDROID__
+#define VERSION(version_string, codec_name, codec_release_type, codec_release_ver, codec_vendor) \
+ snprintf(version_string, MAXVERSION_STRLEN, \
+ "@(#)Id:%s_%s Ver:%s Released by %s", \
+ codec_name, codec_release_type, codec_release_ver, codec_vendor)
+#else
#define VERSION(version_string, codec_name, codec_release_type, codec_release_ver, codec_vendor) \
snprintf(version_string, MAXVERSION_STRLEN, \
"@(#)Id:%s_%s Ver:%s Released by %s Build: %s @ %s", \
codec_name, codec_release_type, codec_release_ver, codec_vendor, __DATE__, __TIME__)
+#endif
#define MIN_IN_BUFS 1
@@ -1955,6 +1962,11 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
{
memcpy(pu1_bitstrm_buf, pu1_buf + u4_length_of_start_code,
buflen);
+ /* Decoder may read extra 8 bytes near end of the frame */
+ if((buflen + 8) < buf_size)
+ {
+ memset(pu1_bitstrm_buf + buflen, 0, 8);
+ }
u4_first_start_code_found = 1;
}
diff --git a/encoder/ih264e_api.c b/encoder/ih264e_api.c
index c46134d..69085ab 100644
--- a/encoder/ih264e_api.c
+++ b/encoder/ih264e_api.c
@@ -3473,7 +3473,7 @@ static WORD32 ih264e_fill_num_mem_rec(void *pv_api_ip, void *pv_api_op)
ps_mem_rec = &ps_mem_rec_base[MEM_REC_MB_INFO_NMB];
{
ps_mem_rec->u4_mem_size = MAX_PROCESS_CTXT * max_mb_cols *
- (sizeof(mb_info_nmb_t) + MB_SIZE * MB_SIZE
+ (sizeof(mb_info_nmb_t) + MB_SIZE * MB_SIZE
* sizeof(UWORD8));
}
DEBUG("\nMemory record Id %d = %d \n", MEM_REC_MB_INFO_NMB, ps_mem_rec->u4_mem_size);
diff --git a/encoder/ih264e_encode_header.c b/encoder/ih264e_encode_header.c
index cc81e1b..ac025d6 100644
--- a/encoder/ih264e_encode_header.c
+++ b/encoder/ih264e_encode_header.c
@@ -136,6 +136,82 @@ static WORD32 ih264e_generate_nal_unit_header(bitstrm_t *ps_bitstrm,
return(return_status);
}
+/**
+******************************************************************************
+*
+* @brief Generates VUI (Video usability information)
+*
+* @par Description
+* This function generates VUI header as per the spec
+*
+* @param[in] ps_bitstrm
+* pointer to bitstream context (handle)
+*
+* @param[in] ps_vui
+* pointer to structure containing VUI data
+
+*
+* @return success or failure error code
+*
+******************************************************************************
+*/
+WORD32 ih264e_generate_vui(bitstrm_t *ps_bitstrm, vui_t *ps_vui)
+{
+ WORD32 return_status = IH264E_SUCCESS;
+
+ /* aspect_ratio_info_present_flag */
+ PUT_BITS(ps_bitstrm, ps_vui->u1_aspect_ratio_info_present_flag, 1, return_status, "aspect_ratio_info_present_flag");
+
+ /* overscan_info_present_flag */
+ PUT_BITS(ps_bitstrm, ps_vui->u1_overscan_info_present_flag, 1, return_status, "overscan_info_present_flag");
+
+ /* video_signal_type_present_flag */
+ PUT_BITS(ps_bitstrm, ps_vui->u1_video_signal_type_present_flag, 1, return_status, "video_signal_type_present_flag");
+
+ /* chroma_loc_info_present_flag */
+ PUT_BITS(ps_bitstrm, ps_vui->u1_chroma_loc_info_present_flag, 1, return_status, "chroma_loc_info_present_flag");
+
+ /* timing_info_present_flag */
+ PUT_BITS(ps_bitstrm, ps_vui->u1_vui_timing_info_present_flag, 1, return_status, "timing_info_present_flag");
+
+ /* nal_hrd_parameters_present_flag */
+ PUT_BITS(ps_bitstrm, ps_vui->u1_nal_hrd_parameters_present_flag, 1, return_status, "nal_hrd_parameters_present_flag");
+
+ /* vcl_hrd_parameters_present_flag */
+ PUT_BITS(ps_bitstrm, ps_vui->u1_vcl_hrd_parameters_present_flag, 1, return_status, "vcl_hrd_parameters_present_flag");
+
+ /* pic_struct_present_flag */
+ PUT_BITS(ps_bitstrm, ps_vui->u1_pic_struct_present_flag, 1, return_status, "pic_struct_present_flag");
+
+ /* bitstream_restriction_flag */
+ PUT_BITS(ps_bitstrm, ps_vui->u1_bitstream_restriction_flag, 1, return_status, "bitstream_restriction_flag");
+
+ if(ps_vui->u1_bitstream_restriction_flag == 1)
+ {
+ /* motion_vectors_over_pic_boundaries_flag */
+ PUT_BITS(ps_bitstrm, ps_vui->u1_motion_vectors_over_pic_boundaries_flag, 1, return_status, "motion_vectors_over_pic_boundaries_flag");
+
+ /* max_bytes_per_pic_denom */
+ PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_max_bytes_per_pic_denom,return_status,"max_bytes_per_pic_denom");
+
+ /* max_bits_per_mb_denom */
+ PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_max_bits_per_mb_denom,return_status,"max_bits_per_mb_denom");
+
+ /* log2_max_mv_length_horizontal */
+ PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_log2_max_mv_length_horizontal,return_status,"log2_max_mv_length_horizontal");
+
+ /* log2_max_mv_length_vertical */
+ PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_log2_max_mv_length_vertical,return_status,"log2_max_mv_length_vertical");
+
+ /* max_num_reorder_frames */
+ PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_num_reorder_frames,return_status,"max_num_reorder_frames");
+
+ /* max_dec_frame_buffering */
+ PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_max_dec_frame_buffering,return_status,"max_dec_frame_buffering");
+ }
+
+ return return_status;
+}
/**
******************************************************************************
@@ -151,11 +227,14 @@ static WORD32 ih264e_generate_nal_unit_header(bitstrm_t *ps_bitstrm,
* @param[in] ps_sps
* pointer to structure containing SPS data
*
+* @param[in] ps_vui
+* pointer to structure containing VUI data
+*
* @return success or failure error code
*
******************************************************************************
*/
-WORD32 ih264e_generate_sps(bitstrm_t *ps_bitstrm, sps_t *ps_sps)
+WORD32 ih264e_generate_sps(bitstrm_t *ps_bitstrm, sps_t *ps_sps, vui_t *ps_vui)
{
WORD32 return_status = IH264E_SUCCESS;
WORD32 i;
@@ -297,6 +376,7 @@ WORD32 ih264e_generate_sps(bitstrm_t *ps_bitstrm, sps_t *ps_sps)
if (ps_sps->i1_vui_parameters_present_flag)
{
/* Add vui parameters to the bitstream */;
+ return_status |= ih264e_generate_vui(ps_bitstrm, ps_vui);
}
/* rbsp trailing bits */
@@ -637,6 +717,58 @@ WORD32 ih264e_generate_slice_header(bitstrm_t *ps_bitstrm,
return return_status;
}
+/**
+******************************************************************************
+*
+* @brief Populates VUI structure
+*
+* @par Description
+* Populates VUI structure for its use in header generation
+*
+* @param[in] ps_codec
+* pointer to encoder context
+*
+* @param[out] ps_vui
+* pointer to vui params that needs to be populated
+*
+* @return success or failure error code
+*
+******************************************************************************
+*/
+IH264E_ERROR_T ih264e_populate_vui(codec_t *ps_codec, vui_t *ps_vui)
+{
+ sps_t *ps_sps;
+
+ ps_sps = ps_codec->ps_sps_base + ps_codec->i4_sps_id;
+ ps_vui->u1_aspect_ratio_info_present_flag = 0;
+ ps_vui->u1_overscan_info_present_flag = 0;
+ ps_vui->u1_video_signal_type_present_flag = 0;
+ ps_vui->u1_chroma_loc_info_present_flag = 0;
+ ps_vui->u1_vui_timing_info_present_flag = 0;
+ ps_vui->u1_nal_hrd_parameters_present_flag = 0;
+ ps_vui->u1_vcl_hrd_parameters_present_flag = 0;
+ ps_vui->u1_pic_struct_present_flag = 0;
+ ps_vui->u1_bitstream_restriction_flag = 1;
+ ps_vui->u1_motion_vectors_over_pic_boundaries_flag = 1;
+ ps_vui->u1_max_bytes_per_pic_denom = 0;
+ ps_vui->u1_max_bits_per_mb_denom = 0;
+ ps_vui->u1_log2_max_mv_length_horizontal = 16;
+ ps_vui->u1_log2_max_mv_length_vertical = 16;
+
+ if(ps_codec->s_cfg.u4_num_bframes == 0)
+ {
+ ps_vui->u1_num_reorder_frames = 0;
+ }
+ else
+ {
+ ps_vui->u1_num_reorder_frames = 1;
+ }
+
+ ps_vui->u1_max_dec_frame_buffering = ps_sps->u1_max_num_ref_frames;
+
+ return 0;
+}
+
/**
@@ -824,11 +956,12 @@ IH264E_ERROR_T ih264e_populate_sps(codec_t *ps_codec, sps_t *ps_sps)
}
/* vui params */
- ps_sps->i1_vui_parameters_present_flag = 0;
+ ps_sps->i1_vui_parameters_present_flag = 1;
if (ps_sps->i1_vui_parameters_present_flag)
{
/* populate vui params */
+ ih264e_populate_vui(ps_codec,&(ps_codec->s_vui));
}
return i4_err_code;
diff --git a/encoder/ih264e_encode_header.h b/encoder/ih264e_encode_header.h
index acae5b6..c379d5e 100644
--- a/encoder/ih264e_encode_header.h
+++ b/encoder/ih264e_encode_header.h
@@ -101,7 +101,8 @@
WORD32 ih264e_generate_sps
(
bitstrm_t *ps_bitstrm,
- sps_t *ps_sps
+ sps_t *ps_sps,
+ vui_t *ps_vui
);
/**
diff --git a/encoder/ih264e_process.c b/encoder/ih264e_process.c
index 850cefc..c21931d 100644
--- a/encoder/ih264e_process.c
+++ b/encoder/ih264e_process.c
@@ -181,7 +181,7 @@ IH264E_ERROR_T ih264e_generate_sps_pps(codec_t *ps_codec)
ps_entropy->i4_error_code = IH264E_SUCCESS;
/* generate sps */
- ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps);
+ ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps, &ps_codec->s_vui);
/* generate pps */
ps_entropy->i4_error_code |= ih264e_generate_pps(ps_bitstrm, ps_pps, ps_sps);
@@ -371,7 +371,7 @@ IH264E_ERROR_T ih264e_entropy(process_ctxt_t *ps_proc)
if (1 == ps_entropy->i4_gen_header)
{
/* generate sps */
- ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps);
+ ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps, &ps_codec->s_vui);
/* generate pps */
ps_entropy->i4_error_code |= ih264e_generate_pps(ps_bitstrm, ps_pps, ps_sps);
diff --git a/encoder/ih264e_structs.h b/encoder/ih264e_structs.h
index fdf0e0a..074731e 100644
--- a/encoder/ih264e_structs.h
+++ b/encoder/ih264e_structs.h
@@ -2618,6 +2618,11 @@ struct _codec_t
rate_control_ctxt_t s_rate_control;
/**
+ * VUI structure
+ */
+ vui_t s_vui;
+
+ /**
* input buffer queue
*/
inp_buf_t as_inp_list[MAX_NUM_BFRAMES];
diff --git a/encoder/ih264e_version.c b/encoder/ih264e_version.c
index 173f17c..e66e1ad 100644
--- a/encoder/ih264e_version.c
+++ b/encoder/ih264e_version.c
@@ -85,10 +85,17 @@
* Concatenates various strings to form a version string
*******************************************************************************
*/
+#ifdef __ANDROID__
+#define VERSION(version_string, codec_name, codec_release_type, codec_release_ver, codec_vendor) \
+ snprintf(version_string, MAX_STRLEN, \
+ "@(#)Id:%s_%s Ver:%s Released by %s", \
+ codec_name, codec_release_type, codec_release_ver, codec_vendor)
+#else
#define VERSION(version_string, codec_name, codec_release_type, codec_release_ver, codec_vendor) \
snprintf(version_string, MAX_STRLEN, \
"@(#)Id:%s_%s Ver:%s Released by %s Build: %s @ %s", \
codec_name, codec_release_type, codec_release_ver, codec_vendor, __DATE__, __TIME__)
+#endif
/*****************************************************************************/
/* Function Definitions */