Lines Matching refs:ctx

36 static bool mtk_vdec_get_cap_fmt(struct mtk_vcodec_dec_ctx *ctx, int format_index)
38 const struct mtk_vcodec_dec_pdata *dec_pdata = ctx->dev->vdec_pdata;
52 if (num_frame_count == 1 || (!ctx->is_10bit_bitstream && fmt->fourcc == V4L2_PIX_FMT_MM21))
55 q_data = &ctx->q_data[MTK_Q_DATA_SRC];
58 if (ctx->is_10bit_bitstream && fmt->fourcc == V4L2_PIX_FMT_MT2110R)
64 if (ctx->is_10bit_bitstream && fmt->fourcc == V4L2_PIX_FMT_MT2110T)
74 static struct mtk_q_data *mtk_vdec_get_q_data(struct mtk_vcodec_dec_ctx *ctx,
78 return &ctx->q_data[MTK_Q_DATA_SRC];
80 return &ctx->q_data[MTK_Q_DATA_DST];
93 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
101 mtk_v4l2_vdec_dbg(1, ctx, "decoder cmd=%u", cmd->cmd);
102 dst_vq = v4l2_m2m_get_vq(ctx->m2m_ctx,
106 src_vq = v4l2_m2m_get_vq(ctx->m2m_ctx,
109 mtk_v4l2_vdec_dbg(1, ctx, "Output stream is off. No need to flush.");
113 mtk_v4l2_vdec_dbg(1, ctx, "Capture stream is off. No need to flush.");
116 v4l2_m2m_buf_queue(ctx->m2m_ctx, &ctx->empty_flush_buf.vb);
117 v4l2_m2m_try_schedule(ctx->m2m_ctx);
131 void mtk_vdec_unlock(struct mtk_vcodec_dec_ctx *ctx)
133 mutex_unlock(&ctx->dev->dec_mutex[ctx->hw_id]);
136 void mtk_vdec_lock(struct mtk_vcodec_dec_ctx *ctx)
138 mutex_lock(&ctx->dev->dec_mutex[ctx->hw_id]);
141 void mtk_vcodec_dec_release(struct mtk_vcodec_dec_ctx *ctx)
143 vdec_if_deinit(ctx);
144 ctx->state = MTK_STATE_FREE;
147 void mtk_vcodec_dec_set_default_params(struct mtk_vcodec_dec_ctx *ctx)
151 ctx->m2m_ctx->q_lock = &ctx->dev->dev_mutex;
152 ctx->fh.m2m_ctx = ctx->m2m_ctx;
153 ctx->fh.ctrl_handler = &ctx->ctrl_hdl;
154 INIT_WORK(&ctx->decode_work, ctx->dev->vdec_pdata->worker);
155 ctx->colorspace = V4L2_COLORSPACE_REC709;
156 ctx->ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT;
157 ctx->quantization = V4L2_QUANTIZATION_DEFAULT;
158 ctx->xfer_func = V4L2_XFER_FUNC_DEFAULT;
160 q_data = &ctx->q_data[MTK_Q_DATA_SRC];
164 q_data->fmt = ctx->dev->vdec_pdata->default_out_fmt;
170 q_data = &ctx->q_data[MTK_Q_DATA_DST];
176 q_data->fmt = ctx->dev->vdec_pdata->default_cap_fmt;
188 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
190 if (ctx->state == MTK_STATE_ABORT) {
191 mtk_v4l2_vdec_err(ctx, "[%d] Call on QBUF after unrecoverable error", ctx->id);
195 return v4l2_m2m_qbuf(file, ctx->m2m_ctx, buf);
201 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
203 if (ctx->state == MTK_STATE_ABORT) {
204 mtk_v4l2_vdec_err(ctx, "[%d] Call on DQBUF after unrecoverable error", ctx->id);
208 return v4l2_m2m_dqbuf(file, ctx->m2m_ctx, buf);
214 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
215 struct device *dev = &ctx->dev->plat_dev->dev;
218 snprintf(cap->card, sizeof(cap->card), "MT%d video decoder", ctx->dev->chip_name);
226 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(fh);
228 if (ctx->dev->vdec_pdata->uses_stateless_api)
241 static int vidioc_try_fmt(struct mtk_vcodec_dec_ctx *ctx, struct v4l2_format *f,
253 frmsize = &ctx->q_data[MTK_Q_DATA_SRC].fmt->frmsize;
268 * only available when ctx in MTK_STATE_HEADER state
283 mtk_v4l2_vdec_dbg(0, ctx,
309 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
310 const struct mtk_vcodec_dec_pdata *dec_pdata = ctx->dev->vdec_pdata;
315 ctx->q_data[MTK_Q_DATA_DST].fmt->fourcc;
319 return vidioc_try_fmt(ctx, f, fmt);
327 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
328 const struct mtk_vcodec_dec_pdata *dec_pdata = ctx->dev->vdec_pdata;
333 ctx->q_data[MTK_Q_DATA_SRC].fmt->fourcc;
338 mtk_v4l2_vdec_err(ctx, "sizeimage of output format must be given");
342 return vidioc_try_fmt(ctx, f, fmt);
348 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
354 q_data = &ctx->q_data[MTK_Q_DATA_DST];
360 s->r.width = ctx->picinfo.pic_w;
361 s->r.height = ctx->picinfo.pic_h;
366 s->r.width = ctx->picinfo.buf_w;
367 s->r.height = ctx->picinfo.buf_h;
370 if (vdec_if_get_param(ctx, GET_PARAM_CROP_INFO, &(s->r))) {
382 if (ctx->state < MTK_STATE_HEADER) {
397 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
406 s->r.width = ctx->picinfo.pic_w;
407 s->r.height = ctx->picinfo.pic_h;
419 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
424 const struct mtk_vcodec_dec_pdata *dec_pdata = ctx->dev->vdec_pdata;
426 mtk_v4l2_vdec_dbg(3, ctx, "[%d]", ctx->id);
428 q_data = mtk_vdec_get_q_data(ctx, f->type);
439 vb2_is_busy(&ctx->m2m_ctx->out_q_ctx.q)) {
440 mtk_v4l2_vdec_err(ctx, "out_q_ctx buffers already requested");
449 vb2_is_busy(&ctx->m2m_ctx->cap_q_ctx.q)) {
450 mtk_v4l2_vdec_err(ctx, "cap_q_ctx buffers already requested");
470 vidioc_try_fmt(ctx, f, q_data->fmt);
476 ctx->colorspace = pix_mp->colorspace;
477 ctx->ycbcr_enc = pix_mp->ycbcr_enc;
478 ctx->quantization = pix_mp->quantization;
479 ctx->xfer_func = pix_mp->xfer_func;
481 ctx->current_codec = fmt->fourcc;
482 if (ctx->state == MTK_STATE_FREE) {
483 ret = vdec_if_init(ctx, q_data->fmt->fourcc);
485 mtk_v4l2_vdec_err(ctx, "[%d]: vdec_if_init() fail ret=%d",
486 ctx->id, ret);
489 ctx->state = MTK_STATE_INIT;
492 ctx->capture_fourcc = fmt->fourcc;
500 ctx->picinfo.pic_w = pix_mp->width;
501 ctx->picinfo.pic_h = pix_mp->height;
507 ret = vdec_if_get_param(ctx, GET_PARAM_PIC_INFO, &ctx->picinfo);
509 mtk_v4l2_vdec_err(ctx, "[%d]Error!! Get GET_PARAM_PICTURE_INFO Fail",
510 ctx->id);
513 ctx->last_decoded_picinfo = ctx->picinfo;
515 if (ctx->q_data[MTK_Q_DATA_DST].fmt->num_planes == 1) {
516 ctx->q_data[MTK_Q_DATA_DST].sizeimage[0] =
517 ctx->picinfo.fb_sz[0] +
518 ctx->picinfo.fb_sz[1];
519 ctx->q_data[MTK_Q_DATA_DST].bytesperline[0] =
520 ctx->picinfo.buf_w;
522 ctx->q_data[MTK_Q_DATA_DST].sizeimage[0] =
523 ctx->picinfo.fb_sz[0];
524 ctx->q_data[MTK_Q_DATA_DST].bytesperline[0] =
525 ctx->picinfo.buf_w;
526 ctx->q_data[MTK_Q_DATA_DST].sizeimage[1] =
527 ctx->picinfo.fb_sz[1];
528 ctx->q_data[MTK_Q_DATA_DST].bytesperline[1] =
529 ctx->picinfo.buf_w;
532 ctx->q_data[MTK_Q_DATA_DST].coded_width = ctx->picinfo.buf_w;
533 ctx->q_data[MTK_Q_DATA_DST].coded_height = ctx->picinfo.buf_h;
534 mtk_v4l2_vdec_dbg(2, ctx,
536 ctx->id, pix_mp->num_planes,
537 ctx->picinfo.buf_w, ctx->picinfo.buf_h,
538 ctx->picinfo.pic_w, ctx->picinfo.pic_h,
539 ctx->q_data[MTK_Q_DATA_DST].sizeimage[0],
540 ctx->q_data[MTK_Q_DATA_DST].sizeimage[1]);
549 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
550 const struct mtk_vcodec_dec_pdata *dec_pdata = ctx->dev->vdec_pdata;
566 mtk_v4l2_vdec_dbg(1, ctx, "%x, %d %d %d %d %d %d",
567 ctx->dev->dec_capability, fsize->stepwise.min_width,
581 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
582 const struct mtk_vcodec_dec_pdata *dec_pdata = ctx->dev->vdec_pdata;
594 if (!output_queue && !mtk_vdec_get_cap_fmt(ctx, i))
627 struct mtk_vcodec_dec_ctx *ctx = fh_to_dec_ctx(priv);
632 vq = v4l2_m2m_get_vq(ctx->m2m_ctx, f->type);
634 mtk_v4l2_vdec_err(ctx, "no vb2 queue for type=%d", f->type);
638 q_data = mtk_vdec_get_q_data(ctx, f->type);
641 pix_mp->colorspace = ctx->colorspace;
642 pix_mp->ycbcr_enc = ctx->ycbcr_enc;
643 pix_mp->quantization = ctx->quantization;
644 pix_mp->xfer_func = ctx->xfer_func;
647 (ctx->state >= MTK_STATE_HEADER)) {
654 q_data->sizeimage[0] = ctx->picinfo.fb_sz[0];
655 q_data->sizeimage[1] = ctx->picinfo.fb_sz[1];
656 q_data->bytesperline[0] = ctx->last_decoded_picinfo.buf_w;
657 q_data->bytesperline[1] = ctx->last_decoded_picinfo.buf_w;
658 q_data->coded_width = ctx->picinfo.buf_w;
659 q_data->coded_height = ctx->picinfo.buf_h;
660 ctx->last_decoded_picinfo.cap_fourcc = q_data->fmt->fourcc;
705 mtk_v4l2_vdec_dbg(1, ctx, "[%d] type=%d state=%d Format information not ready!",
706 ctx->id, f->type, ctx->state);
716 struct mtk_vcodec_dec_ctx *ctx = vb2_get_drv_priv(vq);
720 q_data = mtk_vdec_get_q_data(ctx, vq->type);
723 mtk_v4l2_vdec_err(ctx, "vq->type=%d err\n", vq->type);
749 mtk_v4l2_vdec_dbg(1, ctx,
751 ctx->id, vq->type, *nplanes, *nbuffers, sizes[0], sizes[1]);
758 struct mtk_vcodec_dec_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue);
762 mtk_v4l2_vdec_dbg(3, ctx, "[%d] (%d) id=%d",
763 ctx->id, vb->vb2_queue->type, vb->index);
765 q_data = mtk_vdec_get_q_data(ctx, vb->vb2_queue->type);
769 mtk_v4l2_vdec_err(ctx, "data will not fit into plane %d (%lu < %d)",
782 struct mtk_vcodec_dec_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue);
789 mutex_lock(&ctx->lock);
795 mutex_unlock(&ctx->lock);
798 mtk_v4l2_vdec_err(ctx, "Unrecoverable error on buffer.");
799 ctx->state = MTK_STATE_ABORT;
820 struct mtk_vcodec_dec_ctx *ctx = vb2_get_drv_priv(q);
822 if (ctx->state == MTK_STATE_FLUSH)
823 ctx->state = MTK_STATE_HEADER;
831 struct mtk_vcodec_dec_ctx *ctx = vb2_get_drv_priv(q);
834 mtk_v4l2_vdec_dbg(3, ctx, "[%d] (%d) state=(%x) ctx->decoded_frame_cnt=%d",
835 ctx->id, q->type, ctx->state, ctx->decoded_frame_cnt);
838 while ((src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx))) {
839 if (src_buf != &ctx->empty_flush_buf.vb) {
845 v4l2_ctrl_request_complete(req, &ctx->ctrl_hdl);
851 if (ctx->state >= MTK_STATE_HEADER) {
859 ctx->picinfo = ctx->last_decoded_picinfo;
861 mtk_v4l2_vdec_dbg(2, ctx,
863 ctx->id, ctx->last_decoded_picinfo.pic_w,
864 ctx->last_decoded_picinfo.pic_h,
865 ctx->picinfo.pic_w, ctx->picinfo.pic_h,
866 ctx->last_decoded_picinfo.buf_w,
867 ctx->last_decoded_picinfo.buf_h);
869 ret = ctx->dev->vdec_pdata->flush_decoder(ctx);
871 mtk_v4l2_vdec_err(ctx, "DecodeFinal failed, ret=%d", ret);
873 ctx->state = MTK_STATE_FLUSH;
875 while ((dst_buf = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx))) {
877 if (ctx->q_data[MTK_Q_DATA_DST].fmt->num_planes == 2)
886 struct mtk_vcodec_dec_ctx *ctx = priv;
887 struct mtk_vcodec_dec_dev *dev = ctx->dev;
889 queue_work(dev->decode_workqueue, &ctx->decode_work);
894 struct mtk_vcodec_dec_ctx *ctx = m2m_priv;
896 mtk_v4l2_vdec_dbg(3, ctx, "[%d]", ctx->id);
898 if (ctx->state == MTK_STATE_ABORT)
901 if ((ctx->last_decoded_picinfo.pic_w != ctx->picinfo.pic_w) ||
902 (ctx->last_decoded_picinfo.pic_h != ctx->picinfo.pic_h))
905 if (ctx->state != MTK_STATE_HEADER)
913 struct mtk_vcodec_dec_ctx *ctx = priv;
915 ctx->state = MTK_STATE_ABORT;
961 struct mtk_vcodec_dec_ctx *ctx = priv;
964 mtk_v4l2_vdec_dbg(3, ctx, "[%d]", ctx->id);
968 src_vq->drv_priv = ctx;
970 src_vq->ops = ctx->dev->vdec_pdata->vdec_vb2_ops;
973 src_vq->lock = &ctx->dev->dev_mutex;
974 src_vq->dev = &ctx->dev->plat_dev->dev;
979 mtk_v4l2_vdec_err(ctx, "Failed to initialize videobuf2 queue(output)");
984 dst_vq->drv_priv = ctx;
986 dst_vq->ops = ctx->dev->vdec_pdata->vdec_vb2_ops;
989 dst_vq->lock = &ctx->dev->dev_mutex;
990 dst_vq->dev = &ctx->dev->plat_dev->dev;
995 mtk_v4l2_vdec_err(ctx, "Failed to initialize videobuf2 queue(capture)");