Lines Matching refs:channel

306 allegro_channel_get_i_frame_qp(struct allegro_channel *channel)  in allegro_channel_get_i_frame_qp()  argument
308 if (channel->codec == V4L2_PIX_FMT_HEVC) in allegro_channel_get_i_frame_qp()
309 return v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_i_frame_qp); in allegro_channel_get_i_frame_qp()
311 return v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_i_frame_qp); in allegro_channel_get_i_frame_qp()
315 allegro_channel_get_p_frame_qp(struct allegro_channel *channel) in allegro_channel_get_p_frame_qp() argument
317 if (channel->codec == V4L2_PIX_FMT_HEVC) in allegro_channel_get_p_frame_qp()
318 return v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_p_frame_qp); in allegro_channel_get_p_frame_qp()
320 return v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_p_frame_qp); in allegro_channel_get_p_frame_qp()
324 allegro_channel_get_b_frame_qp(struct allegro_channel *channel) in allegro_channel_get_b_frame_qp() argument
326 if (channel->codec == V4L2_PIX_FMT_HEVC) in allegro_channel_get_b_frame_qp()
327 return v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_b_frame_qp); in allegro_channel_get_b_frame_qp()
329 return v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_b_frame_qp); in allegro_channel_get_b_frame_qp()
333 allegro_channel_get_min_qp(struct allegro_channel *channel) in allegro_channel_get_min_qp() argument
335 if (channel->codec == V4L2_PIX_FMT_HEVC) in allegro_channel_get_min_qp()
336 return v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_min_qp); in allegro_channel_get_min_qp()
338 return v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_min_qp); in allegro_channel_get_min_qp()
342 allegro_channel_get_max_qp(struct allegro_channel *channel) in allegro_channel_get_max_qp() argument
344 if (channel->codec == V4L2_PIX_FMT_HEVC) in allegro_channel_get_max_qp()
345 return v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_max_qp); in allegro_channel_get_max_qp()
347 return v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_max_qp); in allegro_channel_get_max_qp()
433 struct allegro_channel *channel; in allegro_find_channel_by_user_id() local
435 list_for_each_entry(channel, &dev->channels, list) { in allegro_find_channel_by_user_id()
436 if (channel->user_id == user_id) in allegro_find_channel_by_user_id()
437 return channel; in allegro_find_channel_by_user_id()
447 struct allegro_channel *channel; in allegro_find_channel_by_channel_id() local
449 list_for_each_entry(channel, &dev->channels, list) { in allegro_find_channel_by_channel_id()
450 if (channel->mcu_channel_id == channel_id) in allegro_find_channel_by_channel_id()
451 return channel; in allegro_find_channel_by_channel_id()
457 static inline bool channel_exists(struct allegro_channel *channel) in channel_exists() argument
459 return channel->mcu_channel_id != -1; in channel_exists()
1182 static u32 allegro_channel_get_entropy_mode(struct allegro_channel *channel) in allegro_channel_get_entropy_mode() argument
1188 if (channel->codec == V4L2_PIX_FMT_HEVC) in allegro_channel_get_entropy_mode()
1194 static int fill_create_channel_param(struct allegro_channel *channel, in fill_create_channel_param() argument
1197 int i_frame_qp = allegro_channel_get_i_frame_qp(channel); in fill_create_channel_param()
1198 int p_frame_qp = allegro_channel_get_p_frame_qp(channel); in fill_create_channel_param()
1199 int b_frame_qp = allegro_channel_get_b_frame_qp(channel); in fill_create_channel_param()
1200 int bitrate_mode = v4l2_ctrl_g_ctrl(channel->mpeg_video_bitrate_mode); in fill_create_channel_param()
1201 unsigned int cpb_size = v4l2_ctrl_g_ctrl(channel->mpeg_video_cpb_size); in fill_create_channel_param()
1203 param->width = channel->width; in fill_create_channel_param()
1204 param->height = channel->height; in fill_create_channel_param()
1205 param->format = v4l2_pixelformat_to_mcu_format(channel->pixelformat); in fill_create_channel_param()
1207 v4l2_colorspace_to_mcu_colorspace(channel->colorspace); in fill_create_channel_param()
1210 param->codec = channel->codec; in fill_create_channel_param()
1211 if (channel->codec == V4L2_PIX_FMT_H264) { in fill_create_channel_param()
1215 profile = v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_profile); in fill_create_channel_param()
1216 level = v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_level); in fill_create_channel_param()
1226 profile = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_profile); in fill_create_channel_param()
1227 level = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_level); in fill_create_channel_param()
1228 tier = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_tier); in fill_create_channel_param()
1236 param->log2_max_frame_num = channel->log2_max_frame_num; in fill_create_channel_param()
1237 param->temporal_mvp_enable = channel->temporal_mvp_enable; in fill_create_channel_param()
1239 param->dbf_ovr_en = channel->dbf_ovr_en; in fill_create_channel_param()
1240 param->override_lf = channel->enable_deblocking_filter_override; in fill_create_channel_param()
1241 param->enable_reordering = channel->enable_reordering; in fill_create_channel_param()
1242 param->entropy_mode = allegro_channel_get_entropy_mode(channel); in fill_create_channel_param()
1246 param->lf_x_tile = channel->enable_loop_filter_across_tiles; in fill_create_channel_param()
1247 param->lf_x_slice = channel->enable_loop_filter_across_slices; in fill_create_channel_param()
1254 param->me_range[0] = channel->b_hrz_me_range; in fill_create_channel_param()
1255 param->me_range[1] = channel->b_vrt_me_range; in fill_create_channel_param()
1256 param->me_range[2] = channel->p_hrz_me_range; in fill_create_channel_param()
1257 param->me_range[3] = channel->p_vrt_me_range; in fill_create_channel_param()
1258 param->max_cu_size = channel->max_cu_size; in fill_create_channel_param()
1259 param->min_cu_size = channel->min_cu_size; in fill_create_channel_param()
1260 param->max_tu_size = channel->max_tu_size; in fill_create_channel_param()
1261 param->min_tu_size = channel->min_tu_size; in fill_create_channel_param()
1262 param->max_transfo_depth_intra = channel->max_transfo_depth_intra; in fill_create_channel_param()
1263 param->max_transfo_depth_inter = channel->max_transfo_depth_inter; in fill_create_channel_param()
1265 param->encoder_buffer_enabled = v4l2_ctrl_g_ctrl(channel->encoder_buffer); in fill_create_channel_param()
1268 param->rate_control_mode = channel->frame_rc_enable ? in fill_create_channel_param()
1271 param->cpb_size = v4l2_cpb_size_to_mcu(cpb_size, channel->bitrate_peak); in fill_create_channel_param()
1274 param->framerate = DIV_ROUND_UP(channel->framerate.numerator, in fill_create_channel_param()
1275 channel->framerate.denominator); in fill_create_channel_param()
1276 param->clk_ratio = channel->framerate.denominator == 1001 ? 1001 : 1000; in fill_create_channel_param()
1277 param->target_bitrate = channel->bitrate; in fill_create_channel_param()
1278 param->max_bitrate = channel->bitrate_peak; in fill_create_channel_param()
1280 param->min_qp = allegro_channel_get_min_qp(channel); in fill_create_channel_param()
1281 param->max_qp = allegro_channel_get_max_qp(channel); in fill_create_channel_param()
1289 param->num_pixel = channel->width + channel->height; in fill_create_channel_param()
1294 param->freq_idr = v4l2_ctrl_g_ctrl(channel->mpeg_video_gop_size); in fill_create_channel_param()
1297 param->gop_length = v4l2_ctrl_g_ctrl(channel->mpeg_video_gop_size); in fill_create_channel_param()
1313 struct allegro_channel *channel) in allegro_mcu_send_create_channel() argument
1316 struct allegro_buffer *blob = &channel->config_blob; in allegro_mcu_send_create_channel()
1321 fill_create_channel_param(channel, &param); in allegro_mcu_send_create_channel()
1331 msg.user_id = channel->user_id; in allegro_mcu_send_create_channel()
1343 struct allegro_channel *channel) in allegro_mcu_send_destroy_channel() argument
1352 msg.channel_id = channel->mcu_channel_id; in allegro_mcu_send_destroy_channel()
1360 struct allegro_channel *channel, in allegro_mcu_send_put_stream_buffer() argument
1372 msg.channel_id = channel->mcu_channel_id; in allegro_mcu_send_put_stream_buffer()
1386 struct allegro_channel *channel, in allegro_mcu_send_encode_frame() argument
1391 bool use_encoder_buffer = v4l2_ctrl_g_ctrl(channel->encoder_buffer); in allegro_mcu_send_encode_frame()
1398 msg.channel_id = channel->mcu_channel_id; in allegro_mcu_send_encode_frame()
1408 msg.stride = channel->stride; in allegro_mcu_send_encode_frame()
1429 static int allegro_mcu_push_buffer_internal(struct allegro_channel *channel, in allegro_mcu_push_buffer_internal() argument
1432 struct allegro_dev *dev = channel->dev; in allegro_mcu_push_buffer_internal()
1443 list = &channel->buffers_reference; in allegro_mcu_push_buffer_internal()
1446 list = &channel->buffers_intermediate; in allegro_mcu_push_buffer_internal()
1463 msg->channel_id = channel->mcu_channel_id; in allegro_mcu_push_buffer_internal()
1480 static int allegro_mcu_push_buffer_intermediate(struct allegro_channel *channel) in allegro_mcu_push_buffer_intermediate() argument
1484 return allegro_mcu_push_buffer_internal(channel, type); in allegro_mcu_push_buffer_intermediate()
1487 static int allegro_mcu_push_buffer_reference(struct allegro_channel *channel) in allegro_mcu_push_buffer_reference() argument
1491 return allegro_mcu_push_buffer_internal(channel, type); in allegro_mcu_push_buffer_reference()
1494 static int allocate_buffers_internal(struct allegro_channel *channel, in allocate_buffers_internal() argument
1498 struct allegro_dev *dev = channel->dev; in allocate_buffers_internal()
1528 static void destroy_buffers_internal(struct allegro_channel *channel, in destroy_buffers_internal() argument
1531 struct allegro_dev *dev = channel->dev; in destroy_buffers_internal()
1541 static void destroy_reference_buffers(struct allegro_channel *channel) in destroy_reference_buffers() argument
1543 return destroy_buffers_internal(channel, &channel->buffers_reference); in destroy_reference_buffers()
1546 static void destroy_intermediate_buffers(struct allegro_channel *channel) in destroy_intermediate_buffers() argument
1548 return destroy_buffers_internal(channel, in destroy_intermediate_buffers()
1549 &channel->buffers_intermediate); in destroy_intermediate_buffers()
1552 static int allocate_intermediate_buffers(struct allegro_channel *channel, in allocate_intermediate_buffers() argument
1555 return allocate_buffers_internal(channel, in allocate_intermediate_buffers()
1556 &channel->buffers_intermediate, in allocate_intermediate_buffers()
1560 static int allocate_reference_buffers(struct allegro_channel *channel, in allocate_reference_buffers() argument
1563 return allocate_buffers_internal(channel, in allocate_reference_buffers()
1564 &channel->buffers_reference, in allocate_reference_buffers()
1568 static ssize_t allegro_h264_write_sps(struct allegro_channel *channel, in allegro_h264_write_sps() argument
1571 struct allegro_dev *dev = channel->dev; in allegro_h264_write_sps()
1587 profile = v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_profile); in allegro_h264_write_sps()
1588 level = v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_level); in allegro_h264_write_sps()
1605 DIV_ROUND_UP(channel->width, size_mb) - 1; in allegro_h264_write_sps()
1607 DIV_ROUND_UP(channel->height, size_mb) - 1; in allegro_h264_write_sps()
1612 (channel->width % size_mb) || (channel->height % size_mb); in allegro_h264_write_sps()
1615 sps->crop_right = (round_up(channel->width, size_mb) - channel->width) / crop_unit_x; in allegro_h264_write_sps()
1617 sps->crop_bottom = (round_up(channel->height, size_mb) - channel->height) / crop_unit_y; in allegro_h264_write_sps()
1625 sps->vui.video_full_range_flag = nal_h264_full_range(channel->quantization); in allegro_h264_write_sps()
1627 sps->vui.colour_primaries = nal_h264_color_primaries(channel->colorspace); in allegro_h264_write_sps()
1629 nal_h264_transfer_characteristics(channel->colorspace, channel->xfer_func); in allegro_h264_write_sps()
1631 nal_h264_matrix_coeffs(channel->colorspace, channel->ycbcr_enc); in allegro_h264_write_sps()
1638 sps->vui.num_units_in_tick = channel->framerate.denominator; in allegro_h264_write_sps()
1639 sps->vui.time_scale = 2 * channel->framerate.numerator; in allegro_h264_write_sps()
1647 ffs(channel->bitrate_peak) - 6; in allegro_h264_write_sps()
1649 channel->bitrate_peak / (1 << (6 + sps->vui.vcl_hrd_parameters.bit_rate_scale)) - 1; in allegro_h264_write_sps()
1651 cpb_size = v4l2_ctrl_g_ctrl(channel->mpeg_video_cpb_size); in allegro_h264_write_sps()
1657 !v4l2_ctrl_g_ctrl(channel->mpeg_video_frame_rc_enable); in allegro_h264_write_sps()
1673 static ssize_t allegro_h264_write_pps(struct allegro_channel *channel, in allegro_h264_write_pps() argument
1676 struct allegro_dev *dev = channel->dev; in allegro_h264_write_pps()
1689 pps->num_ref_idx_l0_default_active_minus1 = channel->num_ref_idx_l0 - 1; in allegro_h264_write_pps()
1690 pps->num_ref_idx_l1_default_active_minus1 = channel->num_ref_idx_l1 - 1; in allegro_h264_write_pps()
1710 static void allegro_channel_eos_event(struct allegro_channel *channel) in allegro_channel_eos_event() argument
1716 v4l2_event_queue_fh(&channel->fh, &eos_event); in allegro_channel_eos_event()
1719 static ssize_t allegro_hevc_write_vps(struct allegro_channel *channel, in allegro_hevc_write_vps() argument
1722 struct allegro_dev *dev = channel->dev; in allegro_hevc_write_vps()
1726 unsigned int num_ref_frames = channel->num_ref_idx_l0; in allegro_hevc_write_vps()
1727 s32 profile = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_profile); in allegro_hevc_write_vps()
1728 s32 level = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_level); in allegro_hevc_write_vps()
1729 s32 tier = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_tier); in allegro_hevc_write_vps()
1758 static ssize_t allegro_hevc_write_sps(struct allegro_channel *channel, in allegro_hevc_write_sps() argument
1761 struct allegro_dev *dev = channel->dev; in allegro_hevc_write_sps()
1768 unsigned int num_ref_frames = channel->num_ref_idx_l0; in allegro_hevc_write_sps()
1769 s32 profile = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_profile); in allegro_hevc_write_sps()
1770 s32 level = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_level); in allegro_hevc_write_sps()
1771 s32 tier = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_tier); in allegro_hevc_write_sps()
1789 sps->pic_width_in_luma_samples = round_up(channel->width, 8); in allegro_hevc_write_sps()
1790 sps->pic_height_in_luma_samples = round_up(channel->height, 8); in allegro_hevc_write_sps()
1792 sps->pic_width_in_luma_samples - channel->width; in allegro_hevc_write_sps()
1794 sps->pic_height_in_luma_samples - channel->height; in allegro_hevc_write_sps()
1805 channel->min_cu_size - 3; in allegro_hevc_write_sps()
1807 channel->max_cu_size - channel->min_cu_size; in allegro_hevc_write_sps()
1809 channel->min_tu_size - 2; in allegro_hevc_write_sps()
1811 channel->max_tu_size - channel->min_tu_size; in allegro_hevc_write_sps()
1813 channel->max_transfo_depth_intra; in allegro_hevc_write_sps()
1815 channel->max_transfo_depth_inter; in allegro_hevc_write_sps()
1817 sps->sps_temporal_mvp_enabled_flag = channel->temporal_mvp_enable; in allegro_hevc_write_sps()
1818 sps->strong_intra_smoothing_enabled_flag = channel->max_cu_size > 4; in allegro_hevc_write_sps()
1825 vui->video_full_range_flag = nal_hevc_full_range(channel->quantization); in allegro_hevc_write_sps()
1827 vui->colour_primaries = nal_hevc_color_primaries(channel->colorspace); in allegro_hevc_write_sps()
1828 vui->transfer_characteristics = nal_hevc_transfer_characteristics(channel->colorspace, in allegro_hevc_write_sps()
1829 channel->xfer_func); in allegro_hevc_write_sps()
1830 vui->matrix_coeffs = nal_hevc_matrix_coeffs(channel->colorspace, channel->ycbcr_enc); in allegro_hevc_write_sps()
1837 vui->vui_num_units_in_tick = channel->framerate.denominator; in allegro_hevc_write_sps()
1838 vui->vui_time_scale = channel->framerate.numerator; in allegro_hevc_write_sps()
1854 hrd->bit_rate_scale = ffs(channel->bitrate_peak) - 6; in allegro_hevc_write_sps()
1856 (channel->bitrate_peak >> (6 + hrd->bit_rate_scale)) - 1; in allegro_hevc_write_sps()
1858 cpb_size = v4l2_ctrl_g_ctrl(channel->mpeg_video_cpb_size) * 1000; in allegro_hevc_write_sps()
1862 hrd->vcl_hrd[0].cbr_flag[0] = !v4l2_ctrl_g_ctrl(channel->mpeg_video_frame_rc_enable); in allegro_hevc_write_sps()
1871 static ssize_t allegro_hevc_write_pps(struct allegro_channel *channel, in allegro_hevc_write_pps() argument
1875 struct allegro_dev *dev = channel->dev; in allegro_hevc_write_pps()
1900 channel->enable_loop_filter_across_tiles; in allegro_hevc_write_pps()
1902 channel->enable_loop_filter_across_slices; in allegro_hevc_write_pps()
1905 channel->enable_deblocking_filter_override; in allegro_hevc_write_pps()
1909 pps->lists_modification_present_flag = channel->enable_reordering; in allegro_hevc_write_pps()
1918 static u64 allegro_put_buffer(struct allegro_channel *channel, in allegro_put_buffer() argument
1926 mutex_lock(&channel->shadow_list_lock); in allegro_put_buffer()
1928 mutex_unlock(&channel->shadow_list_lock); in allegro_put_buffer()
1934 allegro_get_buffer(struct allegro_channel *channel, in allegro_get_buffer() argument
1940 mutex_lock(&channel->shadow_list_lock); in allegro_get_buffer()
1948 mutex_unlock(&channel->shadow_list_lock); in allegro_get_buffer()
1953 static void allegro_channel_finish_frame(struct allegro_channel *channel, in allegro_channel_finish_frame() argument
1956 struct allegro_dev *dev = channel->dev; in allegro_channel_finish_frame()
1968 src_buf = allegro_get_buffer(channel, &channel->source_shadow_list, in allegro_channel_finish_frame()
1973 channel->mcu_channel_id); in allegro_channel_finish_frame()
1975 dst_buf = allegro_get_buffer(channel, &channel->stream_shadow_list, in allegro_channel_finish_frame()
1980 channel->mcu_channel_id); in allegro_channel_finish_frame()
1985 if (v4l2_m2m_is_last_draining_src_buf(channel->fh.m2m_ctx, src_buf)) { in allegro_channel_finish_frame()
1987 allegro_channel_eos_event(channel); in allegro_channel_finish_frame()
1988 v4l2_m2m_mark_stopped(channel->fh.m2m_ctx); in allegro_channel_finish_frame()
1991 dst_buf->sequence = channel->csequence++; in allegro_channel_finish_frame()
1996 channel->mcu_channel_id, in allegro_channel_finish_frame()
2005 channel->mcu_channel_id, msg->partition_table_size); in allegro_channel_finish_frame()
2013 channel->mcu_channel_id); in allegro_channel_finish_frame()
2023 channel->mcu_channel_id, partition->offset, in allegro_channel_finish_frame()
2030 channel->mcu_channel_id, partition->size, partition->offset); in allegro_channel_finish_frame()
2042 if (channel->codec == V4L2_PIX_FMT_HEVC && msg->is_idr) { in allegro_channel_finish_frame()
2043 len = allegro_hevc_write_vps(channel, curr, free); in allegro_channel_finish_frame()
2054 channel->mcu_channel_id, len); in allegro_channel_finish_frame()
2058 if (channel->codec == V4L2_PIX_FMT_H264) in allegro_channel_finish_frame()
2059 len = allegro_h264_write_sps(channel, curr, free); in allegro_channel_finish_frame()
2061 len = allegro_hevc_write_sps(channel, curr, free); in allegro_channel_finish_frame()
2072 channel->mcu_channel_id, len); in allegro_channel_finish_frame()
2076 if (channel->codec == V4L2_PIX_FMT_H264) in allegro_channel_finish_frame()
2077 len = allegro_h264_write_pps(channel, curr, free); in allegro_channel_finish_frame()
2079 len = allegro_hevc_write_pps(channel, msg, curr, free); in allegro_channel_finish_frame()
2090 channel->mcu_channel_id, len); in allegro_channel_finish_frame()
2097 if (channel->codec == V4L2_PIX_FMT_H264) in allegro_channel_finish_frame()
2110 channel->mcu_channel_id, len); in allegro_channel_finish_frame()
2130 channel->mcu_channel_id, in allegro_channel_finish_frame()
2157 struct allegro_channel *channel; in allegro_handle_create_channel() local
2161 channel = allegro_find_channel_by_user_id(dev, msg->user_id); in allegro_handle_create_channel()
2162 if (IS_ERR(channel)) { in allegro_handle_create_channel()
2173 channel->user_id, in allegro_handle_create_channel()
2180 channel->mcu_channel_id = msg->channel_id; in allegro_handle_create_channel()
2183 channel->user_id, channel->mcu_channel_id); in allegro_handle_create_channel()
2185 err = allegro_decode_config_blob(&param, msg, channel->config_blob.vaddr); in allegro_handle_create_channel()
2186 allegro_free_buffer(channel->dev, &channel->config_blob); in allegro_handle_create_channel()
2190 channel->num_ref_idx_l0 = param.num_ref_idx_l0; in allegro_handle_create_channel()
2191 channel->num_ref_idx_l1 = param.num_ref_idx_l1; in allegro_handle_create_channel()
2195 channel->mcu_channel_id, in allegro_handle_create_channel()
2197 err = allocate_intermediate_buffers(channel, msg->int_buffers_count, in allegro_handle_create_channel()
2202 channel->mcu_channel_id); in allegro_handle_create_channel()
2205 err = allegro_mcu_push_buffer_intermediate(channel); in allegro_handle_create_channel()
2211 channel->mcu_channel_id, in allegro_handle_create_channel()
2213 err = allocate_reference_buffers(channel, msg->rec_buffers_count, in allegro_handle_create_channel()
2218 channel->mcu_channel_id); in allegro_handle_create_channel()
2221 err = allegro_mcu_push_buffer_reference(channel); in allegro_handle_create_channel()
2226 channel->error = err; in allegro_handle_create_channel()
2227 complete(&channel->completion); in allegro_handle_create_channel()
2237 struct allegro_channel *channel; in allegro_handle_destroy_channel() local
2239 channel = allegro_find_channel_by_channel_id(dev, msg->channel_id); in allegro_handle_destroy_channel()
2240 if (IS_ERR(channel)) { in allegro_handle_destroy_channel()
2250 channel->user_id, channel->mcu_channel_id); in allegro_handle_destroy_channel()
2251 complete(&channel->completion); in allegro_handle_destroy_channel()
2260 struct allegro_channel *channel; in allegro_handle_encode_frame() local
2262 channel = allegro_find_channel_by_channel_id(dev, msg->channel_id); in allegro_handle_encode_frame()
2263 if (IS_ERR(channel)) { in allegro_handle_encode_frame()
2271 allegro_channel_finish_frame(channel, msg); in allegro_handle_encode_frame()
2481 static void allegro_destroy_channel(struct allegro_channel *channel) in allegro_destroy_channel() argument
2483 struct allegro_dev *dev = channel->dev; in allegro_destroy_channel()
2486 if (channel_exists(channel)) { in allegro_destroy_channel()
2487 reinit_completion(&channel->completion); in allegro_destroy_channel()
2488 allegro_mcu_send_destroy_channel(dev, channel); in allegro_destroy_channel()
2489 timeout = wait_for_completion_timeout(&channel->completion, in allegro_destroy_channel()
2494 channel->mcu_channel_id); in allegro_destroy_channel()
2496 channel->mcu_channel_id = -1; in allegro_destroy_channel()
2499 destroy_intermediate_buffers(channel); in allegro_destroy_channel()
2500 destroy_reference_buffers(channel); in allegro_destroy_channel()
2502 v4l2_ctrl_grab(channel->mpeg_video_h264_profile, false); in allegro_destroy_channel()
2503 v4l2_ctrl_grab(channel->mpeg_video_h264_level, false); in allegro_destroy_channel()
2504 v4l2_ctrl_grab(channel->mpeg_video_h264_i_frame_qp, false); in allegro_destroy_channel()
2505 v4l2_ctrl_grab(channel->mpeg_video_h264_max_qp, false); in allegro_destroy_channel()
2506 v4l2_ctrl_grab(channel->mpeg_video_h264_min_qp, false); in allegro_destroy_channel()
2507 v4l2_ctrl_grab(channel->mpeg_video_h264_p_frame_qp, false); in allegro_destroy_channel()
2508 v4l2_ctrl_grab(channel->mpeg_video_h264_b_frame_qp, false); in allegro_destroy_channel()
2510 v4l2_ctrl_grab(channel->mpeg_video_hevc_profile, false); in allegro_destroy_channel()
2511 v4l2_ctrl_grab(channel->mpeg_video_hevc_level, false); in allegro_destroy_channel()
2512 v4l2_ctrl_grab(channel->mpeg_video_hevc_tier, false); in allegro_destroy_channel()
2513 v4l2_ctrl_grab(channel->mpeg_video_hevc_i_frame_qp, false); in allegro_destroy_channel()
2514 v4l2_ctrl_grab(channel->mpeg_video_hevc_max_qp, false); in allegro_destroy_channel()
2515 v4l2_ctrl_grab(channel->mpeg_video_hevc_min_qp, false); in allegro_destroy_channel()
2516 v4l2_ctrl_grab(channel->mpeg_video_hevc_p_frame_qp, false); in allegro_destroy_channel()
2517 v4l2_ctrl_grab(channel->mpeg_video_hevc_b_frame_qp, false); in allegro_destroy_channel()
2519 v4l2_ctrl_grab(channel->mpeg_video_frame_rc_enable, false); in allegro_destroy_channel()
2520 v4l2_ctrl_grab(channel->mpeg_video_bitrate_mode, false); in allegro_destroy_channel()
2521 v4l2_ctrl_grab(channel->mpeg_video_bitrate, false); in allegro_destroy_channel()
2522 v4l2_ctrl_grab(channel->mpeg_video_bitrate_peak, false); in allegro_destroy_channel()
2523 v4l2_ctrl_grab(channel->mpeg_video_cpb_size, false); in allegro_destroy_channel()
2524 v4l2_ctrl_grab(channel->mpeg_video_gop_size, false); in allegro_destroy_channel()
2526 v4l2_ctrl_grab(channel->encoder_buffer, false); in allegro_destroy_channel()
2528 if (channel->user_id != -1) { in allegro_destroy_channel()
2529 clear_bit(channel->user_id, &dev->channel_user_ids); in allegro_destroy_channel()
2530 channel->user_id = -1; in allegro_destroy_channel()
2544 static int allegro_create_channel(struct allegro_channel *channel) in allegro_create_channel() argument
2546 struct allegro_dev *dev = channel->dev; in allegro_create_channel()
2549 if (channel_exists(channel)) { in allegro_create_channel()
2555 channel->user_id = allegro_next_user_id(dev); in allegro_create_channel()
2556 if (channel->user_id < 0) { in allegro_create_channel()
2561 set_bit(channel->user_id, &dev->channel_user_ids); in allegro_create_channel()
2565 channel->user_id, in allegro_create_channel()
2566 (char *)&channel->codec, channel->width, channel->height, in allegro_create_channel()
2567 DIV_ROUND_UP(channel->framerate.numerator, in allegro_create_channel()
2568 channel->framerate.denominator)); in allegro_create_channel()
2570 v4l2_ctrl_grab(channel->mpeg_video_h264_profile, true); in allegro_create_channel()
2571 v4l2_ctrl_grab(channel->mpeg_video_h264_level, true); in allegro_create_channel()
2572 v4l2_ctrl_grab(channel->mpeg_video_h264_i_frame_qp, true); in allegro_create_channel()
2573 v4l2_ctrl_grab(channel->mpeg_video_h264_max_qp, true); in allegro_create_channel()
2574 v4l2_ctrl_grab(channel->mpeg_video_h264_min_qp, true); in allegro_create_channel()
2575 v4l2_ctrl_grab(channel->mpeg_video_h264_p_frame_qp, true); in allegro_create_channel()
2576 v4l2_ctrl_grab(channel->mpeg_video_h264_b_frame_qp, true); in allegro_create_channel()
2578 v4l2_ctrl_grab(channel->mpeg_video_hevc_profile, true); in allegro_create_channel()
2579 v4l2_ctrl_grab(channel->mpeg_video_hevc_level, true); in allegro_create_channel()
2580 v4l2_ctrl_grab(channel->mpeg_video_hevc_tier, true); in allegro_create_channel()
2581 v4l2_ctrl_grab(channel->mpeg_video_hevc_i_frame_qp, true); in allegro_create_channel()
2582 v4l2_ctrl_grab(channel->mpeg_video_hevc_max_qp, true); in allegro_create_channel()
2583 v4l2_ctrl_grab(channel->mpeg_video_hevc_min_qp, true); in allegro_create_channel()
2584 v4l2_ctrl_grab(channel->mpeg_video_hevc_p_frame_qp, true); in allegro_create_channel()
2585 v4l2_ctrl_grab(channel->mpeg_video_hevc_b_frame_qp, true); in allegro_create_channel()
2587 v4l2_ctrl_grab(channel->mpeg_video_frame_rc_enable, true); in allegro_create_channel()
2588 v4l2_ctrl_grab(channel->mpeg_video_bitrate_mode, true); in allegro_create_channel()
2589 v4l2_ctrl_grab(channel->mpeg_video_bitrate, true); in allegro_create_channel()
2590 v4l2_ctrl_grab(channel->mpeg_video_bitrate_peak, true); in allegro_create_channel()
2591 v4l2_ctrl_grab(channel->mpeg_video_cpb_size, true); in allegro_create_channel()
2592 v4l2_ctrl_grab(channel->mpeg_video_gop_size, true); in allegro_create_channel()
2594 v4l2_ctrl_grab(channel->encoder_buffer, true); in allegro_create_channel()
2596 reinit_completion(&channel->completion); in allegro_create_channel()
2597 allegro_mcu_send_create_channel(dev, channel); in allegro_create_channel()
2598 timeout = wait_for_completion_timeout(&channel->completion, in allegro_create_channel()
2601 channel->error = -ETIMEDOUT; in allegro_create_channel()
2602 if (channel->error) in allegro_create_channel()
2607 channel->mcu_channel_id); in allegro_create_channel()
2612 allegro_destroy_channel(channel); in allegro_create_channel()
2614 return channel->error; in allegro_create_channel()
2624 static void allegro_channel_adjust(struct allegro_channel *channel) in allegro_channel_adjust() argument
2626 struct allegro_dev *dev = channel->dev; in allegro_channel_adjust()
2627 u32 codec = channel->codec; in allegro_channel_adjust()
2632 channel->sizeimage_encoded = in allegro_channel_adjust()
2633 estimate_stream_size(channel->width, channel->height); in allegro_channel_adjust()
2636 ctrl = channel->mpeg_video_h264_level; in allegro_channel_adjust()
2637 min = select_minimum_h264_level(channel->width, channel->height); in allegro_channel_adjust()
2639 ctrl = channel->mpeg_video_hevc_level; in allegro_channel_adjust()
2640 min = select_minimum_hevc_level(channel->width, channel->height); in allegro_channel_adjust()
2651 ctrl = channel->mpeg_video_bitrate; in allegro_channel_adjust()
2653 max = h264_maximum_bitrate(v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_level)); in allegro_channel_adjust()
2655 max = hevc_maximum_bitrate(v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_level)); in allegro_channel_adjust()
2665 ctrl = channel->mpeg_video_bitrate_peak; in allegro_channel_adjust()
2671 v4l2_ctrl_activate(channel->mpeg_video_h264_profile, in allegro_channel_adjust()
2673 v4l2_ctrl_activate(channel->mpeg_video_h264_level, in allegro_channel_adjust()
2675 v4l2_ctrl_activate(channel->mpeg_video_h264_i_frame_qp, in allegro_channel_adjust()
2677 v4l2_ctrl_activate(channel->mpeg_video_h264_max_qp, in allegro_channel_adjust()
2679 v4l2_ctrl_activate(channel->mpeg_video_h264_min_qp, in allegro_channel_adjust()
2681 v4l2_ctrl_activate(channel->mpeg_video_h264_p_frame_qp, in allegro_channel_adjust()
2683 v4l2_ctrl_activate(channel->mpeg_video_h264_b_frame_qp, in allegro_channel_adjust()
2686 v4l2_ctrl_activate(channel->mpeg_video_hevc_profile, in allegro_channel_adjust()
2688 v4l2_ctrl_activate(channel->mpeg_video_hevc_level, in allegro_channel_adjust()
2690 v4l2_ctrl_activate(channel->mpeg_video_hevc_tier, in allegro_channel_adjust()
2692 v4l2_ctrl_activate(channel->mpeg_video_hevc_i_frame_qp, in allegro_channel_adjust()
2694 v4l2_ctrl_activate(channel->mpeg_video_hevc_max_qp, in allegro_channel_adjust()
2696 v4l2_ctrl_activate(channel->mpeg_video_hevc_min_qp, in allegro_channel_adjust()
2698 v4l2_ctrl_activate(channel->mpeg_video_hevc_p_frame_qp, in allegro_channel_adjust()
2700 v4l2_ctrl_activate(channel->mpeg_video_hevc_b_frame_qp, in allegro_channel_adjust()
2704 channel->log2_max_frame_num = LOG2_MAX_FRAME_NUM; in allegro_channel_adjust()
2705 channel->temporal_mvp_enable = true; in allegro_channel_adjust()
2706 channel->dbf_ovr_en = (codec == V4L2_PIX_FMT_H264); in allegro_channel_adjust()
2707 channel->enable_deblocking_filter_override = (codec == V4L2_PIX_FMT_HEVC); in allegro_channel_adjust()
2708 channel->enable_reordering = (codec == V4L2_PIX_FMT_HEVC); in allegro_channel_adjust()
2709 channel->enable_loop_filter_across_tiles = true; in allegro_channel_adjust()
2710 channel->enable_loop_filter_across_slices = true; in allegro_channel_adjust()
2713 channel->b_hrz_me_range = 8; in allegro_channel_adjust()
2714 channel->b_vrt_me_range = 8; in allegro_channel_adjust()
2715 channel->p_hrz_me_range = 16; in allegro_channel_adjust()
2716 channel->p_vrt_me_range = 16; in allegro_channel_adjust()
2717 channel->max_cu_size = ilog2(16); in allegro_channel_adjust()
2718 channel->min_cu_size = ilog2(8); in allegro_channel_adjust()
2719 channel->max_tu_size = ilog2(4); in allegro_channel_adjust()
2720 channel->min_tu_size = ilog2(4); in allegro_channel_adjust()
2722 channel->b_hrz_me_range = 16; in allegro_channel_adjust()
2723 channel->b_vrt_me_range = 16; in allegro_channel_adjust()
2724 channel->p_hrz_me_range = 32; in allegro_channel_adjust()
2725 channel->p_vrt_me_range = 32; in allegro_channel_adjust()
2726 channel->max_cu_size = ilog2(32); in allegro_channel_adjust()
2727 channel->min_cu_size = ilog2(8); in allegro_channel_adjust()
2728 channel->max_tu_size = ilog2(32); in allegro_channel_adjust()
2729 channel->min_tu_size = ilog2(4); in allegro_channel_adjust()
2731 channel->max_transfo_depth_intra = 1; in allegro_channel_adjust()
2732 channel->max_transfo_depth_inter = 1; in allegro_channel_adjust()
2735 static void allegro_set_default_params(struct allegro_channel *channel) in allegro_set_default_params() argument
2737 channel->width = ALLEGRO_WIDTH_DEFAULT; in allegro_set_default_params()
2738 channel->height = ALLEGRO_HEIGHT_DEFAULT; in allegro_set_default_params()
2739 channel->stride = round_up(channel->width, 32); in allegro_set_default_params()
2740 channel->framerate = ALLEGRO_FRAMERATE_DEFAULT; in allegro_set_default_params()
2742 channel->colorspace = V4L2_COLORSPACE_REC709; in allegro_set_default_params()
2743 channel->ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT; in allegro_set_default_params()
2744 channel->quantization = V4L2_QUANTIZATION_DEFAULT; in allegro_set_default_params()
2745 channel->xfer_func = V4L2_XFER_FUNC_DEFAULT; in allegro_set_default_params()
2747 channel->pixelformat = V4L2_PIX_FMT_NV12; in allegro_set_default_params()
2748 channel->sizeimage_raw = channel->stride * channel->height * 3 / 2; in allegro_set_default_params()
2750 channel->codec = V4L2_PIX_FMT_H264; in allegro_set_default_params()
2758 struct allegro_channel *channel = vb2_get_drv_priv(vq); in allegro_queue_setup() local
2759 struct allegro_dev *dev = channel->dev; in allegro_queue_setup()
2768 if (sizes[0] < channel->sizeimage_raw) in allegro_queue_setup()
2771 if (sizes[0] < channel->sizeimage_encoded) in allegro_queue_setup()
2777 sizes[0] = channel->sizeimage_raw; in allegro_queue_setup()
2779 sizes[0] = channel->sizeimage_encoded; in allegro_queue_setup()
2788 struct allegro_channel *channel = vb2_get_drv_priv(vb->vb2_queue); in allegro_buf_prepare() local
2789 struct allegro_dev *dev = channel->dev; in allegro_buf_prepare()
2797 channel->mcu_channel_id); in allegro_buf_prepare()
2807 struct allegro_channel *channel = vb2_get_drv_priv(vb->vb2_queue); in allegro_buf_queue() local
2813 v4l2_m2m_dst_buf_is_last(channel->fh.m2m_ctx)) { in allegro_buf_queue()
2820 vbuf->sequence = channel->csequence++; in allegro_buf_queue()
2822 v4l2_m2m_last_buffer_done(channel->fh.m2m_ctx, vbuf); in allegro_buf_queue()
2823 allegro_channel_eos_event(channel); in allegro_buf_queue()
2827 v4l2_m2m_buf_queue(channel->fh.m2m_ctx, vbuf); in allegro_buf_queue()
2832 struct allegro_channel *channel = vb2_get_drv_priv(q); in allegro_start_streaming() local
2833 struct allegro_dev *dev = channel->dev; in allegro_start_streaming()
2839 v4l2_m2m_update_start_streaming_state(channel->fh.m2m_ctx, q); in allegro_start_streaming()
2842 channel->osequence = 0; in allegro_start_streaming()
2844 channel->csequence = 0; in allegro_start_streaming()
2851 struct allegro_channel *channel = vb2_get_drv_priv(q); in allegro_stop_streaming() local
2852 struct allegro_dev *dev = channel->dev; in allegro_stop_streaming()
2861 mutex_lock(&channel->shadow_list_lock); in allegro_stop_streaming()
2863 &channel->source_shadow_list, head) { in allegro_stop_streaming()
2867 mutex_unlock(&channel->shadow_list_lock); in allegro_stop_streaming()
2869 while ((buffer = v4l2_m2m_src_buf_remove(channel->fh.m2m_ctx))) in allegro_stop_streaming()
2872 mutex_lock(&channel->shadow_list_lock); in allegro_stop_streaming()
2874 &channel->stream_shadow_list, head) { in allegro_stop_streaming()
2878 mutex_unlock(&channel->shadow_list_lock); in allegro_stop_streaming()
2880 allegro_destroy_channel(channel); in allegro_stop_streaming()
2881 while ((buffer = v4l2_m2m_dst_buf_remove(channel->fh.m2m_ctx))) in allegro_stop_streaming()
2885 v4l2_m2m_update_stop_streaming_state(channel->fh.m2m_ctx, q); in allegro_stop_streaming()
2888 v4l2_m2m_has_stopped(channel->fh.m2m_ctx)) in allegro_stop_streaming()
2889 allegro_channel_eos_event(channel); in allegro_stop_streaming()
2907 struct allegro_channel *channel = priv; in allegro_queue_init() local
2909 src_vq->dev = &channel->dev->plat_dev->dev; in allegro_queue_init()
2913 src_vq->drv_priv = channel; in allegro_queue_init()
2917 src_vq->lock = &channel->dev->lock; in allegro_queue_init()
2922 dst_vq->dev = &channel->dev->plat_dev->dev; in allegro_queue_init()
2926 dst_vq->drv_priv = channel; in allegro_queue_init()
2930 dst_vq->lock = &channel->dev->lock; in allegro_queue_init()
2938 static int allegro_clamp_qp(struct allegro_channel *channel, in allegro_clamp_qp() argument
2944 next_ctrl = channel->mpeg_video_h264_p_frame_qp; in allegro_clamp_qp()
2946 next_ctrl = channel->mpeg_video_h264_b_frame_qp; in allegro_clamp_qp()
2953 return allegro_clamp_qp(channel, next_ctrl); in allegro_clamp_qp()
2956 static int allegro_clamp_bitrate(struct allegro_channel *channel, in allegro_clamp_bitrate() argument
2959 struct v4l2_ctrl *ctrl_bitrate = channel->mpeg_video_bitrate; in allegro_clamp_bitrate()
2960 struct v4l2_ctrl *ctrl_bitrate_peak = channel->mpeg_video_bitrate_peak; in allegro_clamp_bitrate()
2971 struct allegro_channel *channel = container_of(ctrl->handler, in allegro_try_ctrl() local
2977 allegro_clamp_bitrate(channel, ctrl); in allegro_try_ctrl()
2980 if (!channel->dev->has_encoder_buffer) in allegro_try_ctrl()
2990 struct allegro_channel *channel = container_of(ctrl->handler, in allegro_s_ctrl() local
2993 struct allegro_dev *dev = channel->dev; in allegro_s_ctrl()
3000 channel->frame_rc_enable = ctrl->val; in allegro_s_ctrl()
3003 channel->bitrate = channel->mpeg_video_bitrate->val; in allegro_s_ctrl()
3004 channel->bitrate_peak = channel->mpeg_video_bitrate_peak->val; in allegro_s_ctrl()
3005 v4l2_ctrl_activate(channel->mpeg_video_bitrate_peak, in allegro_s_ctrl()
3011 allegro_clamp_qp(channel, ctrl); in allegro_s_ctrl()
3037 struct allegro_channel *channel = NULL; in allegro_open() local
3046 channel = kzalloc(sizeof(*channel), GFP_KERNEL); in allegro_open()
3047 if (!channel) in allegro_open()
3050 v4l2_fh_init(&channel->fh, vdev); in allegro_open()
3052 init_completion(&channel->completion); in allegro_open()
3053 INIT_LIST_HEAD(&channel->source_shadow_list); in allegro_open()
3054 INIT_LIST_HEAD(&channel->stream_shadow_list); in allegro_open()
3055 mutex_init(&channel->shadow_list_lock); in allegro_open()
3057 channel->dev = dev; in allegro_open()
3059 allegro_set_default_params(channel); in allegro_open()
3061 handler = &channel->ctrl_handler; in allegro_open()
3063 channel->mpeg_video_h264_profile = v4l2_ctrl_new_std_menu(handler, in allegro_open()
3069 channel->mpeg_video_h264_level = v4l2_ctrl_new_std_menu(handler, in allegro_open()
3074 channel->mpeg_video_h264_i_frame_qp = in allegro_open()
3079 channel->mpeg_video_h264_max_qp = in allegro_open()
3084 channel->mpeg_video_h264_min_qp = in allegro_open()
3089 channel->mpeg_video_h264_p_frame_qp = in allegro_open()
3094 channel->mpeg_video_h264_b_frame_qp = in allegro_open()
3100 channel->mpeg_video_hevc_profile = in allegro_open()
3106 channel->mpeg_video_hevc_level = in allegro_open()
3112 channel->mpeg_video_hevc_tier = in allegro_open()
3118 channel->mpeg_video_hevc_i_frame_qp = in allegro_open()
3123 channel->mpeg_video_hevc_max_qp = in allegro_open()
3128 channel->mpeg_video_hevc_min_qp = in allegro_open()
3133 channel->mpeg_video_hevc_p_frame_qp = in allegro_open()
3138 channel->mpeg_video_hevc_b_frame_qp = in allegro_open()
3144 channel->mpeg_video_frame_rc_enable = in allegro_open()
3150 channel->mpeg_video_bitrate_mode = v4l2_ctrl_new_std_menu(handler, in allegro_open()
3156 if (channel->codec == V4L2_PIX_FMT_H264) { in allegro_open()
3167 channel->mpeg_video_bitrate = v4l2_ctrl_new_std(handler, in allegro_open()
3171 channel->mpeg_video_bitrate_peak = v4l2_ctrl_new_std(handler, in allegro_open()
3175 channel->mpeg_video_cpb_size = v4l2_ctrl_new_std(handler, in allegro_open()
3179 channel->mpeg_video_gop_size = v4l2_ctrl_new_std(handler, in allegro_open()
3184 channel->encoder_buffer = v4l2_ctrl_new_custom(handler, in allegro_open()
3196 channel->fh.ctrl_handler = handler; in allegro_open()
3198 v4l2_ctrl_cluster(3, &channel->mpeg_video_bitrate_mode); in allegro_open()
3202 channel->mcu_channel_id = -1; in allegro_open()
3203 channel->user_id = -1; in allegro_open()
3205 INIT_LIST_HEAD(&channel->buffers_reference); in allegro_open()
3206 INIT_LIST_HEAD(&channel->buffers_intermediate); in allegro_open()
3208 channel->fh.m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, channel, in allegro_open()
3211 if (IS_ERR(channel->fh.m2m_ctx)) { in allegro_open()
3212 ret = PTR_ERR(channel->fh.m2m_ctx); in allegro_open()
3216 list_add(&channel->list, &dev->channels); in allegro_open()
3217 file->private_data = &channel->fh; in allegro_open()
3218 v4l2_fh_add(&channel->fh); in allegro_open()
3220 allegro_channel_adjust(channel); in allegro_open()
3226 kfree(channel); in allegro_open()
3232 struct allegro_channel *channel = fh_to_channel(file->private_data); in allegro_release() local
3234 v4l2_m2m_ctx_release(channel->fh.m2m_ctx); in allegro_release()
3236 list_del(&channel->list); in allegro_release()
3238 v4l2_ctrl_handler_free(&channel->ctrl_handler); in allegro_release()
3240 v4l2_fh_del(&channel->fh); in allegro_release()
3241 v4l2_fh_exit(&channel->fh); in allegro_release()
3243 kfree(channel); in allegro_release()
3283 struct allegro_channel *channel = fh_to_channel(fh); in allegro_g_fmt_vid_cap() local
3286 f->fmt.pix.width = channel->width; in allegro_g_fmt_vid_cap()
3287 f->fmt.pix.height = channel->height; in allegro_g_fmt_vid_cap()
3289 f->fmt.pix.colorspace = channel->colorspace; in allegro_g_fmt_vid_cap()
3290 f->fmt.pix.ycbcr_enc = channel->ycbcr_enc; in allegro_g_fmt_vid_cap()
3291 f->fmt.pix.quantization = channel->quantization; in allegro_g_fmt_vid_cap()
3292 f->fmt.pix.xfer_func = channel->xfer_func; in allegro_g_fmt_vid_cap()
3294 f->fmt.pix.pixelformat = channel->codec; in allegro_g_fmt_vid_cap()
3296 f->fmt.pix.sizeimage = channel->sizeimage_encoded; in allegro_g_fmt_vid_cap()
3325 struct allegro_channel *channel = fh_to_channel(fh); in allegro_s_fmt_vid_cap() local
3333 vq = v4l2_m2m_get_vq(channel->fh.m2m_ctx, f->type); in allegro_s_fmt_vid_cap()
3339 channel->codec = f->fmt.pix.pixelformat; in allegro_s_fmt_vid_cap()
3341 allegro_channel_adjust(channel); in allegro_s_fmt_vid_cap()
3349 struct allegro_channel *channel = fh_to_channel(fh); in allegro_g_fmt_vid_out() local
3353 f->fmt.pix.width = channel->width; in allegro_g_fmt_vid_out()
3354 f->fmt.pix.height = channel->height; in allegro_g_fmt_vid_out()
3356 f->fmt.pix.colorspace = channel->colorspace; in allegro_g_fmt_vid_out()
3357 f->fmt.pix.ycbcr_enc = channel->ycbcr_enc; in allegro_g_fmt_vid_out()
3358 f->fmt.pix.quantization = channel->quantization; in allegro_g_fmt_vid_out()
3359 f->fmt.pix.xfer_func = channel->xfer_func; in allegro_g_fmt_vid_out()
3361 f->fmt.pix.pixelformat = channel->pixelformat; in allegro_g_fmt_vid_out()
3362 f->fmt.pix.bytesperline = channel->stride; in allegro_g_fmt_vid_out()
3363 f->fmt.pix.sizeimage = channel->sizeimage_raw; in allegro_g_fmt_vid_out()
3396 struct allegro_channel *channel = fh_to_channel(fh); in allegro_s_fmt_vid_out() local
3403 channel->width = f->fmt.pix.width; in allegro_s_fmt_vid_out()
3404 channel->height = f->fmt.pix.height; in allegro_s_fmt_vid_out()
3405 channel->stride = f->fmt.pix.bytesperline; in allegro_s_fmt_vid_out()
3406 channel->sizeimage_raw = f->fmt.pix.sizeimage; in allegro_s_fmt_vid_out()
3408 channel->colorspace = f->fmt.pix.colorspace; in allegro_s_fmt_vid_out()
3409 channel->ycbcr_enc = f->fmt.pix.ycbcr_enc; in allegro_s_fmt_vid_out()
3410 channel->quantization = f->fmt.pix.quantization; in allegro_s_fmt_vid_out()
3411 channel->xfer_func = f->fmt.pix.xfer_func; in allegro_s_fmt_vid_out()
3413 allegro_channel_adjust(channel); in allegro_s_fmt_vid_out()
3418 static int allegro_channel_cmd_stop(struct allegro_channel *channel) in allegro_channel_cmd_stop() argument
3420 if (v4l2_m2m_has_stopped(channel->fh.m2m_ctx)) in allegro_channel_cmd_stop()
3421 allegro_channel_eos_event(channel); in allegro_channel_cmd_stop()
3426 static int allegro_channel_cmd_start(struct allegro_channel *channel) in allegro_channel_cmd_start() argument
3428 if (v4l2_m2m_has_stopped(channel->fh.m2m_ctx)) in allegro_channel_cmd_start()
3429 vb2_clear_last_buffer_dequeued(&channel->fh.m2m_ctx->cap_q_ctx.q); in allegro_channel_cmd_start()
3437 struct allegro_channel *channel = fh_to_channel(fh); in allegro_encoder_cmd() local
3449 err = allegro_channel_cmd_stop(channel); in allegro_encoder_cmd()
3452 err = allegro_channel_cmd_start(channel); in allegro_encoder_cmd()
3487 struct allegro_channel *channel = fh_to_channel(fh); in allegro_ioctl_streamon() local
3491 err = allegro_create_channel(channel); in allegro_ioctl_streamon()
3502 struct allegro_channel *channel = fh_to_channel(fh); in allegro_g_parm() local
3510 timeperframe->numerator = channel->framerate.denominator; in allegro_g_parm()
3511 timeperframe->denominator = channel->framerate.numerator; in allegro_g_parm()
3519 struct allegro_channel *channel = fh_to_channel(fh); in allegro_s_parm() local
3533 channel->framerate.numerator = timeperframe->denominator / div; in allegro_s_parm()
3534 channel->framerate.denominator = timeperframe->numerator / div; in allegro_s_parm()
3612 struct allegro_channel *channel = priv; in allegro_device_run() local
3613 struct allegro_dev *dev = channel->dev; in allegro_device_run()
3623 dst_buf = v4l2_m2m_dst_buf_remove(channel->fh.m2m_ctx); in allegro_device_run()
3626 dst_handle = allegro_put_buffer(channel, &channel->stream_shadow_list, in allegro_device_run()
3628 allegro_mcu_send_put_stream_buffer(dev, channel, dst_addr, dst_size, in allegro_device_run()
3631 src_buf = v4l2_m2m_src_buf_remove(channel->fh.m2m_ctx); in allegro_device_run()
3632 src_buf->sequence = channel->osequence++; in allegro_device_run()
3634 src_uv = src_y + (channel->stride * channel->height); in allegro_device_run()
3635 src_handle = allegro_put_buffer(channel, &channel->source_shadow_list, in allegro_device_run()
3637 allegro_mcu_send_encode_frame(dev, channel, src_y, src_uv, src_handle); in allegro_device_run()
3639 v4l2_m2m_job_finish(dev->m2m_dev, channel->fh.m2m_ctx); in allegro_device_run()