#endif
static uint dolby_vision_on_count;
+static bool dolby_vision_el_disable;
#define FLAG_FORCE_CVM 0x01
#define FLAG_BYPASS_CVM 0x02
#define FLAG_PRIORITY_GRAPHIC 0x200000
#define FLAG_DISABLE_LOAD_VSVDB 0x400000
#define FLAG_DISABLE_CRC 0x800000
+#define FLAG_ENABLE_EL 0x1000000
#define FLAG_TOGGLE_FRAME 0x80000000
#define FLAG_FRAME_DELAY_MASK 0xf
if (is_meson_g12() || is_meson_tm2_stbmode())
VSYNC_WR_DV_REG_BITS(
DOLBY_PATH_CTRL,
- /* vd2 to core1 */
+ /* vd2 to vpp */
1, 1, 1);
else
VSYNC_WR_DV_REG_BITS(
setting_update_count = 0;
crc_count = 0;
crc_bypass_count = 0;
+ dolby_vision_el_disable = 0;
return -1;
} else if (type == VFRAME_EVENT_PROVIDER_QUREY_STATE) {
return RECEIVER_ACTIVE;
setting_update_count = 0;
crc_count = 0;
crc_bypass_count = 0;
+ dolby_vision_el_disable = 0;
}
return 0;
}
src_bdp = 10;
bypass_release = true;
}
+ if (is_meson_tm2_stbmode() &&
+ (req.dv_enhance_exist && !mel_flag &&
+ ((dolby_vision_flags & FLAG_CERTIFICAION)
+ == 0))) {
+ src_format = FORMAT_SDR;
+ dovi_setting.src_format = src_format;
+ total_comp_size = 0;
+ total_md_size = 0;
+ src_bdp = 10;
+ bypass_release = true;
+ }
} else if (is_dolby_vision_stb_mode())
src_format = dovi_setting.src_format;
else if (is_meson_tvmode())
el_flag, mel_flag);
meta_flag_bl = 0;
}
+
+ if (is_meson_tm2_stbmode() &&
+ (el_flag && !mel_flag &&
+ ((dolby_vision_flags & FLAG_CERTIFICAION) == 0))) {
+ el_flag = 0;
+ dolby_vision_el_disable = 1;
+ }
+
if ((src_format == FORMAT_DOVI)
&& meta_flag_bl && meta_flag_el) {
/* dovi frame no meta or meta error */
}
EXPORT_SYMBOL(is_dolby_vision_stb_mode);
+bool is_dolby_vision_el_disable(void)
+{
+ return dolby_vision_el_disable;
+}
+EXPORT_SYMBOL(is_dolby_vision_el_disable);
+
int register_dv_functions(const struct dolby_vision_func_s *func)
{
int ret = -1;
if (debug_flag & DEBUG_FLAG_PRINT_TOGGLE_FRAME)
pr_info("%s()\n", __func__);
- if ((vf->width == 0) && (vf->height == 0)) {
+ if ((vf->width == 0) || (vf->height == 0)) {
amlog_level(LOG_LEVEL_ERROR,
"Video: invalid frame dimension\n");
return;
{
struct provider_aux_req_s req;
+ if (is_dolby_vision_el_disable() &&
+ !for_dolby_vision_certification())
+ return 0;
+
if (!vf)
return 0;
if (vf->source_type != VFRAME_SOURCE_TYPE_OTHERS)
int height_bl, height_el;
int ret = dolby_vision_update_metadata(vf);
- cur_dispbuf2 = dolby_vision_vf_peek_el(vf);
+ if (!is_dolby_vision_el_disable() || for_dolby_vision_certification())
+ cur_dispbuf2 = dolby_vision_vf_peek_el(vf);
if (cur_dispbuf2) {
if (cur_dispbuf2->type & VIDTYPE_COMPRESS) {
VSYNC_WR_MPEG_REG(VD2_AFBC_HEAD_BADDR,
video2_onoff_state = VIDEO_ENABLE_STATE_ON_PENDING;
} else if (video2_onoff_state ==
VIDEO_ENABLE_STATE_ON_PENDING) {
- if (is_dolby_vision_on())
+ if (is_dolby_vision_on() &&
+ (!is_dolby_vision_el_disable() ||
+ for_dolby_vision_certification()))
vpp_misc_set &= ~(VPP_VD2_PREBLEND |
VPP_VD2_POSTBLEND | VPP_PREBLEND_EN);
else if (process_3d_type ||