diff options
| author | srikarri <sridur@codeaurora.org> | 2013-12-27 11:24:09 +0530 |
|---|---|---|
| committer | doc <doc.divxm@gmail.com> | 2014-11-13 20:50:10 +0200 |
| commit | cc3442f0c515cb6459f69cda5e27e7b26d681d00 (patch) | |
| tree | 54c7f76129d33c5bf26272a4e56a72129655de9a | |
| parent | dba9557364a888b8248a6cd862d5bb110a6d2488 (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.c | 7 | ||||
| -rw-r--r-- | drivers/video/msm/vidc/1080p/ddl/vcd_ddl_shared_mem.h | 5 | ||||
| -rw-r--r-- | drivers/video/msm/vidc/1080p/ddl/vcd_ddl_vidc.c | 8 |
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( |
