v4l2_fmt.fmt.pix_mp.height = codec_config->resolution.height;
v4l2_fmt.fmt.pix_mp.pixelformat = fourcc;
v4l2_fmt.fmt.pix_mp.num_planes = num_planes;
+
+ if (V4L2_TYPE_IS_CAPTURE (codec_config->buf_type)) {
+ if (codec_config->resolution.width <= 720 &&
+ codec_config->resolution.height <= 576) {
+ /* SD */
+ v4l2_fmt.fmt.pix_mp.colorspace = V4L2_COLORSPACE_SMPTE170M;
+ v4l2_fmt.fmt.pix_mp.ycbcr_enc = V4L2_YCBCR_ENC_601;
+ } else {
+ /* HD */
+ v4l2_fmt.fmt.pix_mp.colorspace = V4L2_COLORSPACE_REC709;
+ v4l2_fmt.fmt.pix_mp.ycbcr_enc = V4L2_YCBCR_ENC_709;
+ }
+
+ v4l2_fmt.fmt.pix_mp.quantization = V4L2_QUANTIZATION_LIM_RANGE;
+ v4l2_fmt.fmt.pix_mp.xfer_func = V4L2_XFER_FUNC_709;
+ v4l2_fmt.fmt.pix_mp.flags |= V4L2_PIX_FMT_FLAG_SET_CSC;
+ }
} else {
v4l2_fmt.fmt.pix.width = codec_config->resolution.width;
v4l2_fmt.fmt.pix.height = codec_config->resolution.height;
return HAL_CODEC_ERROR_INVALID_STATE;
}
- ret = __codec_v4l2_start_stream(handle, &handle->buffer_control[CODEC_HAL_BUFFER_CONTROL_TYPE_INPUT], BUFFER_MIN);
+ ret = __codec_v4l2_start_stream(handle, &handle->buffer_control[CODEC_HAL_BUFFER_CONTROL_TYPE_INPUT], BUFFER_NUM_INPUT);
if (ret != HAL_CODEC_ERROR_NONE) {
LOGE("[input] __codec_start_stream failed[0x%x]", ret);
return ret;
}
- ret = __codec_v4l2_start_stream(handle, &handle->buffer_control[CODEC_HAL_BUFFER_CONTROL_TYPE_OUTPUT], BUFFER_MIN);
+ ret = __codec_v4l2_start_stream(handle, &handle->buffer_control[CODEC_HAL_BUFFER_CONTROL_TYPE_OUTPUT], BUFFER_NUM_OUTPUT);
if (ret != HAL_CODEC_ERROR_NONE) {
LOGE("[output] __codec_start_stream failed[0x%x]", ret);
return ret;