diff --git a/driver/platform/kalama/src/msm_vidc_kalama.c b/driver/platform/kalama/src/msm_vidc_kalama.c index e77d0a161f..04aeea2704 100644 --- a/driver/platform/kalama/src/msm_vidc_kalama.c +++ b/driver/platform/kalama/src/msm_vidc_kalama.c @@ -295,10 +295,12 @@ static struct msm_platform_inst_capability instance_data_kalama[] = { * to get fence_id in input metadata buffer done. */ {META_OUTBUF_FENCE, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_OUTBUF_FENCE, - HFI_PROP_FENCE}, + HFI_PROP_FENCE, + CAP_FLAG_BITMASK}, /* * Client to do set_ctrl with FENCE_ID to set fence_id @@ -1600,16 +1602,22 @@ static struct msm_platform_inst_capability instance_data_kalama[] = { NULL, msm_vidc_set_u32}, {META_BITSTREAM_RESOLUTION, DEC, AV1, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_INPUT | + V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_BITSTREAM_RESOLUTION, - HFI_PROP_BITSTREAM_RESOLUTION}, + HFI_PROP_BITSTREAM_RESOLUTION, + CAP_FLAG_BITMASK}, {META_CROP_OFFSETS, DEC, AV1, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_INPUT | + V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_CROP_OFFSETS, - HFI_PROP_CROP_OFFSETS}, + HFI_PROP_CROP_OFFSETS, + CAP_FLAG_BITMASK}, {ALL_INTRA, ENC, H264|HEVC, V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE, @@ -1639,135 +1647,206 @@ static struct msm_platform_inst_capability instance_data_kalama[] = { NULL, NULL}, {META_LTR_MARK_USE, ENC, H264|HEVC, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_LTR_MARK_USE_DETAILS, - HFI_PROP_LTR_MARK_USE_DETAILS}, + HFI_PROP_LTR_MARK_USE_DETAILS, + CAP_FLAG_BITMASK}, {META_SEQ_HDR_NAL, ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_SEQ_HEADER_NAL, - HFI_PROP_METADATA_SEQ_HEADER_NAL}, + HFI_PROP_METADATA_SEQ_HEADER_NAL, + CAP_FLAG_BITMASK}, {META_DPB_MISR, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_DPB_LUMA_CHROMA_MISR, - HFI_PROP_DPB_LUMA_CHROMA_MISR}, + HFI_PROP_DPB_LUMA_CHROMA_MISR, + CAP_FLAG_BITMASK}, {META_OPB_MISR, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_OPB_LUMA_CHROMA_MISR, - HFI_PROP_OPB_LUMA_CHROMA_MISR}, + HFI_PROP_OPB_LUMA_CHROMA_MISR, + CAP_FLAG_BITMASK}, {META_INTERLACE, DEC, H264, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_INTERLACE, - HFI_PROP_INTERLACE_INFO}, + HFI_PROP_INTERLACE_INFO, + CAP_FLAG_BITMASK}, {META_TIMESTAMP, DEC | ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_TIMESTAMP, - HFI_PROP_TIMESTAMP}, + HFI_PROP_TIMESTAMP, + CAP_FLAG_BITMASK}, {META_CONCEALED_MB_CNT, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_CONCEALED_MB_COUNT, - HFI_PROP_CONEALED_MB_COUNT}, + HFI_PROP_CONEALED_MB_COUNT, + CAP_FLAG_BITMASK}, {META_HIST_INFO, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_HISTOGRAM_INFO, - HFI_PROP_HISTOGRAM_INFO}, + HFI_PROP_HISTOGRAM_INFO, + CAP_FLAG_BITMASK}, - {META_SEI_MASTERING_DISP, DEC|ENC, HEVC|HEIC|AV1, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + {META_SEI_MASTERING_DISP, ENC, HEVC|HEIC, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_SEI_MASTERING_DISPLAY_COLOUR, - HFI_PROP_SEI_MASTERING_DISPLAY_COLOUR}, + HFI_PROP_SEI_MASTERING_DISPLAY_COLOUR, + CAP_FLAG_BITMASK}, - {META_SEI_CLL, DEC|ENC, HEVC|HEIC|AV1, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + {META_SEI_MASTERING_DISP, DEC, HEVC|HEIC|AV1, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_INPUT | + V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_CID_MPEG_VIDC_METADATA_SEI_MASTERING_DISPLAY_COLOUR, + HFI_PROP_SEI_MASTERING_DISPLAY_COLOUR, + CAP_FLAG_BITMASK}, + + {META_SEI_CLL, ENC, HEVC|HEIC, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_SEI_CONTENT_LIGHT_LEVEL, - HFI_PROP_SEI_CONTENT_LIGHT_LEVEL}, + HFI_PROP_SEI_CONTENT_LIGHT_LEVEL, + CAP_FLAG_BITMASK}, - {META_HDR10PLUS, DEC | ENC, HEVC|HEIC|AV1, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + {META_SEI_CLL, DEC, HEVC|HEIC|AV1, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_INPUT | + V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_CID_MPEG_VIDC_METADATA_SEI_CONTENT_LIGHT_LEVEL, + HFI_PROP_SEI_CONTENT_LIGHT_LEVEL, + CAP_FLAG_BITMASK}, + + {META_HDR10PLUS, ENC, HEVC|HEIC, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_HDR10PLUS, - HFI_PROP_SEI_HDR10PLUS_USERDATA}, + HFI_PROP_SEI_HDR10PLUS_USERDATA, + CAP_FLAG_BITMASK}, + + {META_HDR10PLUS, DEC, HEVC|HEIC|AV1, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_INPUT | + V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_CID_MPEG_VIDC_METADATA_HDR10PLUS, + HFI_PROP_SEI_HDR10PLUS_USERDATA, + CAP_FLAG_BITMASK}, {META_EVA_STATS, ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_EVA_STATS, HFI_PROP_EVA_STAT_INFO, - 0, + CAP_FLAG_BITMASK, {0}, {ENH_LAYER_COUNT}}, - {META_BUF_TAG, DEC | ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + {META_BUF_TAG, ENC, CODECS_ALL, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT | + V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_BUFFER_TAG, - HFI_PROP_BUFFER_TAG}, + HFI_PROP_BUFFER_TAG, + CAP_FLAG_BITMASK}, + + /* + * when fence enabled, client needs output buffer_tag + * in input metadata buffer done. + */ + {META_BUF_TAG, DEC, CODECS_ALL, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT | + V4L2_MPEG_VIDC_META_TX_OUTPUT | V4L2_MPEG_VIDC_META_RX_INPUT | + V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_CID_MPEG_VIDC_METADATA_BUFFER_TAG, + HFI_PROP_BUFFER_TAG, + CAP_FLAG_BITMASK}, {META_DPB_TAG_LIST, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_DPB_TAG_LIST, - HFI_PROP_DPB_TAG_LIST}, - - {META_OUTPUT_BUF_TAG, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, - 0, - HFI_PROP_BUFFER_TAG}, + HFI_PROP_DPB_TAG_LIST, + CAP_FLAG_BITMASK}, {META_SUBFRAME_OUTPUT, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_SUBFRAME_OUTPUT, - HFI_PROP_SUBFRAME_OUTPUT}, + HFI_PROP_SUBFRAME_OUTPUT, + CAP_FLAG_BITMASK}, {META_ENC_QP_METADATA, ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_ENC_QP_METADATA, - HFI_PROP_ENC_QP_METADATA}, + HFI_PROP_ENC_QP_METADATA, + CAP_FLAG_BITMASK}, {META_ROI_INFO, ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_ROI_INFO, HFI_PROP_ROI_INFO, - CAP_FLAG_INPUT_PORT, + CAP_FLAG_INPUT_PORT | CAP_FLAG_BITMASK, {BITRATE_MODE, PIX_FMTS}, {0}, msm_vidc_adjust_roi_info, NULL}, {META_ROI_INFO, ENC, H264|HEVC, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_ROI_INFO, HFI_PROP_ROI_INFO, - CAP_FLAG_INPUT_PORT, + CAP_FLAG_INPUT_PORT | CAP_FLAG_BITMASK, {BITRATE_MODE, PIX_FMTS}, {MIN_QUALITY}, msm_vidc_adjust_roi_info, NULL}, {META_DEC_QP_METADATA, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_DEC_QP_METADATA, - HFI_PROP_DEC_QP_METADATA}, + HFI_PROP_DEC_QP_METADATA, + CAP_FLAG_BITMASK}, /* configure image properties */ {FRAME_WIDTH, ENC, HEIC, 128, 16384, 1, 16384}, @@ -1858,19 +1937,23 @@ static struct msm_platform_inst_capability instance_data_kalama[] = { {0}, {0}, NULL, msm_vidc_set_q16}, {META_SUBFRAME_OUTPUT, ENC, HEIC, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_SUBFRAME_OUTPUT, - HFI_PROP_SUBFRAME_OUTPUT}, + HFI_PROP_SUBFRAME_OUTPUT, + CAP_FLAG_BITMASK}, {COMPLEXITY, ENC, H264 | HEVC, 0, 100, 1, 100, V4L2_CID_MPEG_VIDC_VENC_COMPLEXITY}, {META_MAX_NUM_REORDER_FRAMES, DEC, HEVC | H264, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_MAX_NUM_REORDER_FRAMES, - HFI_PROP_MAX_NUM_REORDER_FRAMES}, + HFI_PROP_MAX_NUM_REORDER_FRAMES, + CAP_FLAG_BITMASK}, }; /* diff --git a/driver/platform/waipio/src/msm_vidc_waipio.c b/driver/platform/waipio/src/msm_vidc_waipio.c index 70850cdf20..8b6a3c0058 100644 --- a/driver/platform/waipio/src/msm_vidc_waipio.c +++ b/driver/platform/waipio/src/msm_vidc_waipio.c @@ -1489,135 +1489,198 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { NULL, NULL}, {META_LTR_MARK_USE, ENC, H264|HEVC, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_LTR_MARK_USE_DETAILS, - HFI_PROP_LTR_MARK_USE_DETAILS}, + HFI_PROP_LTR_MARK_USE_DETAILS, + CAP_FLAG_BITMASK}, {META_SEQ_HDR_NAL, ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_SEQ_HEADER_NAL, - HFI_PROP_METADATA_SEQ_HEADER_NAL}, + HFI_PROP_METADATA_SEQ_HEADER_NAL, + CAP_FLAG_BITMASK}, {META_DPB_MISR, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_DPB_LUMA_CHROMA_MISR, - HFI_PROP_DPB_LUMA_CHROMA_MISR}, + HFI_PROP_DPB_LUMA_CHROMA_MISR, + CAP_FLAG_BITMASK}, {META_OPB_MISR, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_OPB_LUMA_CHROMA_MISR, - HFI_PROP_OPB_LUMA_CHROMA_MISR}, + HFI_PROP_OPB_LUMA_CHROMA_MISR, + CAP_FLAG_BITMASK}, {META_INTERLACE, DEC, H264, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_INTERLACE, - HFI_PROP_INTERLACE_INFO}, + HFI_PROP_INTERLACE_INFO, + CAP_FLAG_BITMASK}, {META_TIMESTAMP, DEC | ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_TIMESTAMP, - HFI_PROP_TIMESTAMP}, + HFI_PROP_TIMESTAMP, + CAP_FLAG_BITMASK}, {META_CONCEALED_MB_CNT, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_CONCEALED_MB_COUNT, - HFI_PROP_CONEALED_MB_COUNT}, + HFI_PROP_CONEALED_MB_COUNT, + CAP_FLAG_BITMASK}, {META_HIST_INFO, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_HISTOGRAM_INFO, - HFI_PROP_HISTOGRAM_INFO}, + HFI_PROP_HISTOGRAM_INFO, + CAP_FLAG_BITMASK}, - {META_SEI_MASTERING_DISP, DEC|ENC, HEVC|HEIC, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + {META_SEI_MASTERING_DISP, ENC, HEVC|HEIC, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_SEI_MASTERING_DISPLAY_COLOUR, - HFI_PROP_SEI_MASTERING_DISPLAY_COLOUR}, + HFI_PROP_SEI_MASTERING_DISPLAY_COLOUR, + CAP_FLAG_BITMASK}, - {META_SEI_CLL, DEC|ENC, HEVC|HEIC, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + {META_SEI_MASTERING_DISP, DEC, HEVC|HEIC, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_CID_MPEG_VIDC_METADATA_SEI_MASTERING_DISPLAY_COLOUR, + HFI_PROP_SEI_MASTERING_DISPLAY_COLOUR, + CAP_FLAG_BITMASK}, + + {META_SEI_CLL, ENC, HEVC|HEIC, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_SEI_CONTENT_LIGHT_LEVEL, - HFI_PROP_SEI_CONTENT_LIGHT_LEVEL}, + HFI_PROP_SEI_CONTENT_LIGHT_LEVEL, + CAP_FLAG_BITMASK}, - {META_HDR10PLUS, DEC | ENC, HEVC|HEIC, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + {META_SEI_CLL, DEC, HEVC|HEIC, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_CID_MPEG_VIDC_METADATA_SEI_CONTENT_LIGHT_LEVEL, + HFI_PROP_SEI_CONTENT_LIGHT_LEVEL, + CAP_FLAG_BITMASK}, + + {META_HDR10PLUS, ENC, HEVC|HEIC, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_HDR10PLUS, - HFI_PROP_SEI_HDR10PLUS_USERDATA}, + HFI_PROP_SEI_HDR10PLUS_USERDATA, + CAP_FLAG_BITMASK}, + + {META_HDR10PLUS, DEC, HEVC|HEIC, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_CID_MPEG_VIDC_METADATA_HDR10PLUS, + HFI_PROP_SEI_HDR10PLUS_USERDATA, + CAP_FLAG_BITMASK}, {META_EVA_STATS, ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_EVA_STATS, HFI_PROP_EVA_STAT_INFO, - 0, + CAP_FLAG_BITMASK, {0}, {ENH_LAYER_COUNT}}, - {META_BUF_TAG, DEC | ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + {META_BUF_TAG, ENC, CODECS_ALL, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT | + V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_BUFFER_TAG, - HFI_PROP_BUFFER_TAG}, + HFI_PROP_BUFFER_TAG, + CAP_FLAG_BITMASK}, + + {META_BUF_TAG, DEC, CODECS_ALL, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT | + V4L2_MPEG_VIDC_META_TX_OUTPUT | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_CID_MPEG_VIDC_METADATA_BUFFER_TAG, + HFI_PROP_BUFFER_TAG, + CAP_FLAG_BITMASK}, {META_DPB_TAG_LIST, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_DPB_TAG_LIST, - HFI_PROP_DPB_TAG_LIST}, - - {META_OUTPUT_BUF_TAG, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, - 0, - HFI_PROP_BUFFER_TAG}, + HFI_PROP_DPB_TAG_LIST, + CAP_FLAG_BITMASK}, {META_SUBFRAME_OUTPUT, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_SUBFRAME_OUTPUT, - HFI_PROP_SUBFRAME_OUTPUT}, + HFI_PROP_SUBFRAME_OUTPUT, + CAP_FLAG_BITMASK}, {META_ENC_QP_METADATA, ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_ENC_QP_METADATA, - HFI_PROP_ENC_QP_METADATA}, + HFI_PROP_ENC_QP_METADATA, + CAP_FLAG_BITMASK}, {META_ROI_INFO, ENC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_ROI_INFO, HFI_PROP_ROI_INFO, - CAP_FLAG_INPUT_PORT, + CAP_FLAG_INPUT_PORT | CAP_FLAG_BITMASK, {BITRATE_MODE, PIX_FMTS}, {0}, msm_vidc_adjust_roi_info, NULL}, {META_ROI_INFO, ENC, H264|HEVC, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_ROI_INFO, HFI_PROP_ROI_INFO, - CAP_FLAG_INPUT_PORT, + CAP_FLAG_INPUT_PORT | CAP_FLAG_BITMASK, {BITRATE_MODE, PIX_FMTS}, {MIN_QUALITY}, msm_vidc_adjust_roi_info, NULL}, {META_DEC_QP_METADATA, DEC, CODECS_ALL, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_DEC_QP_METADATA, - HFI_PROP_DEC_QP_METADATA}, + HFI_PROP_DEC_QP_METADATA, + CAP_FLAG_BITMASK}, /* configure image properties */ {FRAME_WIDTH, ENC, HEIC, 128, 16384, 1, 16384}, @@ -1708,19 +1771,23 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { {0}, {0}, NULL, msm_vidc_set_q16}, {META_SUBFRAME_OUTPUT, ENC, HEIC, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_SUBFRAME_OUTPUT, - HFI_PROP_SUBFRAME_OUTPUT}, + HFI_PROP_SUBFRAME_OUTPUT, + CAP_FLAG_BITMASK}, {COMPLEXITY, ENC, H264 | HEVC, 0, 100, 1, 100, V4L2_CID_MPEG_VIDC_VENC_COMPLEXITY}, {META_MAX_NUM_REORDER_FRAMES, DEC, HEVC | H264, - V4L2_MPEG_VIDC_META_DISABLE, V4L2_MPEG_VIDC_META_MAX, - 1, V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_DISABLE, + V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT, + 0, V4L2_MPEG_VIDC_META_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_MAX_NUM_REORDER_FRAMES, - HFI_PROP_MAX_NUM_REORDER_FRAMES}, + HFI_PROP_MAX_NUM_REORDER_FRAMES, + CAP_FLAG_BITMASK}, }; /* diff --git a/driver/vidc/inc/msm_vidc_driver.h b/driver/vidc/inc/msm_vidc_driver.h index 192e2a5425..f0f6a16e1e 100644 --- a/driver/vidc/inc/msm_vidc_driver.h +++ b/driver/vidc/inc/msm_vidc_driver.h @@ -101,6 +101,14 @@ static inline is_internal_buffer(enum msm_vidc_buffer_type buffer_type) buffer_type == MSM_VIDC_BUF_PARTIAL_DATA; } +static inline bool is_meta_cap(u32 cap) +{ + if (cap > INST_CAP_NONE && cap < META_CAP_MAX) + return true; + + return false; +} + static inline bool is_meta_rx_inp_enabled(struct msm_vidc_inst *inst, u32 cap) { bool enabled = false; @@ -148,59 +156,30 @@ static inline bool is_meta_tx_out_enabled(struct msm_vidc_inst *inst, u32 cap) static inline bool is_input_meta_enabled(struct msm_vidc_inst *inst) { bool enabled = false; + u32 i; - if (is_decode_session(inst)) { - enabled = is_meta_tx_inp_enabled(inst, META_BUF_TAG) || - is_meta_rx_inp_enabled(inst, META_BUF_TAG) || - is_meta_tx_inp_enabled(inst, META_OUTBUF_FENCE) || - is_meta_rx_inp_enabled(inst, META_OUTBUF_FENCE); - } else if (is_encode_session(inst)) { - enabled = is_meta_tx_inp_enabled(inst, META_SEQ_HDR_NAL) || - is_meta_rx_inp_enabled(inst, META_SEQ_HDR_NAL) || - is_meta_tx_inp_enabled(inst, META_EVA_STATS) || - is_meta_rx_inp_enabled(inst, META_EVA_STATS) || - is_meta_tx_inp_enabled(inst, META_BUF_TAG) || - is_meta_rx_inp_enabled(inst, META_BUF_TAG) || - is_meta_tx_inp_enabled(inst, META_ROI_INFO) || - is_meta_rx_inp_enabled(inst, META_ROI_INFO); + for (i = INST_CAP_NONE + 1; i < META_CAP_MAX; i++) { + if (is_meta_tx_inp_enabled(inst, i) || + is_meta_rx_inp_enabled(inst, i)) { + enabled = true; + break; + } } + return enabled; } static inline bool is_output_meta_enabled(struct msm_vidc_inst *inst) { bool enabled = false; + u32 i; - if (is_decode_session(inst)) { - enabled = is_meta_tx_out_enabled(inst, META_BITSTREAM_RESOLUTION) || - is_meta_rx_out_enabled(inst, META_BITSTREAM_RESOLUTION) || - is_meta_tx_out_enabled(inst, META_CROP_OFFSETS) || - is_meta_rx_out_enabled(inst, META_CROP_OFFSETS) || - is_meta_tx_out_enabled(inst, META_DPB_MISR) || - is_meta_rx_out_enabled(inst, META_DPB_MISR) || - is_meta_tx_out_enabled(inst, META_OPB_MISR) || - is_meta_rx_out_enabled(inst, META_OPB_MISR) || - is_meta_tx_out_enabled(inst, META_INTERLACE) || - is_meta_rx_out_enabled(inst, META_INTERLACE) || - is_meta_tx_out_enabled(inst, META_CONCEALED_MB_CNT) || - is_meta_rx_out_enabled(inst, META_CONCEALED_MB_CNT) || - is_meta_tx_out_enabled(inst, META_SEI_MASTERING_DISP) || - is_meta_rx_out_enabled(inst, META_SEI_MASTERING_DISP) || - is_meta_tx_out_enabled(inst, META_SEI_CLL) || - is_meta_rx_out_enabled(inst, META_SEI_CLL) || - is_meta_tx_out_enabled(inst, META_BUF_TAG) || - is_meta_rx_out_enabled(inst, META_BUF_TAG) || - is_meta_tx_out_enabled(inst, META_DPB_TAG_LIST) || - is_meta_rx_out_enabled(inst, META_DPB_TAG_LIST) || - is_meta_tx_out_enabled(inst, META_SUBFRAME_OUTPUT) || - is_meta_rx_out_enabled(inst, META_SUBFRAME_OUTPUT) || - is_meta_tx_out_enabled(inst, META_MAX_NUM_REORDER_FRAMES) || - is_meta_rx_out_enabled(inst, META_MAX_NUM_REORDER_FRAMES); - } else if (is_encode_session(inst)) { - enabled = is_meta_tx_out_enabled(inst, META_LTR_MARK_USE) || - is_meta_rx_out_enabled(inst, META_LTR_MARK_USE) || - is_meta_tx_out_enabled(inst, META_BUF_TAG) || - is_meta_rx_out_enabled(inst, META_BUF_TAG); + for (i = INST_CAP_NONE + 1; i < META_CAP_MAX; i++) { + if (is_meta_tx_out_enabled(inst, i) || + is_meta_rx_out_enabled(inst, i)) { + enabled = true; + break; + } } return enabled; @@ -454,7 +433,10 @@ struct msm_vidc_inst *get_inst(struct msm_vidc_core *core, void put_inst(struct msm_vidc_inst *inst); bool msm_vidc_allow_s_fmt(struct msm_vidc_inst *inst, u32 type); bool msm_vidc_allow_s_ctrl(struct msm_vidc_inst *inst, u32 id); -bool msm_vidc_allow_metadata(struct msm_vidc_inst *inst, u32 cap_id); +bool msm_vidc_allow_metadata_delivery(struct msm_vidc_inst *inst, + u32 cap_id, u32 port); +bool msm_vidc_allow_metadata_subscription(struct msm_vidc_inst *inst, + u32 cap_id, u32 port); bool msm_vidc_allow_property(struct msm_vidc_inst *inst, u32 hfi_id); int msm_vidc_update_property_cap(struct msm_vidc_inst *inst, u32 hfi_id, bool allow); diff --git a/driver/vidc/inc/msm_vidc_internal.h b/driver/vidc/inc/msm_vidc_internal.h index aaf18769df..f9f28ac816 100644 --- a/driver/vidc/inc/msm_vidc_internal.h +++ b/driver/vidc/inc/msm_vidc_internal.h @@ -352,6 +352,33 @@ enum msm_vidc_core_capability_type { */ enum msm_vidc_inst_capability_type { INST_CAP_NONE = 0, + /* place all metadata after this line + * (Between INST_CAP_NONE and META_CAP_MAX) + */ + META_SEQ_HDR_NAL, + META_BITSTREAM_RESOLUTION, + META_CROP_OFFSETS, + META_DPB_MISR, + META_OPB_MISR, + META_INTERLACE, + META_OUTBUF_FENCE, + META_LTR_MARK_USE, + META_TIMESTAMP, + META_CONCEALED_MB_CNT, + META_HIST_INFO, + META_SEI_MASTERING_DISP, + META_SEI_CLL, + META_HDR10PLUS, + META_BUF_TAG, + META_DPB_TAG_LIST, + META_SUBFRAME_OUTPUT, + META_ENC_QP_METADATA, + META_DEC_QP_METADATA, + META_MAX_NUM_REORDER_FRAMES, + META_EVA_STATS, + META_ROI_INFO, + META_CAP_MAX, + /* end of metadata caps */ FRAME_WIDTH, LOSSLESS_FRAME_WIDTH, SECURE_FRAME_WIDTH, @@ -378,7 +405,6 @@ enum msm_vidc_inst_capability_type { MB_CYCLES_FW, MB_CYCLES_FW_VPP, SECURE_MODE, - META_OUTBUF_FENCE, FENCE_ID, FENCE_FD, TS_REORDER, @@ -389,7 +415,6 @@ enum msm_vidc_inst_capability_type { SUPER_FRAME, HEADER_MODE, PREPEND_SPSPPS_TO_IDR, - META_SEQ_HDR_NAL, WITHOUT_STARTCODE, NAL_LENGTH_FIELD, REQUEST_I_FRAME, @@ -451,32 +476,11 @@ enum msm_vidc_inst_capability_type { DRAP, INPUT_METADATA_FD, INPUT_META_VIA_REQUEST, - META_BITSTREAM_RESOLUTION, - META_CROP_OFFSETS, - META_DPB_MISR, - META_OPB_MISR, - META_INTERLACE, ENC_IP_CR, - META_LTR_MARK_USE, - META_TIMESTAMP, - META_CONCEALED_MB_CNT, - META_HIST_INFO, - META_SEI_MASTERING_DISP, - META_SEI_CLL, - META_HDR10PLUS, - META_EVA_STATS, - META_BUF_TAG, - META_DPB_TAG_LIST, - META_OUTPUT_BUF_TAG, - META_SUBFRAME_OUTPUT, - META_ENC_QP_METADATA, - META_DEC_QP_METADATA, COMPLEXITY, - META_MAX_NUM_REORDER_FRAMES, /* place all root(no parent) enums before this line */ PROFILE, - META_ROI_INFO, ENH_LAYER_COUNT, BIT_RATE, LOWLATENCY_MODE, @@ -509,7 +513,6 @@ enum msm_vidc_inst_capability_type { INPUT_BUF_HOST_MAX_COUNT, OUTPUT_BUF_HOST_MAX_COUNT, /* place all leaf(no child) enums before this line */ - INST_CAP_MAX, }; @@ -520,6 +523,7 @@ enum msm_vidc_inst_capability_flags { CAP_FLAG_INPUT_PORT = BIT(2), CAP_FLAG_OUTPUT_PORT = BIT(3), CAP_FLAG_CLIENT_SET = BIT(4), + CAP_FLAG_BITMASK = BIT(5), }; struct msm_vidc_inst_cap { diff --git a/driver/vidc/src/msm_vdec.c b/driver/vidc/src/msm_vdec.c index 33af65974d..4e40fe2820 100644 --- a/driver/vidc/src/msm_vdec.c +++ b/driver/vidc/src/msm_vdec.c @@ -931,35 +931,6 @@ static int msm_vdec_subscribe_metadata(struct msm_vidc_inst *inst, u32 payload[32] = {0}; u32 i, count = 0; struct msm_vidc_inst_capability *capability; - static const u32 metadata_input_list[] = { - META_OUTBUF_FENCE, - /* - * when fence enabled, client needs output buffer_tag - * in input metadata buffer done. - */ - META_OUTPUT_BUF_TAG, - }; - static const u32 metadata_output_list[] = { - META_BITSTREAM_RESOLUTION, - META_CROP_OFFSETS, - META_DPB_MISR, - META_OPB_MISR, - META_INTERLACE, - META_TIMESTAMP, - META_CONCEALED_MB_CNT, - META_HIST_INFO, - META_SEI_MASTERING_DISP, - META_SEI_CLL, - META_HDR10PLUS, - /* - * client needs input buffer tag in output metadata buffer done. - */ - META_BUF_TAG, - META_DPB_TAG_LIST, - META_SUBFRAME_OUTPUT, - META_DEC_QP_METADATA, - META_MAX_NUM_REORDER_FRAMES, - }; if (!inst || !inst->capabilities) { d_vpr_e("%s: invalid params\n", __func__); @@ -970,20 +941,20 @@ static int msm_vdec_subscribe_metadata(struct msm_vidc_inst *inst, capability = inst->capabilities; payload[0] = HFI_MODE_METADATA; if (port == INPUT_PORT) { - for (i = 0; i < ARRAY_SIZE(metadata_input_list); i++) { - if (is_meta_rx_inp_enabled(inst, metadata_input_list[i]) && - msm_vidc_allow_metadata(inst, metadata_input_list[i])) { - payload[count + 1] = - capability->cap[metadata_input_list[i]].hfi_id; + for (i = INST_CAP_NONE + 1; i < META_CAP_MAX; i++) { + if (is_meta_rx_inp_enabled(inst, i) && + msm_vidc_allow_metadata_subscription( + inst, i, port)) { + payload[count + 1] = capability->cap[i].hfi_id; count++; } } } else if (port == OUTPUT_PORT) { - for (i = 0; i < ARRAY_SIZE(metadata_output_list); i++) { - if (is_meta_rx_out_enabled(inst, metadata_output_list[i]) && - msm_vidc_allow_metadata(inst, metadata_output_list[i])) { - payload[count + 1] = - capability->cap[metadata_output_list[i]].hfi_id; + for (i = INST_CAP_NONE + 1; i < META_CAP_MAX; i++) { + if (is_meta_rx_out_enabled(inst, i) && + msm_vidc_allow_metadata_subscription( + inst, i, port)) { + payload[count + 1] = capability->cap[i].hfi_id; count++; } } @@ -1011,12 +982,6 @@ static int msm_vdec_set_delivery_mode_metadata(struct msm_vidc_inst *inst, u32 payload[32] = {0}; u32 i, count = 0; struct msm_vidc_inst_capability *capability; - static const u32 metadata_input_list[] = { - META_BUF_TAG, - }; - static const u32 metadata_output_list[] = { - META_OUTPUT_BUF_TAG, - }; if (!inst || !inst->capabilities) { d_vpr_e("%s: invalid params\n", __func__); @@ -1028,19 +993,18 @@ static int msm_vdec_set_delivery_mode_metadata(struct msm_vidc_inst *inst, payload[0] = HFI_MODE_METADATA; if (port == INPUT_PORT) { - for (i = 0; i < ARRAY_SIZE(metadata_input_list); i++) { - if (is_meta_tx_inp_enabled(inst, metadata_input_list[i])) { - payload[count + 1] = - capability->cap[metadata_input_list[i]].hfi_id; + for (i = INST_CAP_NONE + 1; i < META_CAP_MAX; i++) { + if (is_meta_tx_inp_enabled(inst, i)) { + payload[count + 1] = capability->cap[i].hfi_id; count++; } } } else if (port == OUTPUT_PORT) { - for (i = 0; i < ARRAY_SIZE(metadata_output_list); i++) { - if (is_meta_tx_out_enabled(inst, metadata_output_list[i]) && - msm_vidc_allow_metadata(inst, metadata_output_list[i])) { - payload[count + 1] = - capability->cap[metadata_output_list[i]].hfi_id; + for (i = INST_CAP_NONE + 1; i < META_CAP_MAX; i++) { + if (is_meta_tx_out_enabled(inst, i) && + msm_vidc_allow_metadata_delivery( + inst, i, port)) { + payload[count + 1] = capability->cap[i].hfi_id; count++; } } diff --git a/driver/vidc/src/msm_venc.c b/driver/vidc/src/msm_venc.c index 6619efb6bd..fc30eb1ffb 100644 --- a/driver/vidc/src/msm_venc.c +++ b/driver/vidc/src/msm_venc.c @@ -681,15 +681,6 @@ static int msm_venc_metadata_delivery(struct msm_vidc_inst *inst, u32 payload[32] = {0}; u32 i, count = 0; struct msm_vidc_inst_capability *capability; - static const u32 metadata_output_list[] = {}; - static const u32 metadata_input_list[] = { - META_SEI_MASTERING_DISP, - META_SEI_CLL, - META_HDR10PLUS, - META_EVA_STATS, - META_BUF_TAG, - META_ROI_INFO, - }; if (!inst || !inst->core) { d_vpr_e("%s: invalid params\n", __func__); @@ -702,18 +693,16 @@ static int msm_venc_metadata_delivery(struct msm_vidc_inst *inst, payload[0] = HFI_MODE_METADATA; if (port == INPUT_PORT) { - for (i = 0; i < ARRAY_SIZE(metadata_input_list); i++) { - if (is_meta_tx_inp_enabled(inst, metadata_input_list[i])) { - payload[count + 1] = - capability->cap[metadata_input_list[i]].hfi_id; + for (i = INST_CAP_NONE + 1; i < META_CAP_MAX; i++) { + if (is_meta_tx_inp_enabled(inst, i)) { + payload[count + 1] = capability->cap[i].hfi_id; count++; } } } else if (port == OUTPUT_PORT) { - for (i = 0; i < ARRAY_SIZE(metadata_output_list); i++) { - if (is_meta_tx_out_enabled(inst, metadata_output_list[i])) { - payload[count + 1] = - capability->cap[metadata_output_list[i]].hfi_id; + for (i = INST_CAP_NONE + 1; i < META_CAP_MAX; i++) { + if (is_meta_tx_out_enabled(inst, i)) { + payload[count + 1] = capability->cap[i].hfi_id; count++; } } @@ -741,15 +730,6 @@ static int msm_venc_metadata_subscription(struct msm_vidc_inst *inst, u32 payload[32] = {0}; u32 i, count = 0; struct msm_vidc_inst_capability *capability; - static const u32 metadata_input_list[] = {}; - static const u32 metadata_output_list[] = { - META_LTR_MARK_USE, - META_SEQ_HDR_NAL, - META_TIMESTAMP, - META_BUF_TAG, - META_SUBFRAME_OUTPUT, - META_ENC_QP_METADATA, - }; if (!inst) { d_vpr_e("%s: invalid params\n", __func__); @@ -761,18 +741,16 @@ static int msm_venc_metadata_subscription(struct msm_vidc_inst *inst, payload[0] = HFI_MODE_METADATA; if (port == INPUT_PORT) { - for (i = 0; i < ARRAY_SIZE(metadata_input_list); i++) { - if (is_meta_rx_inp_enabled(inst, metadata_input_list[i])) { - payload[count + 1] = - capability->cap[metadata_input_list[i]].hfi_id; + for (i = INST_CAP_NONE + 1; i < META_CAP_MAX; i++) { + if (is_meta_rx_inp_enabled(inst, i)) { + payload[count + 1] = capability->cap[i].hfi_id; count++; } } } else if (port == OUTPUT_PORT) { - for (i = 0; i < ARRAY_SIZE(metadata_output_list); i++) { - if (is_meta_rx_out_enabled(inst, metadata_output_list[i])) { - payload[count + 1] = - capability->cap[metadata_output_list[i]].hfi_id; + for (i = INST_CAP_NONE + 1; i < META_CAP_MAX; i++) { + if (is_meta_rx_out_enabled(inst, i)) { + payload[count + 1] = capability->cap[i].hfi_id; count++; } } diff --git a/driver/vidc/src/msm_vidc_control.c b/driver/vidc/src/msm_vidc_control.c index 65a344a14e..2b3c25e7fd 100644 --- a/driver/vidc/src/msm_vidc_control.c +++ b/driver/vidc/src/msm_vidc_control.c @@ -63,32 +63,6 @@ static bool is_priv_ctrl(u32 id) return private; } -static bool is_meta_ctrl(u32 id) -{ - return (id == V4L2_CID_MPEG_VIDC_METADATA_LTR_MARK_USE_DETAILS || - id == V4L2_CID_MPEG_VIDC_METADATA_SEQ_HEADER_NAL || - id == V4L2_CID_MPEG_VIDC_METADATA_DPB_LUMA_CHROMA_MISR || - id == V4L2_CID_MPEG_VIDC_METADATA_OPB_LUMA_CHROMA_MISR || - id == V4L2_CID_MPEG_VIDC_METADATA_INTERLACE || - id == V4L2_CID_MPEG_VIDC_METADATA_CONCEALED_MB_COUNT || - id == V4L2_CID_MPEG_VIDC_METADATA_HISTOGRAM_INFO || - id == V4L2_CID_MPEG_VIDC_METADATA_SEI_MASTERING_DISPLAY_COLOUR || - id == V4L2_CID_MPEG_VIDC_METADATA_SEI_CONTENT_LIGHT_LEVEL || - id == V4L2_CID_MPEG_VIDC_METADATA_HDR10PLUS || - id == V4L2_CID_MPEG_VIDC_METADATA_EVA_STATS || - id == V4L2_CID_MPEG_VIDC_METADATA_BUFFER_TAG || - id == V4L2_CID_MPEG_VIDC_METADATA_DPB_TAG_LIST || - id == V4L2_CID_MPEG_VIDC_METADATA_SUBFRAME_OUTPUT || - id == V4L2_CID_MPEG_VIDC_METADATA_ROI_INFO || - id == V4L2_CID_MPEG_VIDC_METADATA_TIMESTAMP || - id == V4L2_CID_MPEG_VIDC_METADATA_ENC_QP_METADATA || - id == V4L2_CID_MPEG_VIDC_METADATA_DEC_QP_METADATA || - id == V4L2_CID_MPEG_VIDC_METADATA_BITSTREAM_RESOLUTION || - id == V4L2_CID_MPEG_VIDC_METADATA_CROP_OFFSETS || - id == V4L2_CID_MPEG_VIDC_METADATA_MAX_NUM_REORDER_FRAMES || - id == V4L2_CID_MPEG_VIDC_METADATA_OUTBUF_FENCE); -} - static const char *const mpeg_video_rate_control[] = { "VBR", "CBR", @@ -433,7 +407,7 @@ int msm_vidc_update_cap_value(struct msm_vidc_inst *inst, u32 cap_id, prev_value = inst->capabilities->cap[cap_id].value; - if (is_meta_ctrl(inst->capabilities->cap[cap_id].v4l2_id)) { + if (is_meta_cap(cap_id)) { /* * cumulative control value if client set same metadata * control multiple times. @@ -831,10 +805,24 @@ int msm_vidc_ctrl_init(struct msm_vidc_inst *inst) ctrl_cfg.max = capability->cap[idx].max; ctrl_cfg.min = capability->cap[idx].min; ctrl_cfg.ops = core->v4l2_ctrl_ops; - ctrl_cfg.type = (capability->cap[idx].flags & - CAP_FLAG_MENU) ? - V4L2_CTRL_TYPE_MENU : - V4L2_CTRL_TYPE_INTEGER; + if (capability->cap[idx].flags & CAP_FLAG_MENU) + ctrl_cfg.type = V4L2_CTRL_TYPE_MENU; + else if (capability->cap[idx].flags & CAP_FLAG_BITMASK) + ctrl_cfg.type = V4L2_CTRL_TYPE_BITMASK; + else + ctrl_cfg.type = V4L2_CTRL_TYPE_INTEGER; + /* allow all metadata modes from v4l2 side */ + if (is_meta_cap(idx)) { + ctrl_cfg.max = V4L2_MPEG_VIDC_META_MAX - 1; + /* bitmask is expected to be enabled for meta controls */ + if (ctrl_cfg.type != V4L2_CTRL_TYPE_BITMASK) { + i_vpr_e(inst, + "%s: missing bitmask for cap %s\n", + __func__, cap_name(idx)); + rc = -EINVAL; + goto error; + } + } if (ctrl_cfg.type == V4L2_CTRL_TYPE_MENU) { ctrl_cfg.menu_skip_mask = ~(capability->cap[idx].step_or_mask); @@ -873,8 +861,8 @@ int msm_vidc_ctrl_init(struct msm_vidc_inst *inst) } } if (!ctrl) { - i_vpr_e(inst, "%s: invalid ctrl %#x\n", __func__, - capability->cap[idx].v4l2_id); + i_vpr_e(inst, "%s: invalid ctrl %#x cap %24s\n", __func__, + capability->cap[idx].v4l2_id, cap_name(idx)); rc = -EINVAL; goto error; } @@ -1068,25 +1056,22 @@ static int msm_vidc_update_static_property(struct msm_vidc_inst *inst, msm_vidc_allow_dcvs(inst); } - if (is_meta_ctrl(ctrl->id)) { - if (cap_id == META_DPB_TAG_LIST) { - /* - * To subscribe HFI_PROP_DPB_TAG_LIST - * data in FBD, HFI_PROP_BUFFER_TAG data - * must be delivered via FTB. Hence, update - * META_OUTPUT_BUF_TAG to transfer on output port - * when META_DPB_TAG_LIST is enbaled. - */ - if (is_meta_rx_out_enabled(inst, META_DPB_TAG_LIST)) { - inst->capabilities->cap[META_OUTPUT_BUF_TAG].value |= - V4L2_MPEG_VIDC_META_TX_OUTPUT | V4L2_MPEG_VIDC_META_ENABLE; - } - } + if (is_meta_cap(cap_id)) { + /* validate metadata control value against allowed settings */ + if ((ctrl->val & inst->capabilities->cap[cap_id].max) != ctrl->val) { + i_vpr_e(inst, + "%s: allowed bits for cap %s is %#x, client set %#x\n", + __func__, cap_name(cap_id), + inst->capabilities->cap[cap_id].max, + ctrl->val); + return -EINVAL; + } rc = msm_vidc_update_meta_port_settings(inst); if (rc) return rc; } + rc = msm_vidc_update_buffer_count_if_needed(inst, ctrl); if (rc) return rc; diff --git a/driver/vidc/src/msm_vidc_driver.c b/driver/vidc/src/msm_vidc_driver.c index e098f1afd2..0ce8f3aa0d 100644 --- a/driver/vidc/src/msm_vidc_driver.c +++ b/driver/vidc/src/msm_vidc_driver.c @@ -57,6 +57,29 @@ struct msm_vidc_cap_name { static const struct msm_vidc_cap_name cap_name_arr[] = { {INST_CAP_NONE, "INST_CAP_NONE" }, + {META_SEQ_HDR_NAL, "META_SEQ_HDR_NAL" }, + {META_BITSTREAM_RESOLUTION, "META_BITSTREAM_RESOLUTION" }, + {META_CROP_OFFSETS, "META_CROP_OFFSETS" }, + {META_DPB_MISR, "META_DPB_MISR" }, + {META_OPB_MISR, "META_OPB_MISR" }, + {META_INTERLACE, "META_INTERLACE" }, + {META_OUTBUF_FENCE, "META_OUTBUF_FENCE" }, + {META_LTR_MARK_USE, "META_LTR_MARK_USE" }, + {META_TIMESTAMP, "META_TIMESTAMP" }, + {META_CONCEALED_MB_CNT, "META_CONCEALED_MB_CNT" }, + {META_HIST_INFO, "META_HIST_INFO" }, + {META_SEI_MASTERING_DISP, "META_SEI_MASTERING_DISP" }, + {META_SEI_CLL, "META_SEI_CLL" }, + {META_HDR10PLUS, "META_HDR10PLUS" }, + {META_BUF_TAG, "META_BUF_TAG" }, + {META_DPB_TAG_LIST, "META_DPB_TAG_LIST" }, + {META_SUBFRAME_OUTPUT, "META_SUBFRAME_OUTPUT" }, + {META_ENC_QP_METADATA, "META_ENC_QP_METADATA" }, + {META_DEC_QP_METADATA, "META_DEC_QP_METADATA" }, + {META_MAX_NUM_REORDER_FRAMES, "META_MAX_NUM_REORDER_FRAMES"}, + {META_EVA_STATS, "META_EVA_STATS" }, + {META_ROI_INFO, "META_ROI_INFO" }, + {META_CAP_MAX, "META_CAP_MAX" }, {FRAME_WIDTH, "FRAME_WIDTH" }, {LOSSLESS_FRAME_WIDTH, "LOSSLESS_FRAME_WIDTH" }, {SECURE_FRAME_WIDTH, "SECURE_FRAME_WIDTH" }, @@ -83,7 +106,6 @@ static const struct msm_vidc_cap_name cap_name_arr[] = { {MB_CYCLES_FW, "MB_CYCLES_FW" }, {MB_CYCLES_FW_VPP, "MB_CYCLES_FW_VPP" }, {SECURE_MODE, "SECURE_MODE" }, - {META_OUTBUF_FENCE, "META_OUTBUF_FENCE" }, {FENCE_ID, "FENCE_ID" }, {FENCE_FD, "FENCE_FD" }, {TS_REORDER, "TS_REORDER" }, @@ -94,7 +116,6 @@ static const struct msm_vidc_cap_name cap_name_arr[] = { {SUPER_FRAME, "SUPER_FRAME" }, {HEADER_MODE, "HEADER_MODE" }, {PREPEND_SPSPPS_TO_IDR, "PREPEND_SPSPPS_TO_IDR" }, - {META_SEQ_HDR_NAL, "META_SEQ_HDR_NAL" }, {WITHOUT_STARTCODE, "WITHOUT_STARTCODE" }, {NAL_LENGTH_FIELD, "NAL_LENGTH_FIELD" }, {REQUEST_I_FRAME, "REQUEST_I_FRAME" }, @@ -156,30 +177,9 @@ static const struct msm_vidc_cap_name cap_name_arr[] = { {DRAP, "DRAP" }, {INPUT_METADATA_FD, "INPUT_METADATA_FD" }, {INPUT_META_VIA_REQUEST, "INPUT_META_VIA_REQUEST" }, - {META_BITSTREAM_RESOLUTION, "META_BITSTREAM_RESOLUTION" }, - {META_CROP_OFFSETS, "META_CROP_OFFSETS" }, - {META_DPB_MISR, "META_DPB_MISR" }, - {META_OPB_MISR, "META_OPB_MISR" }, - {META_INTERLACE, "META_INTERLACE" }, {ENC_IP_CR, "ENC_IP_CR" }, - {META_LTR_MARK_USE, "META_LTR_MARK_USE" }, - {META_TIMESTAMP, "META_TIMESTAMP" }, - {META_CONCEALED_MB_CNT, "META_CONCEALED_MB_CNT" }, - {META_HIST_INFO, "META_HIST_INFO" }, - {META_SEI_MASTERING_DISP, "META_SEI_MASTERING_DISP" }, - {META_SEI_CLL, "META_SEI_CLL" }, - {META_HDR10PLUS, "META_HDR10PLUS" }, - {META_EVA_STATS, "META_EVA_STATS" }, - {META_BUF_TAG, "META_BUF_TAG" }, - {META_DPB_TAG_LIST, "META_DPB_TAG_LIST" }, - {META_OUTPUT_BUF_TAG, "META_OUTPUT_BUF_TAG" }, - {META_SUBFRAME_OUTPUT, "META_SUBFRAME_OUTPUT" }, - {META_ENC_QP_METADATA, "META_ENC_QP_METADATA" }, - {META_DEC_QP_METADATA, "META_DEC_QP_METADATA" }, {COMPLEXITY, "COMPLEXITY" }, - {META_MAX_NUM_REORDER_FRAMES, "META_MAX_NUM_REORDER_FRAMES"}, {PROFILE, "PROFILE" }, - {META_ROI_INFO, "META_ROI_INFO" }, {ENH_LAYER_COUNT, "ENH_LAYER_COUNT" }, {BIT_RATE, "BIT_RATE" }, {LOWLATENCY_MODE, "LOWLATENCY_MODE" }, @@ -1379,7 +1379,14 @@ exit: return allow; } -bool msm_vidc_allow_metadata(struct msm_vidc_inst *inst, u32 cap_id) +bool msm_vidc_allow_metadata_delivery(struct msm_vidc_inst *inst, u32 cap_id, + u32 port) +{ + return true; +} + +bool msm_vidc_allow_metadata_subscription(struct msm_vidc_inst *inst, u32 cap_id, + u32 port) { bool is_allowed = true; @@ -1388,19 +1395,42 @@ bool msm_vidc_allow_metadata(struct msm_vidc_inst *inst, u32 cap_id) return false; } - switch (cap_id) { - case META_OUTPUT_BUF_TAG: - case META_DPB_TAG_LIST: - if (!is_ubwc_colorformat(inst->capabilities->cap[PIX_FMTS].value)) { - i_vpr_h(inst, - "%s: cap: %24s not allowed for split mode\n", - __func__, cap_name(cap_id)); - is_allowed = false; + if (port == INPUT_PORT) { + switch (cap_id) { + case META_BUF_TAG: + case META_BITSTREAM_RESOLUTION: + case META_CROP_OFFSETS: + case META_SEI_MASTERING_DISP: + case META_SEI_CLL: + case META_HDR10PLUS: + if (!is_meta_rx_inp_enabled(inst, META_OUTBUF_FENCE)) { + i_vpr_h(inst, + "%s: cap: %24s not allowed as output buffer fence is disabled\n", + __func__, cap_name(cap_id)); + is_allowed = false; + } + break; + default: + is_allowed = true; + break; } - break; - default: - is_allowed = true; - break; + } else if (port == OUTPUT_PORT) { + switch (cap_id) { + case META_DPB_TAG_LIST: + if (!is_ubwc_colorformat(inst->capabilities->cap[PIX_FMTS].value)) { + i_vpr_h(inst, + "%s: cap: %24s not allowed for split mode\n", + __func__, cap_name(cap_id)); + is_allowed = false; + } + break; + default: + is_allowed = true; + break; + } + } else { + i_vpr_e(inst, "%s: invalid port %d\n", __func__, port); + is_allowed = false; } return is_allowed;