(V4L2_CID_MPEG_MFC_BASE + 198)
#define V4L2_CID_MPEG_VIDEO_HIERARCHICAL_BITRATE_CTRL \
(V4L2_CID_MPEG_MFC_BASE + 199)
+#define V4L2_CID_MPEG_VIDEO_DECODING_ORDER \
+ (V4L2_CID_MPEG_MFC_BASE + 200)
/* QP BOUND interface */
#define V4L2_CID_MPEG_VIDEO_H264_MAX_QP_P \
/* Parsing all including PPS */
reg |= (0x1 << MFC_REG_D_DEC_OPT_SPECIAL_PARSING_SHIFT);
+ /* Enabe decoding order */
+ if (dec->decoding_order)
+ reg |= (0x1 << MFC_REG_D_DEC_OPT_DECODING_ORDER_ENABLE);
+
MFC_WRITEL(reg, MFC_REG_D_DEC_OPTIONS);
MFC_WRITEL(MFC_CONCEAL_COLOR, MFC_REG_D_FORCE_PIXEL_VAL);
unsigned int color_range;
unsigned int color_space;
+ unsigned int decoding_order;
/*
* new variables should be added above
* ============ boundary line ============
.step = 1,
.default_value = 0,
},
+ {
+ .id = V4L2_CID_MPEG_VIDEO_DECODING_ORDER,
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
+ .name = "decoding order enable",
+ .minimum = 0,
+ .maximum = 1,
+ .step = 1,
+ .default_value = 0,
+ },
+
};
#define NUM_CTRLS ARRAY_SIZE(controls)
mfc_debug(2, "[MEMINFO][HDR+] shared handle fd: %d, vaddr: 0x%p\n",
dec->sh_handle_hdr.fd, dec->sh_handle_hdr.vaddr);
break;
+ case V4L2_CID_MPEG_VIDEO_DECODING_ORDER:
+ dec->decoding_order = ctrl->value;
+ break;
default:
list_for_each_entry(ctx_ctrl, &ctx->ctrls, list) {
if (!(ctx_ctrl->type & MFC_CTRL_TYPE_SET))
#define MFC_REG_D_DEC_OPT_IDR_DECODING_MASK 0x1
#define MFC_REG_D_DEC_OPT_IDR_DECODING_SHIFT 6
#define MFC_REG_D_DEC_OPT_DISCARD_RCV_HEADER_SHIFT 7
-#define MFC_REG_D_DEC_OPT_CONCEAL_CONTROL_SHIFT 8
+#define MFC_REG_D_DEC_OPT_CONCEAL_CONTROL_SHIFT 8
#define MFC_REG_D_DEC_OPT_PARALLEL_DISABLE_SHIFT 11
-#define MFC_REG_D_DEC_OPT_REALLOC_CONTROL_SHIFT 13
-#define MFC_REG_D_DEC_OPT_SPECIAL_PARSING_SHIFT 15
+#define MFC_REG_D_DEC_OPT_REALLOC_CONTROL_SHIFT 13
+#define MFC_REG_D_DEC_OPT_SPECIAL_PARSING_SHIFT 15
#define MFC_REG_D_DEC_OPT_THUMBNAIL_DECODING 16
+#define MFC_REG_D_DEC_OPT_DECODING_ORDER_ENABLE 17
/* 0xF0C4: MFC_REG_D_SEI_ENABLE */