📄 ssbsipmpeg4encode.c
字号:
/////////////////////////////////////////////////
///// (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 + -