Lines Matching refs:inst
105 struct vpu_inst *inst = to_inst(file);
109 fmt = vpu_helper_enum_format(inst, f->type, f->index);
121 struct vpu_inst *inst = to_inst(file);
127 if (!vpu_helper_find_format(inst, 0, fsize->pixel_format))
130 res = vpu_get_resource(inst);
146 struct vpu_inst *inst = to_inst(file);
152 if (!vpu_helper_find_format(inst, 0, fival->pixel_format))
158 res = vpu_get_resource(inst);
178 struct vpu_inst *inst = to_inst(file);
179 struct venc_t *venc = inst->priv;
184 cur_fmt = vpu_get_format(inst, f->type);
207 struct vpu_inst *inst = to_inst(file);
210 vpu_try_fmt_common(inst, f, &fmt);
217 struct vpu_inst *inst = to_inst(file);
221 struct venc_t *venc = inst->priv;
224 q = v4l2_m2m_get_vq(inst->fh.m2m_ctx, f->type);
230 if (vpu_try_fmt_common(inst, f, &fmt))
233 cur_fmt = vpu_get_format(inst, f->type);
269 struct vpu_inst *inst = to_inst(file);
270 struct venc_t *venc = inst->priv;
279 if (!vpu_helper_check_type(inst, parm->type))
293 struct vpu_inst *inst = to_inst(file);
294 struct venc_t *venc = inst->priv;
304 if (!vpu_helper_check_type(inst, parm->type))
332 struct vpu_inst *inst = to_inst(file);
333 struct venc_t *venc = inst->priv;
343 s->r.width = inst->out_format.width;
344 s->r.height = inst->out_format.height;
386 struct vpu_inst *inst = to_inst(file);
388 struct venc_t *venc = inst->priv;
390 res = vpu_get_resource(inst);
410 inst->crop = venc->params.crop;
415 static int venc_drain(struct vpu_inst *inst)
417 struct venc_t *venc = inst->priv;
420 if (!inst->fh.m2m_ctx)
423 if (inst->state != VPU_CODEC_STATE_DRAIN)
426 if (!vpu_is_source_empty(inst))
433 vpu_trace(inst->dev, "[%d]\n", inst->id);
434 ret = vpu_session_stop(inst);
437 inst->state = VPU_CODEC_STATE_STOP;
443 static int venc_request_eos(struct vpu_inst *inst)
445 inst->state = VPU_CODEC_STATE_DRAIN;
446 venc_drain(inst);
453 struct vpu_inst *inst = to_inst(file);
460 vpu_inst_lock(inst);
462 if (inst->state == VPU_CODEC_STATE_DEINIT)
463 vpu_set_last_buffer_dequeued(inst, true);
465 venc_request_eos(inst);
467 vpu_inst_unlock(inst);
517 struct vpu_inst *inst = ctrl_to_inst(ctrl);
518 struct venc_t *venc = inst->priv;
521 vpu_inst_lock(inst);
582 vpu_inst_unlock(inst);
592 static int venc_ctrl_init(struct vpu_inst *inst)
597 ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 20);
601 v4l2_ctrl_new_std_menu(&inst->ctrl_handler, &venc_ctrl_ops,
609 v4l2_ctrl_new_std_menu(&inst->ctrl_handler, &venc_ctrl_ops,
615 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
618 v4l2_ctrl_new_std_menu(&inst->ctrl_handler, &venc_ctrl_ops,
625 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
632 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
638 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
641 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
644 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
646 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
648 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
650 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
652 ctrl = v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
656 ctrl = v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
661 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
664 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
666 v4l2_ctrl_new_std_menu(&inst->ctrl_handler, &venc_ctrl_ops,
671 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
674 v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
677 v4l2_ctrl_new_std_menu(&inst->ctrl_handler, &venc_ctrl_ops,
683 if (inst->ctrl_handler.error) {
684 ret = inst->ctrl_handler.error;
685 v4l2_ctrl_handler_free(&inst->ctrl_handler);
689 ret = v4l2_ctrl_handler_setup(&inst->ctrl_handler);
691 dev_err(inst->dev, "[%d] setup ctrls fail, ret = %d\n", inst->id, ret);
692 v4l2_ctrl_handler_free(&inst->ctrl_handler);
699 static bool venc_check_ready(struct vpu_inst *inst, unsigned int type)
701 struct venc_t *venc = inst->priv;
704 if (vpu_helper_get_free_space(inst) < venc->cpb_size)
737 static void venc_input_done(struct vpu_inst *inst)
739 struct venc_t *venc = inst->priv;
741 vpu_inst_lock(inst);
743 vpu_process_output_buffer(inst);
744 if (inst->state == VPU_CODEC_STATE_DRAIN)
745 venc_drain(inst);
746 vpu_inst_unlock(inst);
755 static int venc_precheck_encoded_frame(struct vpu_inst *inst, struct venc_frame_t *frame)
763 venc = inst->priv;
764 skipped = vpu_helper_find_startcode(&inst->stream_buffer,
765 inst->cap_format.pixfmt,
766 frame->info.wptr - inst->stream_buffer.phys,
770 frame->info.wptr = vpu_helper_step_walk(&inst->stream_buffer,
779 static int venc_get_one_encoded_frame(struct vpu_inst *inst,
783 struct venc_t *venc = inst->priv;
789 src_buf = vpu_find_buf_by_sequence(inst, inst->out_format.type, frame->info.frame_id);
793 v4l2_m2m_src_buf_remove_by_buf(inst->fh.m2m_ctx, src_buf);
798 if (!venc_get_enable(inst->priv, vbuf->vb2_buf.type)) {
807 venc_precheck_encoded_frame(inst, frame);
813 vpu_helper_copy_from_stream_buffer(&inst->stream_buffer,
815 vpu_iface_update_stream_buffer(inst, rptr, 0);
819 vbuf->field = inst->cap_format.field;
822 dev_dbg(inst->dev, "[%d][OUTPUT TS]%32lld\n", inst->id, vbuf->vb2_buf.timestamp);
827 dev_dbg(inst->dev, "[%d][%d]key frame\n", inst->id, frame->info.frame_id);
832 static int venc_get_encoded_frames(struct vpu_inst *inst)
838 if (!inst->fh.m2m_ctx)
840 venc = inst->priv;
842 if (venc_get_one_encoded_frame(inst, frame,
843 v4l2_m2m_dst_buf_remove(inst->fh.m2m_ctx)))
852 static int venc_frame_encoded(struct vpu_inst *inst, void *arg)
861 venc = inst->priv;
869 vpu_inst_lock(inst);
872 venc_get_encoded_frames(inst);
873 vpu_inst_unlock(inst);
878 static void venc_set_last_buffer_dequeued(struct vpu_inst *inst)
880 struct venc_t *venc = inst->priv;
883 vpu_set_last_buffer_dequeued(inst, true);
886 static void venc_stop_done(struct vpu_inst *inst)
888 struct venc_t *venc = inst->priv;
890 vpu_inst_lock(inst);
892 venc_set_last_buffer_dequeued(inst);
893 vpu_inst_unlock(inst);
898 static void venc_event_notify(struct vpu_inst *inst, u32 event, void *data)
902 static void venc_release(struct vpu_inst *inst)
906 static void venc_cleanup(struct vpu_inst *inst)
910 if (!inst)
913 venc = inst->priv;
915 inst->priv = NULL;
916 vfree(inst);
919 static int venc_start_session(struct vpu_inst *inst, u32 type)
921 struct venc_t *venc = inst->priv;
929 vpu_iface_init_instance(inst);
930 stream_buffer_size = vpu_iface_get_stream_buffer_size(inst->core);
932 inst->stream_buffer.length = max_t(u32, stream_buffer_size, venc->cpb_size * 3);
933 ret = vpu_alloc_dma(inst->core, &inst->stream_buffer);
937 inst->use_stream_buffer = true;
938 vpu_iface_config_stream_buffer(inst, &inst->stream_buffer);
941 ret = vpu_iface_set_encode_params(inst, &venc->params, 0);
944 ret = vpu_session_configure_codec(inst);
948 inst->state = VPU_CODEC_STATE_CONFIGURED;
952 ret = vpu_iface_set_encode_params(inst, &venc->params, 1);
956 ret = vpu_session_start(inst);
959 inst->state = VPU_CODEC_STATE_STARTED;
967 vpu_process_output_buffer(inst);
969 dev_err(inst->dev, "[%d] there is no input when starting\n", inst->id);
974 inst->state = VPU_CODEC_STATE_DEINIT;
976 vpu_free_dma(&inst->stream_buffer);
980 static void venc_cleanup_mem_resource(struct vpu_inst *inst)
985 venc = inst->priv;
993 static void venc_request_mem_resource(struct vpu_inst *inst,
1005 venc = inst->priv;
1007 dev_err(inst->dev, "[%d] enc num(%d) is out of range\n", inst->id, enc_frame_num);
1011 dev_err(inst->dev, "[%d] ref num(%d) is out of range\n", inst->id, ref_frame_num);
1015 dev_err(inst->dev, "[%d] act num(%d) is out of range\n", inst->id, act_frame_num);
1021 ret = vpu_alloc_dma(inst->core, &venc->enc[i]);
1023 venc_cleanup_mem_resource(inst);
1029 ret = vpu_alloc_dma(inst->core, &venc->ref[i]);
1031 venc_cleanup_mem_resource(inst);
1035 if (act_frame_num != 1 || act_frame_size > inst->act.length) {
1036 venc_cleanup_mem_resource(inst);
1040 venc->act[0].phys = inst->act.phys;
1041 venc->act[0].virt = inst->act.virt;
1044 vpu_iface_config_memory_resource(inst, MEM_RES_ENC, i, &venc->enc[i]);
1046 vpu_iface_config_memory_resource(inst, MEM_RES_REF, i, &venc->ref[i]);
1048 vpu_iface_config_memory_resource(inst, MEM_RES_ACT, i, &venc->act[i]);
1062 static int venc_stop_session(struct vpu_inst *inst, u32 type)
1064 struct venc_t *venc = inst->priv;
1070 if (inst->state == VPU_CODEC_STATE_DEINIT)
1073 if (inst->state != VPU_CODEC_STATE_STOP)
1074 venc_request_eos(inst);
1076 call_void_vop(inst, wait_prepare);
1078 set_bit(inst->id, &inst->core->hang_mask);
1079 vpu_session_debug(inst);
1081 call_void_vop(inst, wait_finish);
1083 inst->state = VPU_CODEC_STATE_DEINIT;
1084 venc_cleanup_frames(inst->priv);
1085 vpu_free_dma(&inst->stream_buffer);
1086 venc_cleanup_mem_resource(inst);
1091 static int venc_process_output(struct vpu_inst *inst, struct vb2_buffer *vb)
1093 struct venc_t *venc = inst->priv;
1097 if (inst->state == VPU_CODEC_STATE_DEINIT)
1101 if (inst->state == VPU_CODEC_STATE_STARTED)
1102 inst->state = VPU_CODEC_STATE_ACTIVE;
1110 vpu_session_update_parameters(inst, &venc->params);
1113 dev_dbg(inst->dev, "[%d][INPUT TS]%32lld\n", inst->id, vb->timestamp);
1114 vpu_iface_input_frame(inst, vb);
1123 static int venc_process_capture(struct vpu_inst *inst, struct vb2_buffer *vb)
1130 venc = inst->priv;
1136 v4l2_m2m_dst_buf_remove_by_buf(inst->fh.m2m_ctx, vbuf);
1137 ret = venc_get_one_encoded_frame(inst, frame, vbuf);
1146 static void venc_on_queue_empty(struct vpu_inst *inst, u32 type)
1148 struct venc_t *venc = inst->priv;
1154 venc_set_last_buffer_dequeued(inst);
1157 static int venc_get_debug_info(struct vpu_inst *inst, char *str, u32 size, u32 i)
1159 struct venc_t *venc = inst->priv;
1259 struct vpu_inst *inst = to_inst(file);
1264 venc = inst->priv;
1277 venc_s_fmt(file, &inst->fh, &f);
1285 venc_s_fmt(file, &inst->fh, &f);
1291 venc_s_parm(file, &inst->fh, &parm);
1296 struct vpu_inst *inst;
1300 inst = vzalloc(sizeof(*inst));
1301 if (!inst)
1306 vfree(inst);
1310 inst->ops = &venc_inst_ops;
1311 inst->formats = venc_formats;
1312 inst->type = VPU_CORE_TYPE_ENC;
1313 inst->priv = venc;
1317 ret = vpu_v4l2_open(file, inst);
1321 inst->min_buffer_out = VENC_MIN_BUFFER_OUT;
1322 inst->min_buffer_cap = VENC_MIN_BUFFER_CAP;