⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssbsipmpeg4decode.c

📁 6410BSP3
💻 C
📖 第 1 页 / 共 2 页
字号:
    //  Input Parameter Checking  //
    ////////////////////////////////
    if (openHandle == NULL) {
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "openHandle is NULL\n");
        return SSBSIP_MPEG4_DEC_RET_ERR_INVALID_HANDLE;
    }
    if (value == NULL) {
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "value is NULL\n");
        return SSBSIP_MPEG4_DEC_RET_ERR_INVALID_HANDLE;
    }


    pCTX  = (_MFCLIB_MPEG4_DEC *) openHandle;

    switch (conf_type) {

    case MPEG4_DEC_SETCONF_POST_ROTATE:

        mfc_args.set_config.in_config_param     = MFC_SET_CONFIG_DEC_ROTATE;
        mfc_args.set_config.in_config_value[0]  = *((unsigned int *) value);
        mfc_args.set_config.in_config_value[1]  = 0;
        r = DeviceIoControl(pCTX->hOpen, IOCTL_MFC_SET_CONFIG,
                            &mfc_args, sizeof(MFC_SET_CONFIG_ARG),
                            NULL, 0,
                            NULL,
                            NULL);
        if ((r == FALSE) || (mfc_args.set_config.ret_code != 0)) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "Error in MPEG4_DEC_SETCONF_POST_ROTATE.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_SETCONF_FAIL;
        }
        break;

    case MPEG4_DEC_SETCONF_CACHE_CLEAN:
        inParam = (int *)value;
        //printf("MPEG4_DEC_SETCONF_CACHE_CLEAN : value[0](0x%08x) value[1])0x%x)\n", (int)inParam[0], (int)inParam[1]);
        mfc_args.set_config.in_config_param     = MFC_SET_CACHE_CLEAN;
        mfc_args.set_config.in_config_value[0]  = (int)inParam[0];
        mfc_args.set_config.in_config_value[1]  = (int)inParam[1];
        r = DeviceIoControl(pCTX->hOpen, IOCTL_MFC_SET_CONFIG,
                            &mfc_args, sizeof(MFC_SET_CONFIG_ARG),
                            NULL, 0,
                            NULL,
                            NULL);
        if ((r == FALSE) || (mfc_args.set_config.ret_code != 0)) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "Error in MPEG4_DEC_SETCONF_POST_ROTATE.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_SETCONF_FAIL;
        }
        break;

    case MPEG4_DEC_SETCONF_CACHE_INVALIDATE:
        inParam = (int *)value;
        //printf("MPEG4_DEC_SETCONF_CACHE_INVALIDATE : value[0](0x%08x) value[1])0x%x)\n", (int)inParam[0], (int)inParam[1]);
        mfc_args.set_config.in_config_param     = MFC_SET_CACHE_INVALIDATE;
        mfc_args.set_config.in_config_value[0]  = (int)inParam[0];
        mfc_args.set_config.in_config_value[1]  = (int)inParam[1];
        r = DeviceIoControl(pCTX->hOpen, IOCTL_MFC_SET_CONFIG,
                            &mfc_args, sizeof(MFC_SET_CONFIG_ARG),
                            NULL, 0,
                            NULL,
                            NULL);
        if ((r == FALSE) || (mfc_args.set_config.ret_code != 0)) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "Error in MPEG4_DEC_SETCONF_POST_ROTATE.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_SETCONF_FAIL;
        }
        break;

    case MPEG4_DEC_SETCONF_CACHE_CLEAN_INVALIDATE:
        inParam = (int *)value;
        //printf("MPEG4_DEC_SETCONF_CACHE_CLEAN_INVALIDATE : value[0](0x%08x) value[1])0x%x)\n", (int)inParam[0], (int)inParam[1]);
        mfc_args.set_config.in_config_param     = MFC_SET_CACHE_CLEAN_INVALIDATE;
        mfc_args.set_config.in_config_value[0]  = (int)inParam[0];
        mfc_args.set_config.in_config_value[1]  = (int)inParam[1];
        r = DeviceIoControl(pCTX->hOpen, IOCTL_MFC_SET_CONFIG,
                            &mfc_args, sizeof(MFC_SET_CONFIG_ARG),
                            NULL, 0,
                            NULL,
                            NULL);
        if ((r == FALSE) || (mfc_args.set_config.ret_code != 0)) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "Error in MPEG4_DEC_SETCONF_POST_ROTATE.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_SETCONF_FAIL;
        }
        break;

    case MPEG4_DEC_SETCONF_PADDING_SIZE:
        inParam = (int *)value;
        mfc_args.set_config.in_config_param     = MFC_SET_PADDING_SIZE;
        mfc_args.set_config.in_config_value[0]  = (int)inParam[0];
        mfc_args.set_config.in_config_value[1]  = 0;
        r = DeviceIoControl(pCTX->hOpen, IOCTL_MFC_SET_CONFIG,
                            &mfc_args, sizeof(MFC_SET_CONFIG_ARG),
                            NULL, 0,
                            NULL,
                            NULL);
        if ((r == FALSE) || (mfc_args.set_config.ret_code != 0)) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "Error in MPEG4_DEC_SETCONF_PADDING_SIZE.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_SETCONF_FAIL;
        }
        
        break;

    default:
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "No such conf_type is supported.\n");
        return SSBSIP_MPEG4_DEC_RET_ERR_SETCONF_FAIL;
    }


    return SSBSIP_MPEG4_DEC_RET_OK;
}




int SsbSipMPEG4DecodeGetConfig(void *openHandle, MPEG4_DEC_CONF conf_type, void *value)
{
    _MFCLIB_MPEG4_DEC  *pCTX;
    MFC_ARGS            mfc_args;
    BOOL                r;


    ////////////////////////////////
    //  Input Parameter Checking  //
    ////////////////////////////////
    if (openHandle == NULL) {
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "openHandle is NULL\n");
        return SSBSIP_MPEG4_DEC_RET_ERR_INVALID_HANDLE;
    }
    if (value == NULL) {
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "value is NULL\n");
        return SSBSIP_MPEG4_DEC_RET_ERR_INVALID_PARAM;
    }

    pCTX  = (_MFCLIB_MPEG4_DEC *) openHandle;

    switch (conf_type) {
    case MPEG4_DEC_GETCONF_STREAMINFO:
        ((SSBSIP_MPEG4_STREAM_INFO *)value)->width  = pCTX->width;
        ((SSBSIP_MPEG4_STREAM_INFO *)value)->height = pCTX->height;
        break;

    case MPEG4_DEC_GETCONF_PHYADDR_FRAM_BUF:

        /////////////////////////////////////////////////
        /////           (DeviceIoControl)           /////
        /////      IOCTL_MFC_GET_FRAM_BUF_ADDR      /////
        /////////////////////////////////////////////////
//        mfc_args.get_buf_addr.in_usr_data = pCTX->proc_id;
        r = DeviceIoControl(pCTX->hOpen, IOCTL_MFC_GET_PHY_FRAM_BUF_ADDR,
                            &mfc_args, sizeof(MFC_GET_BUF_ADDR_ARG),
                            NULL, 0,
                            NULL,
                            NULL);
        if ((r == FALSE) || (mfc_args.get_buf_addr.ret_code != 0)) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "Error in MPEG4_DEC_GETCONF_PHYADDR_FRAM_BUF.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_GETCONF_FAIL;
        }

        // Output arguments
        ((unsigned int*) value)[0] = mfc_args.get_buf_addr.out_buf_addr;
        ((unsigned int*) value)[1] = mfc_args.get_buf_addr.out_buf_size;

        break;

    case MPEG4_DEC_GETCONF_FRAM_NEED_COUNT:

        mfc_args.get_config.in_config_param      = MFC_GET_CONFIG_DEC_FRAME_NEED_COUNT;
        mfc_args.get_config.out_config_value[0]  = 0;
        mfc_args.get_config.out_config_value[1]  = 0;
        r = DeviceIoControl(pCTX->hOpen, IOCTL_MFC_GET_CONFIG,
                            &mfc_args, sizeof(MFC_GET_CONFIG_ARG),
                            NULL, 0,
                            NULL,
                            NULL);
        if ((r == FALSE) || (mfc_args.get_config.ret_code != 0)) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "Error in MPEG4_DEC_GETCONF_FRAM_NEED_COUNT.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_GETCONF_FAIL;
        }

        // Output arguments
        ((unsigned int*) value)[0] = mfc_args.get_config.out_config_value[0];

        break;

#if (defined(DIVX_ENABLE) && (DIVX_ENABLE == 1))
    case MPEG4_DEC_GETCONF_MPEG4_MV_ADDR:
        if (pCTX->mp4_asp_arg.mpeg4_asp_param.ret_code != 0) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "Error in MFC_GET_CONFIG_DEC_MP4ASP_MV.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_GETCONF_FAIL;
        }

        // Output arguments
        ((unsigned int*) value)[0] = pCTX->mp4_asp_arg.mpeg4_asp_param.mv_addr;
        ((unsigned int*) value)[1] = pCTX->mp4_asp_arg.mpeg4_asp_param.mv_size;

        break;

    case MPEG4_DEC_GETCONF_MPEG4_MBTYPE_ADDR:
        if (pCTX->mp4_asp_arg.mpeg4_asp_param.ret_code != 0) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "Error in MFC_GET_CONFIG_DEC_MP4ASP_MBTYPE.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_GETCONF_FAIL;
        }

        // Output arguments
        ((unsigned int*) value)[0] = pCTX->mp4_asp_arg.mpeg4_asp_param.mb_type_addr;
        ((unsigned int*) value)[1] = pCTX->mp4_asp_arg.mpeg4_asp_param.mb_type_size;

        break;


    case MPEG4_DEC_GETCONF_BYTE_CONSUMED:
        if (pCTX->mp4_asp_arg.mpeg4_asp_param.ret_code != 0) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "Error in MFC_GET_CONFIG_DEC_BYTE_CONSUMED.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_GETCONF_FAIL;
        }

        // Output arguments
        ((unsigned int*) value)[0] = pCTX->mp4_asp_arg.mpeg4_asp_param.byte_consumed;

        break;

    case MPEG4_DEC_GETCONF_MPEG4_FCODE:
        if (pCTX->mp4_asp_arg.mpeg4_asp_param.ret_code != 0) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "Error in MFC_GET_CONFIG_DEC_MP4ASP_FCODE.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_GETCONF_FAIL;
        }

        // Output arguments
        ((int*) value)[0] = pCTX->mp4_asp_arg.mpeg4_asp_param.mp4asp_fcode;

        break;

    case MPEG4_DEC_GETCONF_MPEG4_VOP_TIME_RES:
        if (pCTX->mp4_asp_arg.mpeg4_asp_param.ret_code != 0) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "Error in MFC_GET_CONFIG_DEC_MP4ASP_VOP_TIME_RES.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_GETCONF_FAIL;
        }

        // Output arguments
        ((int*) value)[0] = pCTX->mp4_asp_arg.mpeg4_asp_param.mp4asp_vop_time_res;

        break;

    case MPEG4_DEC_GETCONF_MPEG4_TIME_BASE_LAST:
        if (pCTX->mp4_asp_arg.mpeg4_asp_param.ret_code != 0) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "Error in MFC_GET_CONFIG_DEC_MP4ASP_TIME_BASE_LAST.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_GETCONF_FAIL;
        }

        // Output arguments
        ((int*) value)[0] = pCTX->mp4_asp_arg.mpeg4_asp_param.mp4asp_time_base_last;

        break;

    case MPEG4_DEC_GETCONF_MPEG4_NONB_TIME_LAST:
        if (pCTX->mp4_asp_arg.mpeg4_asp_param.ret_code != 0) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "Error in MFC_GET_CONFIG_DEC_MP4ASP_NONB_TIME_LAST.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_GETCONF_FAIL;
        }

        // Output arguments
        ((int*) value)[0] = pCTX->mp4_asp_arg.mpeg4_asp_param.mp4asp_nonb_time_last;

        break;

    case MPEG4_DEC_GETCONF_MPEG4_TRD:
        if (pCTX->mp4_asp_arg.mpeg4_asp_param.ret_code != 0) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "Error in MFC_GET_CONFIG_DEC_MP4ASP_TRD.\n");
            return SSBSIP_MPEG4_DEC_RET_ERR_GETCONF_FAIL;
        }

        // Output arguments
        ((int*) value)[0] = pCTX->mp4_asp_arg.mpeg4_asp_param.mp4asp_trd;

        break;


#endif

    default:
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeGetConfig", "No such conf_type is supported.\n");
        return SSBSIP_MPEG4_DEC_RET_ERR_GETCONF_FAIL;
    }


    return SSBSIP_MPEG4_DEC_RET_OK;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -