• Home
  • Raw
  • Download

Lines Matching refs:inst

106 find_format(struct venus_inst *inst, u32 pixfmt, u32 type)  in find_format()  argument
121 !venus_helper_check_codec(inst, fmt[i].pixfmt)) in find_format()
128 find_format_by_index(struct venus_inst *inst, unsigned int index, u32 type) in find_format_by_index() argument
149 !venus_helper_check_codec(inst, fmt[i].pixfmt)) in find_format_by_index()
156 vdec_try_fmt_common(struct venus_inst *inst, struct v4l2_format *f) in vdec_try_fmt_common() argument
166 fmt = find_format(inst, pixmp->pixelformat, f->type); in vdec_try_fmt_common()
174 fmt = find_format(inst, pixmp->pixelformat, f->type); in vdec_try_fmt_common()
179 pixmp->width = clamp(pixmp->width, inst->cap_width.min, in vdec_try_fmt_common()
180 inst->cap_width.max); in vdec_try_fmt_common()
181 pixmp->height = clamp(pixmp->height, inst->cap_height.min, in vdec_try_fmt_common()
182 inst->cap_height.max); in vdec_try_fmt_common()
210 struct venus_inst *inst = to_inst(file); in vdec_try_fmt() local
212 vdec_try_fmt_common(inst, f); in vdec_try_fmt()
219 struct venus_inst *inst = to_inst(file); in vdec_g_fmt() local
224 fmt = inst->fmt_cap; in vdec_g_fmt()
226 fmt = inst->fmt_out; in vdec_g_fmt()
228 if (inst->reconfig) { in vdec_g_fmt()
231 inst->out_width = inst->reconfig_width; in vdec_g_fmt()
232 inst->out_height = inst->reconfig_height; in vdec_g_fmt()
233 inst->reconfig = false; in vdec_g_fmt()
236 format.fmt.pix_mp.pixelformat = inst->fmt_cap->pixfmt; in vdec_g_fmt()
237 format.fmt.pix_mp.width = inst->out_width; in vdec_g_fmt()
238 format.fmt.pix_mp.height = inst->out_height; in vdec_g_fmt()
240 vdec_try_fmt_common(inst, &format); in vdec_g_fmt()
242 inst->width = format.fmt.pix_mp.width; in vdec_g_fmt()
243 inst->height = format.fmt.pix_mp.height; in vdec_g_fmt()
249 pixmp->width = inst->width; in vdec_g_fmt()
250 pixmp->height = inst->height; in vdec_g_fmt()
251 pixmp->colorspace = inst->colorspace; in vdec_g_fmt()
252 pixmp->ycbcr_enc = inst->ycbcr_enc; in vdec_g_fmt()
253 pixmp->quantization = inst->quantization; in vdec_g_fmt()
254 pixmp->xfer_func = inst->xfer_func; in vdec_g_fmt()
256 pixmp->width = inst->out_width; in vdec_g_fmt()
257 pixmp->height = inst->out_height; in vdec_g_fmt()
260 vdec_try_fmt_common(inst, f); in vdec_g_fmt()
267 struct venus_inst *inst = to_inst(file); in vdec_s_fmt() local
276 fmt = vdec_try_fmt_common(inst, f); in vdec_s_fmt()
280 pixfmt_cap = inst->fmt_cap->pixfmt; in vdec_s_fmt()
283 pixfmt_out = inst->fmt_out->pixfmt; in vdec_s_fmt()
292 vdec_try_fmt_common(inst, &format); in vdec_s_fmt()
295 inst->out_width = format.fmt.pix_mp.width; in vdec_s_fmt()
296 inst->out_height = format.fmt.pix_mp.height; in vdec_s_fmt()
297 inst->colorspace = pixmp->colorspace; in vdec_s_fmt()
298 inst->ycbcr_enc = pixmp->ycbcr_enc; in vdec_s_fmt()
299 inst->quantization = pixmp->quantization; in vdec_s_fmt()
300 inst->xfer_func = pixmp->xfer_func; in vdec_s_fmt()
309 vdec_try_fmt_common(inst, &format); in vdec_s_fmt()
311 inst->width = format.fmt.pix_mp.width; in vdec_s_fmt()
312 inst->height = format.fmt.pix_mp.height; in vdec_s_fmt()
315 inst->fmt_out = fmt; in vdec_s_fmt()
317 inst->fmt_cap = fmt; in vdec_s_fmt()
325 struct venus_inst *inst = to_inst(file); in vdec_g_selection() local
337 s->r.width = inst->out_width; in vdec_g_selection()
338 s->r.height = inst->out_height; in vdec_g_selection()
344 s->r.width = inst->width; in vdec_g_selection()
345 s->r.height = inst->height; in vdec_g_selection()
351 s->r.width = inst->out_width; in vdec_g_selection()
352 s->r.height = inst->out_height; in vdec_g_selection()
376 struct venus_inst *inst = to_inst(file); in vdec_enum_fmt() local
381 fmt = find_format_by_index(inst, f->index, f->type); in vdec_enum_fmt()
392 struct venus_inst *inst = to_inst(file); in vdec_s_parm() local
403 timeperframe->denominator = inst->timeperframe.denominator; in vdec_s_parm()
405 timeperframe->numerator = inst->timeperframe.numerator; in vdec_s_parm()
418 inst->fps = fps; in vdec_s_parm()
419 inst->timeperframe = *timeperframe; in vdec_s_parm()
427 struct venus_inst *inst = to_inst(file); in vdec_enum_framesizes() local
430 fmt = find_format(inst, fsize->pixel_format, in vdec_enum_framesizes()
433 fmt = find_format(inst, fsize->pixel_format, in vdec_enum_framesizes()
444 fsize->stepwise.min_width = inst->cap_width.min; in vdec_enum_framesizes()
445 fsize->stepwise.max_width = inst->cap_width.max; in vdec_enum_framesizes()
446 fsize->stepwise.step_width = inst->cap_width.step_size; in vdec_enum_framesizes()
447 fsize->stepwise.min_height = inst->cap_height.min; in vdec_enum_framesizes()
448 fsize->stepwise.max_height = inst->cap_height.max; in vdec_enum_framesizes()
449 fsize->stepwise.step_height = inst->cap_height.step_size; in vdec_enum_framesizes()
487 struct venus_inst *inst = to_inst(file); in vdec_decoder_cmd() local
495 mutex_lock(&inst->lock); in vdec_decoder_cmd()
501 if (!(inst->streamon_out & inst->streamon_cap)) in vdec_decoder_cmd()
508 ret = hfi_session_process_buf(inst, &fdata); in vdec_decoder_cmd()
511 mutex_unlock(&inst->lock); in vdec_decoder_cmd()
543 static int vdec_set_properties(struct venus_inst *inst) in vdec_set_properties() argument
545 struct vdec_controls *ctr = &inst->controls.dec; in vdec_set_properties()
546 struct venus_core *core = inst->core; in vdec_set_properties()
553 ret = hfi_session_set_property(inst, ptype, &en); in vdec_set_properties()
559 inst->cap_bufs_mode_dynamic) { in vdec_set_properties()
566 ret = hfi_session_set_property(inst, ptype, &mode); in vdec_set_properties()
574 ret = hfi_session_set_property(inst, ptype, &en); in vdec_set_properties()
582 static int vdec_init_session(struct venus_inst *inst) in vdec_init_session() argument
586 ret = hfi_session_init(inst, inst->fmt_out->pixfmt); in vdec_init_session()
590 ret = venus_helper_set_input_resolution(inst, inst->out_width, in vdec_init_session()
591 inst->out_height); in vdec_init_session()
595 ret = venus_helper_set_color_format(inst, inst->fmt_cap->pixfmt); in vdec_init_session()
601 hfi_session_deinit(inst); in vdec_init_session()
605 static int vdec_cap_num_buffers(struct venus_inst *inst, unsigned int *num) in vdec_cap_num_buffers() argument
610 ret = vdec_init_session(inst); in vdec_cap_num_buffers()
614 ret = venus_helper_get_bufreq(inst, HFI_BUFFER_OUTPUT, &bufreq); in vdec_cap_num_buffers()
618 hfi_session_deinit(inst); in vdec_cap_num_buffers()
627 struct venus_inst *inst = vb2_get_drv_priv(q); in vdec_queue_setup() local
633 *num_planes != inst->fmt_out->num_planes) in vdec_queue_setup()
637 *num_planes != inst->fmt_cap->num_planes) in vdec_queue_setup()
641 sizes[0] < inst->input_buf_size) in vdec_queue_setup()
645 sizes[0] < inst->output_buf_size) in vdec_queue_setup()
653 *num_planes = inst->fmt_out->num_planes; in vdec_queue_setup()
654 sizes[0] = get_framesize_compressed(inst->out_width, in vdec_queue_setup()
655 inst->out_height); in vdec_queue_setup()
656 inst->input_buf_size = sizes[0]; in vdec_queue_setup()
657 inst->num_input_bufs = *num_buffers; in vdec_queue_setup()
659 ret = vdec_cap_num_buffers(inst, &num); in vdec_queue_setup()
663 inst->num_output_bufs = num; in vdec_queue_setup()
666 *num_planes = inst->fmt_cap->num_planes; in vdec_queue_setup()
668 ret = vdec_cap_num_buffers(inst, &num); in vdec_queue_setup()
675 sizes[p] = get_framesize_uncompressed(p, inst->width, in vdec_queue_setup()
676 inst->height); in vdec_queue_setup()
678 inst->num_output_bufs = *num_buffers; in vdec_queue_setup()
679 inst->output_buf_size = sizes[0]; in vdec_queue_setup()
689 static int vdec_verify_conf(struct venus_inst *inst) in vdec_verify_conf() argument
694 if (!inst->num_input_bufs || !inst->num_output_bufs) in vdec_verify_conf()
697 ret = venus_helper_get_bufreq(inst, HFI_BUFFER_OUTPUT, &bufreq); in vdec_verify_conf()
701 if (inst->num_output_bufs < bufreq.count_actual || in vdec_verify_conf()
702 inst->num_output_bufs < bufreq.count_min) in vdec_verify_conf()
705 ret = venus_helper_get_bufreq(inst, HFI_BUFFER_INPUT, &bufreq); in vdec_verify_conf()
709 if (inst->num_input_bufs < bufreq.count_min) in vdec_verify_conf()
717 struct venus_inst *inst = vb2_get_drv_priv(q); in vdec_start_streaming() local
718 struct venus_core *core = inst->core; in vdec_start_streaming()
722 mutex_lock(&inst->lock); in vdec_start_streaming()
725 inst->streamon_out = 1; in vdec_start_streaming()
727 inst->streamon_cap = 1; in vdec_start_streaming()
729 if (!(inst->streamon_out & inst->streamon_cap)) { in vdec_start_streaming()
730 mutex_unlock(&inst->lock); in vdec_start_streaming()
734 venus_helper_init_instance(inst); in vdec_start_streaming()
736 inst->reconfig = false; in vdec_start_streaming()
737 inst->sequence_cap = 0; in vdec_start_streaming()
738 inst->sequence_out = 0; in vdec_start_streaming()
740 ret = vdec_init_session(inst); in vdec_start_streaming()
744 ret = vdec_set_properties(inst); in vdec_start_streaming()
753 buf_sz.size = inst->output_buf_size; in vdec_start_streaming()
755 ret = hfi_session_set_property(inst, ptype, &buf_sz); in vdec_start_streaming()
760 ret = vdec_verify_conf(inst); in vdec_start_streaming()
764 ret = venus_helper_set_num_bufs(inst, inst->num_input_bufs, in vdec_start_streaming()
769 ret = venus_helper_vb2_start_streaming(inst); in vdec_start_streaming()
773 mutex_unlock(&inst->lock); in vdec_start_streaming()
778 hfi_session_deinit(inst); in vdec_start_streaming()
780 venus_helper_buffers_done(inst, VB2_BUF_STATE_QUEUED); in vdec_start_streaming()
782 inst->streamon_out = 0; in vdec_start_streaming()
784 inst->streamon_cap = 0; in vdec_start_streaming()
785 mutex_unlock(&inst->lock); in vdec_start_streaming()
798 static void vdec_buf_done(struct venus_inst *inst, unsigned int buf_type, in vdec_buf_done() argument
812 vbuf = venus_helper_find_buf(inst, type, tag); in vdec_buf_done()
822 max_t(unsigned int, inst->output_buf_size, bytesused); in vdec_buf_done()
825 vbuf->sequence = inst->sequence_cap++; in vdec_buf_done()
830 v4l2_event_queue_fh(&inst->fh, &ev); in vdec_buf_done()
833 vbuf->sequence = inst->sequence_out++; in vdec_buf_done()
845 static void vdec_event_notify(struct venus_inst *inst, u32 event, in vdec_event_notify() argument
848 struct venus_core *core = inst->core; in vdec_event_notify()
856 inst->session_error = true; in vdec_event_notify()
857 dev_err(dev, "dec: event session error %x\n", inst->error); in vdec_event_notify()
862 hfi_session_continue(inst); in vdec_event_notify()
866 inst->reconfig_height = data->height; in vdec_event_notify()
867 inst->reconfig_width = data->width; in vdec_event_notify()
868 inst->reconfig = true; in vdec_event_notify()
870 v4l2_event_queue_fh(&inst->fh, &ev); in vdec_event_notify()
876 venus_helper_release_buf_ref(inst, data->tag); in vdec_event_notify()
892 static void vdec_inst_init(struct venus_inst *inst) in vdec_inst_init() argument
894 inst->fmt_out = &vdec_formats[6]; in vdec_inst_init()
895 inst->fmt_cap = &vdec_formats[0]; in vdec_inst_init()
896 inst->width = 1280; in vdec_inst_init()
897 inst->height = ALIGN(720, 32); in vdec_inst_init()
898 inst->out_width = 1280; in vdec_inst_init()
899 inst->out_height = 720; in vdec_inst_init()
900 inst->fps = 30; in vdec_inst_init()
901 inst->timeperframe.numerator = 1; in vdec_inst_init()
902 inst->timeperframe.denominator = 30; in vdec_inst_init()
904 inst->cap_width.min = 64; in vdec_inst_init()
905 inst->cap_width.max = 1920; in vdec_inst_init()
906 if (inst->core->res->hfi_version == HFI_VERSION_3XX) in vdec_inst_init()
907 inst->cap_width.max = 3840; in vdec_inst_init()
908 inst->cap_width.step_size = 1; in vdec_inst_init()
909 inst->cap_height.min = 64; in vdec_inst_init()
910 inst->cap_height.max = ALIGN(1080, 32); in vdec_inst_init()
911 if (inst->core->res->hfi_version == HFI_VERSION_3XX) in vdec_inst_init()
912 inst->cap_height.max = ALIGN(2160, 32); in vdec_inst_init()
913 inst->cap_height.step_size = 1; in vdec_inst_init()
914 inst->cap_framerate.min = 1; in vdec_inst_init()
915 inst->cap_framerate.max = 30; in vdec_inst_init()
916 inst->cap_framerate.step_size = 1; in vdec_inst_init()
917 inst->cap_mbs_per_frame.min = 16; in vdec_inst_init()
918 inst->cap_mbs_per_frame.max = 8160; in vdec_inst_init()
929 struct venus_inst *inst = priv; in m2m_queue_init() local
937 src_vq->drv_priv = inst; in m2m_queue_init()
941 src_vq->dev = inst->core->dev; in m2m_queue_init()
951 dst_vq->drv_priv = inst; in m2m_queue_init()
955 dst_vq->dev = inst->core->dev; in m2m_queue_init()
968 struct venus_inst *inst; in vdec_open() local
971 inst = kzalloc(sizeof(*inst), GFP_KERNEL); in vdec_open()
972 if (!inst) in vdec_open()
975 INIT_LIST_HEAD(&inst->registeredbufs); in vdec_open()
976 INIT_LIST_HEAD(&inst->internalbufs); in vdec_open()
977 INIT_LIST_HEAD(&inst->list); in vdec_open()
978 mutex_init(&inst->lock); in vdec_open()
980 inst->core = core; in vdec_open()
981 inst->session_type = VIDC_SESSION_TYPE_DEC; in vdec_open()
982 inst->num_output_bufs = 1; in vdec_open()
984 venus_helper_init_instance(inst); in vdec_open()
990 ret = vdec_ctrl_init(inst); in vdec_open()
994 ret = hfi_session_create(inst, &vdec_hfi_ops); in vdec_open()
998 vdec_inst_init(inst); in vdec_open()
1004 inst->m2m_dev = v4l2_m2m_init(&vdec_m2m_ops); in vdec_open()
1005 if (IS_ERR(inst->m2m_dev)) { in vdec_open()
1006 ret = PTR_ERR(inst->m2m_dev); in vdec_open()
1010 inst->m2m_ctx = v4l2_m2m_ctx_init(inst->m2m_dev, inst, m2m_queue_init); in vdec_open()
1011 if (IS_ERR(inst->m2m_ctx)) { in vdec_open()
1012 ret = PTR_ERR(inst->m2m_ctx); in vdec_open()
1016 v4l2_fh_init(&inst->fh, core->vdev_dec); in vdec_open()
1018 inst->fh.ctrl_handler = &inst->ctrl_handler; in vdec_open()
1019 v4l2_fh_add(&inst->fh); in vdec_open()
1020 inst->fh.m2m_ctx = inst->m2m_ctx; in vdec_open()
1021 file->private_data = &inst->fh; in vdec_open()
1026 v4l2_m2m_release(inst->m2m_dev); in vdec_open()
1028 hfi_session_destroy(inst); in vdec_open()
1030 vdec_ctrl_deinit(inst); in vdec_open()
1034 kfree(inst); in vdec_open()
1040 struct venus_inst *inst = to_inst(file); in vdec_close() local
1042 v4l2_m2m_ctx_release(inst->m2m_ctx); in vdec_close()
1043 v4l2_m2m_release(inst->m2m_dev); in vdec_close()
1044 vdec_ctrl_deinit(inst); in vdec_close()
1045 hfi_session_destroy(inst); in vdec_close()
1046 mutex_destroy(&inst->lock); in vdec_close()
1047 v4l2_fh_del(&inst->fh); in vdec_close()
1048 v4l2_fh_exit(&inst->fh); in vdec_close()
1050 pm_runtime_put_sync(inst->core->dev_dec); in vdec_close()
1052 kfree(inst); in vdec_close()