in source/T31/T31VideoCapturer.c [180:275]
int videoCapturerSetFormat(VideoCapturerHandle handle, const VideoFormat format, const VideoResolution resolution)
{
T31_HANDLE_NULL_CHECK(handle);
T31_HANDLE_GET(handle);
T31_HANDLE_STATUS_CHECK(t31Handle, VID_CAP_STATUS_STREAM_OFF);
switch (resolution) {
case VID_RES_1080P:
t31Handle->channelNum = T31_VIDEO_STREAM_1080P_CHANNEL_NUM;
break;
case VID_RES_720P:
t31Handle->channelNum = T31_VIDEO_STREAM_720P_CHANNEL_NUM;
break;
case VID_RES_480P:
t31Handle->channelNum = T31_VIDEO_STREAM_LOW_RES_CHANNEL_NUM;
chn[t31Handle->channelNum].fs_chn_attr.picWidth = 640;
chn[t31Handle->channelNum].fs_chn_attr.picHeight = 480;
chn[t31Handle->channelNum].fs_chn_attr.scaler.enable = 1;
chn[t31Handle->channelNum].fs_chn_attr.scaler.outwidth = chn[t31Handle->channelNum].fs_chn_attr.picWidth;
chn[t31Handle->channelNum].fs_chn_attr.scaler.outheight = chn[t31Handle->channelNum].fs_chn_attr.picHeight;
break;
case VID_RES_360P:
t31Handle->channelNum = T31_VIDEO_STREAM_LOW_RES_CHANNEL_NUM;
chn[t31Handle->channelNum].fs_chn_attr.picWidth = 480;
chn[t31Handle->channelNum].fs_chn_attr.picHeight = 360;
chn[t31Handle->channelNum].fs_chn_attr.scaler.enable = 1;
chn[t31Handle->channelNum].fs_chn_attr.scaler.outwidth = chn[t31Handle->channelNum].fs_chn_attr.picWidth;
chn[t31Handle->channelNum].fs_chn_attr.scaler.outheight = chn[t31Handle->channelNum].fs_chn_attr.picHeight;
break;
case VID_RES_320P:
t31Handle->channelNum = T31_VIDEO_STREAM_LOW_RES_CHANNEL_NUM;
chn[t31Handle->channelNum].fs_chn_attr.picWidth = 416;
chn[t31Handle->channelNum].fs_chn_attr.picHeight = 320;
chn[t31Handle->channelNum].fs_chn_attr.scaler.enable = 1;
chn[t31Handle->channelNum].fs_chn_attr.scaler.outwidth = chn[t31Handle->channelNum].fs_chn_attr.picWidth;
chn[t31Handle->channelNum].fs_chn_attr.scaler.outheight = chn[t31Handle->channelNum].fs_chn_attr.picHeight;
break;
default:
LOG("Unsupported resolution %d", resolution);
return -EINVAL;
}
switch (format) {
case VID_FMT_H264:
chn[t31Handle->channelNum].payloadType = IMP_ENC_PROFILE_AVC_MAIN;
break;
case VID_FMT_RAW:
break;
default:
LOG("Unsupported format %d", format);
return -EINVAL;
}
chn[t31Handle->channelNum].enable = true;
/* Step.2 FrameSource init */
if (IMP_FrameSource_CreateChn(chn[t31Handle->channelNum].index, &chn[t31Handle->channelNum].fs_chn_attr)) {
LOG("IMP_FrameSource_CreateChn(chn%d) error !", chn[t31Handle->channelNum].index);
return -EAGAIN;
}
if (IMP_FrameSource_SetChnAttr(chn[t31Handle->channelNum].index, &chn[t31Handle->channelNum].fs_chn_attr)) {
LOG("IMP_FrameSource_SetChnAttr(chn%d) error !", chn[t31Handle->channelNum].index);
return -EAGAIN;
}
if (format != VID_FMT_RAW) {
/* Step.3 Encoder init */
if (IMP_Encoder_CreateGroup(chn[t31Handle->channelNum].index)) {
LOG("IMP_Encoder_CreateGroup(%d) error !", chn[t31Handle->channelNum].index);
return -EAGAIN;
}
if (sample_encoder_init()) {
LOG("Encoder init failed");
return -EAGAIN;
}
/* Step.4 Bind */
if (IMP_System_Bind(&chn[t31Handle->channelNum].framesource_chn, &chn[t31Handle->channelNum].imp_encoder)) {
LOG("Bind FrameSource channel%d and Encoder failed", t31Handle->channelNum);
return -EAGAIN;
}
}
t31Handle->format = format;
t31Handle->resolution = resolution;
return 0;
}