Lines Matching refs:inst

173 static int vdec_h264_slice_fill_decode_parameters(struct vdec_h264_slice_inst *inst,  in vdec_h264_slice_fill_decode_parameters()  argument
176 struct vdec_h264_slice_lat_dec_param *slice_param = &inst->vsi->h264_slice_params; in vdec_h264_slice_fill_decode_parameters()
183 mtk_vdec_h264_get_ctrl_ptr(inst->ctx, V4L2_CID_STATELESS_H264_DECODE_PARAMS); in vdec_h264_slice_fill_decode_parameters()
188 mtk_vdec_h264_get_ctrl_ptr(inst->ctx, V4L2_CID_STATELESS_H264_SCALING_MATRIX); in vdec_h264_slice_fill_decode_parameters()
192 sps = mtk_vdec_h264_get_ctrl_ptr(inst->ctx, V4L2_CID_STATELESS_H264_SPS); in vdec_h264_slice_fill_decode_parameters()
196 pps = mtk_vdec_h264_get_ctrl_ptr(inst->ctx, V4L2_CID_STATELESS_H264_PPS); in vdec_h264_slice_fill_decode_parameters()
201 mtk_vdec_err(inst->ctx, "No support for H.264 field decoding."); in vdec_h264_slice_fill_decode_parameters()
202 inst->is_field_bitstream = true; in vdec_h264_slice_fill_decode_parameters()
216 static int get_vdec_sig_decode_parameters(struct vdec_h264_slice_inst *inst) in get_vdec_sig_decode_parameters() argument
222 struct vdec_h264_slice_lat_dec_param *slice_param = &inst->h264_slice_param; in get_vdec_sig_decode_parameters()
232 mtk_vdec_h264_get_ctrl_ptr(inst->ctx, V4L2_CID_STATELESS_H264_DECODE_PARAMS); in get_vdec_sig_decode_parameters()
236 sps = mtk_vdec_h264_get_ctrl_ptr(inst->ctx, V4L2_CID_STATELESS_H264_SPS); in get_vdec_sig_decode_parameters()
240 pps = mtk_vdec_h264_get_ctrl_ptr(inst->ctx, V4L2_CID_STATELESS_H264_PPS); in get_vdec_sig_decode_parameters()
245 mtk_vdec_h264_get_ctrl_ptr(inst->ctx, V4L2_CID_STATELESS_H264_SCALING_MATRIX); in get_vdec_sig_decode_parameters()
249 mtk_vdec_h264_update_dpb(dec_params, inst->dpb); in get_vdec_sig_decode_parameters()
255 mtk_vdec_h264_copy_decode_params(&slice_param->decode_params, dec_params, inst->dpb); in get_vdec_sig_decode_parameters()
256 mtk_vdec_h264_fill_dpb_info(inst->ctx, &slice_param->decode_params, in get_vdec_sig_decode_parameters()
260 v4l2_h264_init_reflist_builder(&reflist_builder, dec_params, sps, inst->dpb); in get_vdec_sig_decode_parameters()
269 memcpy(&inst->vsi_ctx.h264_slice_params, slice_param, in get_vdec_sig_decode_parameters()
270 sizeof(inst->vsi_ctx.h264_slice_params)); in get_vdec_sig_decode_parameters()
275 static void vdec_h264_slice_fill_decode_reflist(struct vdec_h264_slice_inst *inst, in vdec_h264_slice_fill_decode_reflist() argument
289 mtk_vdec_h264_update_dpb(dec_params, inst->dpb); in vdec_h264_slice_fill_decode_reflist()
292 inst->dpb); in vdec_h264_slice_fill_decode_reflist()
293 mtk_vdec_h264_fill_dpb_info(inst->ctx, &slice_param->decode_params, in vdec_h264_slice_fill_decode_reflist()
296 mtk_v4l2_vdec_dbg(3, inst->ctx, "cur poc = %d\n", dec_params->bottom_field_order_cnt); in vdec_h264_slice_fill_decode_reflist()
299 inst->dpb); in vdec_h264_slice_fill_decode_reflist()
309 static int vdec_h264_slice_alloc_mv_buf(struct vdec_h264_slice_inst *inst, in vdec_h264_slice_alloc_mv_buf() argument
316 mtk_v4l2_vdec_dbg(3, inst->ctx, "size = 0x%x", buf_sz); in vdec_h264_slice_alloc_mv_buf()
318 mem = &inst->mv_buf[i]; in vdec_h264_slice_alloc_mv_buf()
320 mtk_vcodec_mem_free(inst->ctx, mem); in vdec_h264_slice_alloc_mv_buf()
322 err = mtk_vcodec_mem_alloc(inst->ctx, mem); in vdec_h264_slice_alloc_mv_buf()
324 mtk_vdec_err(inst->ctx, "failed to allocate mv buf"); in vdec_h264_slice_alloc_mv_buf()
332 static void vdec_h264_slice_free_mv_buf(struct vdec_h264_slice_inst *inst) in vdec_h264_slice_free_mv_buf() argument
338 mem = &inst->mv_buf[i]; in vdec_h264_slice_free_mv_buf()
340 mtk_vcodec_mem_free(inst->ctx, mem); in vdec_h264_slice_free_mv_buf()
344 static void vdec_h264_slice_get_pic_info(struct vdec_h264_slice_inst *inst) in vdec_h264_slice_get_pic_info() argument
346 struct mtk_vcodec_dec_ctx *ctx = inst->ctx; in vdec_h264_slice_get_pic_info()
352 vpu_dec_get_param(&inst->vpu, data, 3, GET_PARAM_PIC_INFO); in vdec_h264_slice_get_pic_info()
356 ctx->picinfo.fb_sz[0] = inst->vpu.fb_sz[0]; in vdec_h264_slice_get_pic_info()
357 ctx->picinfo.fb_sz[1] = inst->vpu.fb_sz[1]; in vdec_h264_slice_get_pic_info()
358 inst->cap_num_planes = in vdec_h264_slice_get_pic_info()
369 inst->resolution_changed = true; in vdec_h264_slice_get_pic_info()
372 inst->realloc_mv_buf = true; in vdec_h264_slice_get_pic_info()
374 mtk_v4l2_vdec_dbg(1, inst->ctx, "resChg: (%d %d) : old(%d, %d) -> new(%d, %d)", in vdec_h264_slice_get_pic_info()
375 inst->resolution_changed, in vdec_h264_slice_get_pic_info()
376 inst->realloc_mv_buf, in vdec_h264_slice_get_pic_info()
383 static void vdec_h264_slice_get_crop_info(struct vdec_h264_slice_inst *inst, in vdec_h264_slice_get_crop_info() argument
388 cr->width = inst->ctx->picinfo.pic_w; in vdec_h264_slice_get_crop_info()
389 cr->height = inst->ctx->picinfo.pic_h; in vdec_h264_slice_get_crop_info()
391 mtk_vdec_debug(inst->ctx, "l=%d, t=%d, w=%d, h=%d", in vdec_h264_slice_get_crop_info()
397 struct vdec_h264_slice_inst *inst; in vdec_h264_slice_init() local
400 inst = kzalloc(sizeof(*inst), GFP_KERNEL); in vdec_h264_slice_init()
401 if (!inst) in vdec_h264_slice_init()
404 inst->ctx = ctx; in vdec_h264_slice_init()
406 inst->vpu.id = SCP_IPI_VDEC_LAT; in vdec_h264_slice_init()
407 inst->vpu.core_id = SCP_IPI_VDEC_CORE; in vdec_h264_slice_init()
408 inst->vpu.ctx = ctx; in vdec_h264_slice_init()
409 inst->vpu.codec_type = ctx->current_codec; in vdec_h264_slice_init()
410 inst->vpu.capture_type = ctx->capture_fourcc; in vdec_h264_slice_init()
412 err = vpu_dec_init(&inst->vpu); in vdec_h264_slice_init()
419 inst->vsi = inst->vpu.vsi; in vdec_h264_slice_init()
420 inst->vsi_core = in vdec_h264_slice_init()
421 (struct vdec_h264_slice_vsi *)(((char *)inst->vpu.vsi) + vsi_size); in vdec_h264_slice_init()
422 inst->resolution_changed = true; in vdec_h264_slice_init()
423 inst->realloc_mv_buf = true; in vdec_h264_slice_init()
432 inst, inst->vpu.codec_type); in vdec_h264_slice_init()
434 ctx->drv_handle = inst; in vdec_h264_slice_init()
438 kfree(inst); in vdec_h264_slice_init()
444 struct vdec_h264_slice_inst *inst = h_vdec; in vdec_h264_slice_deinit() local
446 vpu_dec_deinit(&inst->vpu); in vdec_h264_slice_deinit()
447 vdec_h264_slice_free_mv_buf(inst); in vdec_h264_slice_deinit()
448 vdec_msg_queue_deinit(&inst->ctx->msg_queue, inst->ctx); in vdec_h264_slice_deinit()
450 kfree(inst); in vdec_h264_slice_deinit()
460 struct vdec_h264_slice_inst *inst = ctx->drv_handle; in vdec_h264_slice_core_decode() local
464 struct vdec_vpu_inst *vpu = &inst->vpu; in vdec_h264_slice_core_decode()
467 memcpy(&inst->vsi_core->h264_slice_params, &share_info->h264_slice_params, in vdec_h264_slice_core_decode()
481 y_fb_dma + inst->ctx->picinfo.buf_w * inst->ctx->picinfo.buf_h; in vdec_h264_slice_core_decode()
487 inst->vsi_core->dec.y_fb_dma = y_fb_dma; in vdec_h264_slice_core_decode()
488 inst->vsi_core->dec.c_fb_dma = c_fb_dma; in vdec_h264_slice_core_decode()
489 inst->vsi_core->dec.vdec_fb_va = vdec_fb_va; in vdec_h264_slice_core_decode()
490 inst->vsi_core->dec.nal_info = share_info->nal_info; in vdec_h264_slice_core_decode()
491 inst->vsi_core->wdma_start_addr = in vdec_h264_slice_core_decode()
493 inst->vsi_core->wdma_end_addr = in vdec_h264_slice_core_decode()
496 inst->vsi_core->wdma_err_addr = lat_buf->wdma_err_addr.dma_addr; in vdec_h264_slice_core_decode()
497 inst->vsi_core->slice_bc_start_addr = lat_buf->slice_bc_addr.dma_addr; in vdec_h264_slice_core_decode()
498 inst->vsi_core->slice_bc_end_addr = lat_buf->slice_bc_addr.dma_addr + in vdec_h264_slice_core_decode()
500 inst->vsi_core->trans_start = share_info->trans_start; in vdec_h264_slice_core_decode()
501 inst->vsi_core->trans_end = share_info->trans_end; in vdec_h264_slice_core_decode()
503 mem = &inst->mv_buf[i]; in vdec_h264_slice_core_decode()
504 inst->vsi_core->mv_buf_dma[i] = mem->dma_addr; in vdec_h264_slice_core_decode()
510 vdec_h264_slice_fill_decode_reflist(inst, &inst->vsi_core->h264_slice_params, in vdec_h264_slice_core_decode()
520 timeout = mtk_vcodec_wait_for_done_ctx(inst->ctx, MTK_INST_IRQ_RECEIVED, in vdec_h264_slice_core_decode()
524 inst->vsi_core->dec.timeout = !!timeout; in vdec_h264_slice_core_decode()
529 inst->vsi_core->dec.crc[0], inst->vsi_core->dec.crc[1], in vdec_h264_slice_core_decode()
530 inst->vsi_core->dec.crc[2], inst->vsi_core->dec.crc[3], in vdec_h264_slice_core_decode()
531 inst->vsi_core->dec.crc[4], inst->vsi_core->dec.crc[5], in vdec_h264_slice_core_decode()
532 inst->vsi_core->dec.crc[6], inst->vsi_core->dec.crc[7]); in vdec_h264_slice_core_decode()
568 struct vdec_h264_slice_inst *inst = h_vdec; in vdec_h264_slice_lat_decode() local
569 struct vdec_vpu_inst *vpu = &inst->vpu; in vdec_h264_slice_lat_decode()
578 if (vdec_msg_queue_init(&inst->ctx->msg_queue, inst->ctx, in vdec_h264_slice_lat_decode()
585 vdec_msg_queue_wait_lat_buf_full(&inst->ctx->msg_queue); in vdec_h264_slice_lat_decode()
589 if (inst->is_field_bitstream) in vdec_h264_slice_lat_decode()
592 lat_buf = vdec_msg_queue_dqbuf(&inst->ctx->msg_queue.lat_ctx); in vdec_h264_slice_lat_decode()
594 mtk_vdec_debug(inst->ctx, "failed to get lat buffer"); in vdec_h264_slice_lat_decode()
607 inst->vsi->dec.nal_info = buf[nal_start_idx]; in vdec_h264_slice_lat_decode()
611 err = vdec_h264_slice_fill_decode_parameters(inst, share_info); in vdec_h264_slice_lat_decode()
615 vdec_h264_insert_startcode(inst->ctx->dev, buf, &bs->size, in vdec_h264_slice_lat_decode()
618 inst->vsi->dec.bs_buf_addr = (uint64_t)bs->dma_addr; in vdec_h264_slice_lat_decode()
619 inst->vsi->dec.bs_buf_size = bs->size; in vdec_h264_slice_lat_decode()
621 *res_chg = inst->resolution_changed; in vdec_h264_slice_lat_decode()
622 if (inst->resolution_changed) { in vdec_h264_slice_lat_decode()
623 mtk_vdec_debug(inst->ctx, "- resolution changed -"); in vdec_h264_slice_lat_decode()
624 if (inst->realloc_mv_buf) { in vdec_h264_slice_lat_decode()
625 err = vdec_h264_slice_alloc_mv_buf(inst, &inst->ctx->picinfo); in vdec_h264_slice_lat_decode()
626 inst->realloc_mv_buf = false; in vdec_h264_slice_lat_decode()
630 inst->resolution_changed = false; in vdec_h264_slice_lat_decode()
633 mem = &inst->mv_buf[i]; in vdec_h264_slice_lat_decode()
634 inst->vsi->mv_buf_dma[i] = mem->dma_addr; in vdec_h264_slice_lat_decode()
636 inst->vsi->wdma_start_addr = lat_buf->ctx->msg_queue.wdma_addr.dma_addr; in vdec_h264_slice_lat_decode()
637 inst->vsi->wdma_end_addr = lat_buf->ctx->msg_queue.wdma_addr.dma_addr + in vdec_h264_slice_lat_decode()
639 inst->vsi->wdma_err_addr = lat_buf->wdma_err_addr.dma_addr; in vdec_h264_slice_lat_decode()
640 inst->vsi->slice_bc_start_addr = lat_buf->slice_bc_addr.dma_addr; in vdec_h264_slice_lat_decode()
641 inst->vsi->slice_bc_end_addr = lat_buf->slice_bc_addr.dma_addr + in vdec_h264_slice_lat_decode()
644 inst->vsi->trans_end = inst->ctx->msg_queue.wdma_rptr_addr; in vdec_h264_slice_lat_decode()
645 inst->vsi->trans_start = inst->ctx->msg_queue.wdma_wptr_addr; in vdec_h264_slice_lat_decode()
646 mtk_vdec_debug(inst->ctx, "lat:trans(0x%llx 0x%llx) err:0x%llx", in vdec_h264_slice_lat_decode()
647 inst->vsi->wdma_start_addr, in vdec_h264_slice_lat_decode()
648 inst->vsi->wdma_end_addr, in vdec_h264_slice_lat_decode()
649 inst->vsi->wdma_err_addr); in vdec_h264_slice_lat_decode()
651 mtk_vdec_debug(inst->ctx, "slice(0x%llx 0x%llx) rprt((0x%llx 0x%llx))", in vdec_h264_slice_lat_decode()
652 inst->vsi->slice_bc_start_addr, in vdec_h264_slice_lat_decode()
653 inst->vsi->slice_bc_end_addr, in vdec_h264_slice_lat_decode()
654 inst->vsi->trans_start, in vdec_h264_slice_lat_decode()
655 inst->vsi->trans_end); in vdec_h264_slice_lat_decode()
658 mtk_vdec_debug(inst->ctx, "lat decode err: %d", err); in vdec_h264_slice_lat_decode()
662 share_info->trans_end = inst->ctx->msg_queue.wdma_addr.dma_addr + in vdec_h264_slice_lat_decode()
663 inst->vsi->wdma_end_addr_offset; in vdec_h264_slice_lat_decode()
664 share_info->trans_start = inst->ctx->msg_queue.wdma_wptr_addr; in vdec_h264_slice_lat_decode()
665 share_info->nal_info = inst->vsi->dec.nal_info; in vdec_h264_slice_lat_decode()
667 if (IS_VDEC_INNER_RACING(inst->ctx->dev->dec_capability)) { in vdec_h264_slice_lat_decode()
668 memcpy(&share_info->h264_slice_params, &inst->vsi->h264_slice_params, in vdec_h264_slice_lat_decode()
670 vdec_msg_queue_qbuf(&inst->ctx->msg_queue.core_ctx, lat_buf); in vdec_h264_slice_lat_decode()
674 timeout = mtk_vcodec_wait_for_done_ctx(inst->ctx, MTK_INST_IRQ_RECEIVED, in vdec_h264_slice_lat_decode()
677 mtk_vdec_err(inst->ctx, "lat decode timeout: pic_%d", inst->slice_dec_num); in vdec_h264_slice_lat_decode()
678 inst->vsi->dec.timeout = !!timeout; in vdec_h264_slice_lat_decode()
682 if (!IS_VDEC_INNER_RACING(inst->ctx->dev->dec_capability)) in vdec_h264_slice_lat_decode()
683 vdec_msg_queue_qbuf(&inst->ctx->msg_queue.lat_ctx, lat_buf); in vdec_h264_slice_lat_decode()
684 inst->slice_dec_num++; in vdec_h264_slice_lat_decode()
685 mtk_vdec_err(inst->ctx, "lat dec fail: pic_%d err:%d", inst->slice_dec_num, err); in vdec_h264_slice_lat_decode()
689 share_info->trans_end = inst->ctx->msg_queue.wdma_addr.dma_addr + in vdec_h264_slice_lat_decode()
690 inst->vsi->wdma_end_addr_offset; in vdec_h264_slice_lat_decode()
693 if (!IS_VDEC_INNER_RACING(inst->ctx->dev->dec_capability)) { in vdec_h264_slice_lat_decode()
694 memcpy(&share_info->h264_slice_params, &inst->vsi->h264_slice_params, in vdec_h264_slice_lat_decode()
696 vdec_msg_queue_qbuf(&inst->ctx->msg_queue.core_ctx, lat_buf); in vdec_h264_slice_lat_decode()
698 mtk_vdec_debug(inst->ctx, "dec num: %d lat crc: 0x%x 0x%x 0x%x", inst->slice_dec_num, in vdec_h264_slice_lat_decode()
699 inst->vsi->dec.crc[0], inst->vsi->dec.crc[1], inst->vsi->dec.crc[2]); in vdec_h264_slice_lat_decode()
701 inst->slice_dec_num++; in vdec_h264_slice_lat_decode()
704 vdec_msg_queue_qbuf(&inst->ctx->msg_queue.lat_ctx, lat_buf); in vdec_h264_slice_lat_decode()
705 mtk_vdec_err(inst->ctx, "slice dec number: %d err: %d", inst->slice_dec_num, err); in vdec_h264_slice_lat_decode()
712 struct vdec_h264_slice_inst *inst = h_vdec; in vdec_h264_slice_single_decode() local
713 struct vdec_vpu_inst *vpu = &inst->vpu; in vdec_h264_slice_single_decode()
726 fb = inst->ctx->dev->vdec_pdata->get_cap_buffer(inst->ctx); in vdec_h264_slice_single_decode()
732 mtk_vdec_debug(inst->ctx, "[h264-dec] [%d] y_dma=%llx c_dma=%llx", in vdec_h264_slice_single_decode()
733 inst->ctx->decoded_frame_cnt, y_fb_dma, c_fb_dma); in vdec_h264_slice_single_decode()
735 inst->vsi_ctx.dec.bs_buf_addr = (u64)bs->dma_addr; in vdec_h264_slice_single_decode()
736 inst->vsi_ctx.dec.bs_buf_size = bs->size; in vdec_h264_slice_single_decode()
737 inst->vsi_ctx.dec.y_fb_dma = y_fb_dma; in vdec_h264_slice_single_decode()
738 inst->vsi_ctx.dec.c_fb_dma = c_fb_dma; in vdec_h264_slice_single_decode()
739 inst->vsi_ctx.dec.vdec_fb_va = (u64)(uintptr_t)fb; in vdec_h264_slice_single_decode()
743 err = get_vdec_sig_decode_parameters(inst); in vdec_h264_slice_single_decode()
753 inst->vsi_ctx.dec.nal_info = buf[nal_start_idx]; in vdec_h264_slice_single_decode()
755 *res_chg = inst->resolution_changed; in vdec_h264_slice_single_decode()
756 if (inst->resolution_changed) { in vdec_h264_slice_single_decode()
757 mtk_vdec_debug(inst->ctx, "- resolution changed -"); in vdec_h264_slice_single_decode()
758 if (inst->realloc_mv_buf) { in vdec_h264_slice_single_decode()
759 err = vdec_h264_slice_alloc_mv_buf(inst, &inst->ctx->picinfo); in vdec_h264_slice_single_decode()
760 inst->realloc_mv_buf = false; in vdec_h264_slice_single_decode()
764 inst->resolution_changed = false; in vdec_h264_slice_single_decode()
767 mem = &inst->mv_buf[i]; in vdec_h264_slice_single_decode()
768 inst->vsi_ctx.mv_buf_dma[i] = mem->dma_addr; in vdec_h264_slice_single_decode()
772 memcpy(inst->vpu.vsi, &inst->vsi_ctx, sizeof(inst->vsi_ctx)); in vdec_h264_slice_single_decode()
778 err = mtk_vcodec_wait_for_done_ctx(inst->ctx, MTK_INST_IRQ_RECEIVED, in vdec_h264_slice_single_decode()
781 mtk_vdec_err(inst->ctx, "decode timeout: pic_%d", inst->ctx->decoded_frame_cnt); in vdec_h264_slice_single_decode()
783 inst->vsi->dec.timeout = !!err; in vdec_h264_slice_single_decode()
788 memcpy(&inst->vsi_ctx, inst->vpu.vsi, sizeof(inst->vsi_ctx)); in vdec_h264_slice_single_decode()
789 mtk_vdec_debug(inst->ctx, "pic[%d] crc: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x", in vdec_h264_slice_single_decode()
790 inst->ctx->decoded_frame_cnt, in vdec_h264_slice_single_decode()
791 inst->vsi_ctx.dec.crc[0], inst->vsi_ctx.dec.crc[1], in vdec_h264_slice_single_decode()
792 inst->vsi_ctx.dec.crc[2], inst->vsi_ctx.dec.crc[3], in vdec_h264_slice_single_decode()
793 inst->vsi_ctx.dec.crc[4], inst->vsi_ctx.dec.crc[5], in vdec_h264_slice_single_decode()
794 inst->vsi_ctx.dec.crc[6], inst->vsi_ctx.dec.crc[7]); in vdec_h264_slice_single_decode()
796 inst->ctx->decoded_frame_cnt++; in vdec_h264_slice_single_decode()
800 mtk_vdec_err(inst->ctx, "dec frame number: %d err: %d", inst->ctx->decoded_frame_cnt, err); in vdec_h264_slice_single_decode()
807 struct vdec_h264_slice_inst *inst = h_vdec; in vdec_h264_slice_decode() local
813 if (inst->ctx->dev->vdec_pdata->hw_arch == MTK_VDEC_PURE_SINGLE_CORE) in vdec_h264_slice_decode()
824 struct vdec_h264_slice_inst *inst = h_vdec; in vdec_h264_slice_get_param() local
828 vdec_h264_slice_get_pic_info(inst); in vdec_h264_slice_get_param()
834 vdec_h264_slice_get_crop_info(inst, out); in vdec_h264_slice_get_param()
837 mtk_vdec_err(inst->ctx, "invalid get parameter type=%d", type); in vdec_h264_slice_get_param()