[11/18] radeon/vcn: add encode begin frame

Submitted by Zhang, Boyuan on Nov. 8, 2017, 6:08 p.m.

Details

Message ID 1510164503-13038-11-git-send-email-boyuan.zhang@amd.com
State New
Headers show
Series "Series without cover letter" ( rev: 3 2 1 ) in Mesa

Not browsing as part of any series.

Commit Message

Zhang, Boyuan Nov. 8, 2017, 6:08 p.m.
From: Boyuan Zhang <boyuan.zhang@amd.com>

Add implementation for begin_frame interface for vcn encode.

Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
---
 src/gallium/drivers/radeon/radeon_vcn_enc.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

Patch hide | download patch | download mbox

diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc.c b/src/gallium/drivers/radeon/radeon_vcn_enc.c
index 48ff8db..0a2c5d8 100644
--- a/src/gallium/drivers/radeon/radeon_vcn_enc.c
+++ b/src/gallium/drivers/radeon/radeon_vcn_enc.c
@@ -126,7 +126,28 @@  static void radeon_enc_begin_frame(struct pipe_video_codec *encoder,
 							 struct pipe_video_buffer *source,
 							 struct pipe_picture_desc *picture)
 {
-	/* TODO*/
+	struct radeon_encoder *enc = (struct radeon_encoder*)encoder;
+	struct vl_video_buffer *vid_buf = (struct vl_video_buffer *)source;
+	struct pipe_h264_enc_picture_desc *pic = (struct pipe_h264_enc_picture_desc *)picture;
+
+	radeon_vcn_enc_get_param(enc, pic);
+
+	enc->get_buffer(vid_buf->resources[0], &enc->handle, &enc->luma);
+	enc->get_buffer(vid_buf->resources[1], NULL, &enc->chroma);
+
+	enc->need_feedback = false;
+
+	if (!enc->stream_handle) {
+		struct rvid_buffer fb;
+		enc->stream_handle = si_vid_alloc_stream_handle();
+		enc->si = CALLOC_STRUCT(rvid_buffer);
+		si_vid_create_buffer(enc->screen, enc->si, 128 * 1024, PIPE_USAGE_STAGING);
+		si_vid_create_buffer(enc->screen, &fb, 4096, PIPE_USAGE_STAGING);
+		enc->fb = &fb;
+		enc->begin(enc, pic);
+		flush(enc);
+		si_vid_destroy_buffer(&fb);
+	}
 }
 
 static void radeon_enc_encode_bitstream(struct pipe_video_codec *encoder,