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

📄 ssbsipmpeg4encode.c

📁 6410BSP3
💻 C
📖 第 1 页 / 共 2 页
字号:
    /////////////////////////////////////////////////
    /////           (DeviceIoControl)           /////
    /////     IOCTL_MFC_GET_INPUT_BUF_ADDR      /////
    /////////////////////////////////////////////////
//    mfc_args.get_buf_addr.in_usr_data = GetCurrentProcessId();        // Input argument
    r = DeviceIoControl(pCTX->hOpen, IOCTL_MFC_GET_FRAM_BUF_ADDR,
                        &mfc_args, sizeof(MFC_GET_BUF_ADDR_ARG),
                        NULL, 0,
                        NULL,
                        NULL);
    if ((r < 0) || (mfc_args.get_buf_addr.ret_code < 0)) {
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4EncodeGetInBuf", "Failed in get FRAM_BUF address\n");
        return NULL;
    }

    return (void *)mfc_args.get_buf_addr.out_buf_addr;
}


void *SsbSipMPEG4EncodeGetOutBuf(void *openHandle, long *size)
{
    _MFCLIB_MPEG4_ENC  *pCTX;

    BOOL                r;
    MFC_ARGS            mfc_args;


    ////////////////////////////////
    //  Input Parameter Checking  //
    ////////////////////////////////
    if (openHandle == NULL) {
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4EncodeGetOutBuf", "openHandle is NULL\n");
        return NULL;
    }
    if (size == NULL) {
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4EncodeGetOutBuf", "size is NULL.\n");
        return NULL;
    }

    pCTX  = (_MFCLIB_MPEG4_ENC *) openHandle;


    /////////////////////////////////////////////////
    /////           (DeviceIoControl)           /////
    /////      IOCTL_MFC_GET_STRM_BUF_ADDR      /////
    /////////////////////////////////////////////////
//    mfc_args.get_buf_addr.in_usr_data = GetCurrentProcessId();        // Input argument
    r = DeviceIoControl(pCTX->hOpen, IOCTL_MFC_GET_LINE_BUF_ADDR,
                        &mfc_args, sizeof(MFC_GET_BUF_ADDR_ARG),
                        NULL, 0,
                        NULL,
                        NULL);
    if ((r < 0) || (mfc_args.get_buf_addr.ret_code < 0)) {
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4EncodeGetOutBuf", "Failed in get LINE_BUF address.\n");
        return NULL;
    }

    *size = pCTX->enc_strm_size;

    return (void *)mfc_args.get_buf_addr.out_buf_addr;
}


int SsbSipMPEG4EncodeSetConfig(void *openHandle, MPEG4_ENC_CONF conf_type, void *value)
{
    _MFCLIB_MPEG4_ENC  *pCTX;
    MFC_ARGS            mfc_args;
    BOOL                r;

    unsigned int        num_slices;


    ////////////////////////////////
    //  Input Parameter Checking  //
    ////////////////////////////////
    if (openHandle == NULL) {
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "openHandle is NULL\n");
        return SSBSIP_MPEG4_ENC_RET_ERR_INVALID_HANDLE;
    }
    if (value == NULL) {
        LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "value is NULL\n");
        return SSBSIP_MPEG4_ENC_RET_ERR_INVALID_PARAM;
    }

    pCTX  = (_MFCLIB_MPEG4_ENC *) openHandle;

    switch (conf_type) {
    case MPEG4_ENC_SETCONF_H263_NUM_SLICES:

        if (pCTX->strmType == SSBSIPMFCENC_MPEG4) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "MPEG4_ENC_SETCONF_H263_NUM_SLICES is only for H.263 encoding.\n");
            return SSBSIP_MPEG4_ENC_RET_ERR_SETCONF_FAIL;
        }

        num_slices = *((unsigned int *) value);

        mfc_args.set_config.in_config_param     = MFC_SET_CONFIG_ENC_SLICE_MODE;
        mfc_args.set_config.in_config_value[0]  = (num_slices ? 1 : 0);
        mfc_args.set_config.in_config_value[1]  = num_slices;
        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_ENC_SETCONF_H263_NUM_SLICES.\n");
            return SSBSIP_MPEG4_ENC_RET_ERR_SETCONF_FAIL;
        }
        break;

    case MPEG4_ENC_SETCONF_H263_ANNEX:

        if (pCTX->strmType == SSBSIPMFCENC_MPEG4) {
            LOG_MSG(LOG_ERROR, "SsbSipMPEG4DecodeSetConfig", "MPEG4_ENC_SETCONF_H263_ANNEX is only for H.263 encoding.\n");
            return SSBSIP_MPEG4_ENC_RET_ERR_SETCONF_FAIL;
        }

        mfc_args.set_config.in_config_param     = MFC_SET_CONFIG_ENC_H263_PARAM;
        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_ENC_SETCONF_H263_ANNEX.\n");
            return SSBSIP_MPEG4_ENC_RET_ERR_SETCONF_FAIL;
        }
        break;

    case MPEG4_ENC_SETCONF_PARAM_CHANGE:

        mfc_args.set_config.in_config_param     = MFC_SET_CONFIG_ENC_PARAM_CHANGE;
        mfc_args.set_config.in_config_value[0]  = ((unsigned int *) value)[0];
        mfc_args.set_config.in_config_value[1]  = ((unsigned int *) value)[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_ENC_SETCONF_PARAM_CHANGE.\n");
            return SSBSIP_MPEG4_ENC_RET_ERR_SETCONF_FAIL;
        }
        break;

    case MPEG4_ENC_SETCONF_CUR_PIC_OPT:

        mfc_args.set_config.in_config_param     = MFC_SET_CONFIG_ENC_CUR_PIC_OPT;
        mfc_args.set_config.in_config_value[0]  = ((unsigned int *) value)[0];
        mfc_args.set_config.in_config_value[1]  = ((unsigned int *) value)[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_ENC_SETCONF_CUR_PIC_OPT.\n");
            return SSBSIP_MPEG4_ENC_RET_ERR_SETCONF_FAIL;
        }
        break;
        
// Add For VideoEditor
    case MPEG4_ENC_SETCONF_VOPTIMEINCRESOL :

        mfc_args.set_config.in_config_param = MFC_SET_CONFIG_ENC_VOPTIMEINCRESOL;
        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_ENC_VOPTIMEINCRESOL. \r\n");
            return SSBSIP_MPEG4_ENC_RET_ERR_SETCONF_FAIL;
        }
        break;
        
    case MPEG4_ENC_SETCONF_LEVEL :

        mfc_args.set_config.in_config_param = MFC_SET_CONFIG_ENC_LEVEL;
        mfc_args.set_config.in_config_value[0] = *((unsigned int *) value);
        mfc_args.set_config.in_config_value[1] = 0;
            LOG_MSG(LOG_ERROR, "***********************", "*********************L. \r\n");
        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_ENC_LEVEL. \r\n");
            return SSBSIP_MPEG4_ENC_RET_ERR_SETCONF_FAIL;
        }
        break;

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

    return 0;
}



#if 0

int SsbSipMPEG4DecodeGetConfig(void *openHandle, MPEG4_DEC_CONF conf_type, void *value)
{
    _MFCLIB_MPEG4_DEC  *pCTX;


    ////////////////////////////////
    //  Input Parameter Checking  //
    ////////////////////////////////
    if (openHandle == NULL) {
        return NULL;
    }

    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;

    default:
        break;
    }


    return 0;
}


#endif

⌨️ 快捷键说明

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