aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsrikarri <sridur@codeaurora.org>2013-12-27 11:24:09 +0530
committerdoc <doc.divxm@gmail.com>2014-11-13 20:50:10 +0200
commitcc3442f0c515cb6459f69cda5e27e7b26d681d00 (patch)
tree54c7f76129d33c5bf26272a4e56a72129655de9a
parentdba9557364a888b8248a6cd862d5bb110a6d2488 (diff)
msm: vidc: enable pic_order_cnt_type for H264 encodinglp5.0
-current implementation will result in poc_type as 0 in SPS params (even though the poc increment value is 2 in the encoded stream). -So changes done to return poc_type as 2 in SPS params Change-Id: I5a22af422b0e1591a69a0b5b868342667ee60bbf Signed-off-by: srikarri <sridur@codeaurora.org>
-rw-r--r--drivers/video/msm/vidc/1080p/ddl/vcd_ddl_shared_mem.c7
-rw-r--r--drivers/video/msm/vidc/1080p/ddl/vcd_ddl_shared_mem.h5
-rw-r--r--drivers/video/msm/vidc/1080p/ddl/vcd_ddl_vidc.c8
3 files changed, 15 insertions, 5 deletions
diff --git a/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_shared_mem.c b/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_shared_mem.c
index 62012b9e387..0d1219474bc 100644
--- a/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_shared_mem.c
+++ b/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_shared_mem.c
@@ -91,6 +91,8 @@
#define VIDC_SM_ENC_EXT_CTRL_AU_DELIMITER_EN_SHFT 11
#define VIDC_SM_ENC_EXT_CTRL_LONG_TERM_REF_ENABLE_BMSK 0x00000400
#define VIDC_SM_ENC_EXT_CTRL_LONG_TERM_REF_ENABLE_SHFT 10
+#define VIDC_SM_ENC_EXT_CTRL_PIC_ORDER_ENABLE_BMSK 0x200
+#define VIDC_SM_ENC_EXT_CTRL_PIC_ORDER_ENABLE_SHFT 9
#define VIDC_SM_ENC_EXT_CTRL_H263_CPCFC_ENABLE_BMSK 0x80
#define VIDC_SM_ENC_EXT_CTRL_H263_CPCFC_ENABLE_SHFT 7
#define VIDC_SM_ENC_EXT_CTRL_SPS_PPS_CONTROL_BMSK 0X100
@@ -482,7 +484,7 @@ void vidc_sm_set_extended_encoder_control(struct ddl_buf_addr
*shared_mem, u32 hec_enable,
enum VIDC_SM_frame_skip frame_skip_mode,
u32 seq_hdr_in_band, u32 vbv_buffer_size, u32 cpcfc_enable,
- u32 sps_pps_control, u32 closed_gop_enable,
+ u32 sps_pps_control, u32 pic_order_count, u32 closed_gop_enable,
u32 au_delim_enable, u32 vui_timing_info_enable,
u32 restrict_bitstream_enable, u32 ltr_enable)
{
@@ -505,6 +507,9 @@ void vidc_sm_set_extended_encoder_control(struct ddl_buf_addr
VIDC_SETFIELD((sps_pps_control) ? 1 : 0,
VIDC_SM_ENC_EXT_CTRL_SPS_PPS_CONTROL_SHFT,
VIDC_SM_ENC_EXT_CTRL_SPS_PPS_CONTROL_BMSK) |
+ VIDC_SETFIELD((pic_order_count) ? 1 : 0,
+ VIDC_SM_ENC_EXT_CTRL_PIC_ORDER_ENABLE_SHFT,
+ VIDC_SM_ENC_EXT_CTRL_PIC_ORDER_ENABLE_BMSK) |
VIDC_SETFIELD(closed_gop_enable,
VIDC_SM_ENC_EXT_CTRL_CLOSED_GOP_ENABLE_SHFT,
VIDC_SM_ENC_EXT_CTRL_CLOSED_GOP_ENABLE_BMSK) |
diff --git a/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_shared_mem.h b/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_shared_mem.h
index 5c0db51b16e..84281a3745d 100644
--- a/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_shared_mem.h
+++ b/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_shared_mem.h
@@ -106,8 +106,9 @@ void vidc_sm_set_extended_encoder_control(
struct ddl_buf_addr *shared_mem, u32 hec_enable,
enum VIDC_SM_frame_skip frame_skip_mode, u32 seq_hdr_in_band,
u32 vbv_buffer_size, u32 cpcfc_enable, u32 sps_pps_control,
- u32 closed_gop_enable, u32 au_delim_enable, u32 vui_timing_info_enable,
- u32 restrict_bitstream_enable, u32 ltr_enable);
+ u32 pic_order_count, u32 closed_gop_enable, u32 au_delim_enable,
+ u32 vui_timing_info_enable, u32 restrict_bitstream_enable,
+ u32 ltr_enable);
void vidc_sm_set_encoder_param_change(struct ddl_buf_addr *shared_mem,
u32 bit_rate_chg, u32 frame_rate_chg, u32 i_period_chg);
void vidc_sm_set_encoder_vop_time(struct ddl_buf_addr *shared_mem,
diff --git a/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_vidc.c b/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_vidc.c
index d985c6660c3..11cc1f4e019 100644
--- a/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_vidc.c
+++ b/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_vidc.c
@@ -600,6 +600,7 @@ void ddl_vidc_encode_init_codec(struct ddl_client_context *ddl)
const u32 recon_bufs = 4;
u32 h263_cpfc_enable = false;
u32 scaled_frame_rate, ltr_enable;
+ u32 pic_order_count = false;
ddl_vidc_encode_set_profile_level(ddl);
vidc_1080p_set_encode_frame_size(encoder->frame_size.width,
@@ -620,14 +621,17 @@ void ddl_vidc_encode_init_codec(struct ddl_client_context *ddl)
(DDL_FRAMERATE_SCALE(DDL_INITIAL_FRAME_RATE)
!= scaled_frame_rate))
h263_cpfc_enable = true;
+ if (encoder->codec.codec == VCD_CODEC_H264)
+ pic_order_count = true;
+
ltr_enable = DDL_IS_LTR_ENABLED(encoder);
DDL_MSG_HIGH("ltr_enable = %u", ltr_enable);
vidc_sm_set_extended_encoder_control(&ddl->shared_mem
[ddl->command_channel], hdr_ext_control,
r_cframe_skip, false, 0,
h263_cpfc_enable, encoder->sps_pps.sps_pps_for_idr_enable_flag,
- encoder->closed_gop, encoder->avc_delimiter_enable,
- encoder->vui_timinginfo_enable,
+ pic_order_count, encoder->closed_gop, encoder->
+ avc_delimiter_enable, encoder->vui_timinginfo_enable,
encoder->bitstream_restrict_enable, ltr_enable);
if (encoder->vui_timinginfo_enable) {
vidc_sm_set_h264_encoder_timing_info(