mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	media: amphion: Report the average QP of current encoded frame
Report the average QP value of the current encoded frame via the V4L2_CID_MPEG_VIDEO_AVERAGE_QP control, the value applies to the last dequeued capture buffer. Signed-off-by: Ming Qian <ming.qian@nxp.com> Signed-off-by: Sebastian Fricke <sebastian.fricke@collabora.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
		
							parent
							
								
									065927b51e
								
							
						
					
					
						commit
						1034ead1a7
					
				
					 6 changed files with 25 additions and 0 deletions
				
			
		|  | @ -678,6 +678,9 @@ static int venc_ctrl_init(struct vpu_inst *inst) | |||
| 			       ~(1 << V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME), | ||||
| 			       V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME); | ||||
| 
 | ||||
| 	v4l2_ctrl_new_std(&inst->ctrl_handler, NULL, | ||||
| 			  V4L2_CID_MPEG_VIDEO_AVERAGE_QP, 0, 51, 1, 0); | ||||
| 
 | ||||
| 	if (inst->ctrl_handler.error) { | ||||
| 		ret = inst->ctrl_handler.error; | ||||
| 		v4l2_ctrl_handler_free(&inst->ctrl_handler); | ||||
|  | @ -817,6 +820,7 @@ static int venc_get_one_encoded_frame(struct vpu_inst *inst, | |||
| 	vbuf->field = inst->cap_format.field; | ||||
| 	vbuf->flags |= frame->info.pic_type; | ||||
| 	vpu_set_buffer_state(vbuf, VPU_BUF_STATE_IDLE); | ||||
| 	vpu_set_buffer_average_qp(vbuf, frame->info.average_qp); | ||||
| 	dev_dbg(inst->dev, "[%d][OUTPUT TS]%32lld\n", inst->id, vbuf->vb2_buf.timestamp); | ||||
| 	v4l2_m2m_buf_done(vbuf, VB2_BUF_STATE_DONE); | ||||
| 	venc->ready_count++; | ||||
|  |  | |||
|  | @ -306,6 +306,7 @@ struct vpu_vb2_buffer { | |||
| 	dma_addr_t chroma_v; | ||||
| 	unsigned int state; | ||||
| 	u32 tag; | ||||
| 	u32 average_qp; | ||||
| }; | ||||
| 
 | ||||
| void vpu_writel(struct vpu_dev *vpu, u32 reg, u32 val); | ||||
|  |  | |||
|  | @ -114,6 +114,7 @@ struct vpu_enc_pic_info { | |||
| 	u32 wptr; | ||||
| 	u32 crc; | ||||
| 	s64 timestamp; | ||||
| 	u32 average_qp; | ||||
| }; | ||||
| 
 | ||||
| struct vpu_dec_codec_info { | ||||
|  |  | |||
|  | @ -63,6 +63,13 @@ unsigned int vpu_get_buffer_state(struct vb2_v4l2_buffer *vbuf) | |||
| 	return vpu_buf->state; | ||||
| } | ||||
| 
 | ||||
| void vpu_set_buffer_average_qp(struct vb2_v4l2_buffer *vbuf, u32 qp) | ||||
| { | ||||
| 	struct vpu_vb2_buffer *vpu_buf = to_vpu_vb2_buffer(vbuf); | ||||
| 
 | ||||
| 	vpu_buf->average_qp = qp; | ||||
| } | ||||
| 
 | ||||
| void vpu_v4l2_set_error(struct vpu_inst *inst) | ||||
| { | ||||
| 	vpu_inst_lock(inst); | ||||
|  | @ -539,6 +546,15 @@ static void vpu_vb2_buf_finish(struct vb2_buffer *vb) | |||
| 	struct vpu_inst *inst = vb2_get_drv_priv(vb->vb2_queue); | ||||
| 	struct vb2_queue *q = vb->vb2_queue; | ||||
| 
 | ||||
| 	if (V4L2_TYPE_IS_CAPTURE(vb->type)) { | ||||
| 		struct vpu_vb2_buffer *vpu_buf = to_vpu_vb2_buffer(vbuf); | ||||
| 		struct v4l2_ctrl *ctrl = v4l2_ctrl_find(&inst->ctrl_handler, | ||||
| 							V4L2_CID_MPEG_VIDEO_AVERAGE_QP); | ||||
| 
 | ||||
| 		if (ctrl) | ||||
| 			v4l2_ctrl_s_ctrl(ctrl, vpu_buf->average_qp); | ||||
| 	} | ||||
| 
 | ||||
| 	if (vbuf->flags & V4L2_BUF_FLAG_LAST) | ||||
| 		vpu_notify_eos(inst); | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,6 +12,7 @@ void vpu_inst_lock(struct vpu_inst *inst); | |||
| void vpu_inst_unlock(struct vpu_inst *inst); | ||||
| void vpu_set_buffer_state(struct vb2_v4l2_buffer *vbuf, unsigned int state); | ||||
| unsigned int vpu_get_buffer_state(struct vb2_v4l2_buffer *vbuf); | ||||
| void vpu_set_buffer_average_qp(struct vb2_v4l2_buffer *vbuf, u32 qp); | ||||
| 
 | ||||
| int vpu_v4l2_open(struct file *file, struct vpu_inst *inst); | ||||
| int vpu_v4l2_close(struct file *file); | ||||
|  |  | |||
|  | @ -499,6 +499,7 @@ struct windsor_pic_info { | |||
| 	u32 proc_dacc_rng_wr_cnt; | ||||
| 	s32 tv_s; | ||||
| 	u32 tv_ns; | ||||
| 	u32 average_qp; | ||||
| }; | ||||
| 
 | ||||
| u32 vpu_windsor_get_data_size(void) | ||||
|  | @ -734,6 +735,7 @@ static void vpu_windsor_unpack_pic_info(struct vpu_rpc_event *pkt, void *data) | |||
| 	info->wptr = get_ptr(windsor->str_buff_wptr); | ||||
| 	info->crc = windsor->frame_crc; | ||||
| 	info->timestamp = timespec64_to_ns(&ts); | ||||
| 	info->average_qp = windsor->average_qp; | ||||
| } | ||||
| 
 | ||||
| static void vpu_windsor_unpack_mem_req(struct vpu_rpc_event *pkt, void *data) | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Ming Qian
						Ming Qian