summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSunyoung Kang <sy0816.kang@samsung.com>2020-12-17 14:46:33 +0900
committerWen Chang Liu <wenchangliu@google.com>2023-12-06 02:42:14 +0000
commit94e581a166fa8d4aa36875f84e5f471b22f01253 (patch)
tree4d1269a300f05a6578db48c45f53e94953644524
parent4877a693370dcc15914ebda4ab2bf6089829376a (diff)
downloadgs-94e581a166fa8d4aa36875f84e5f471b22f01253.tar.gz
media: mfc: fix LAST_SEQ handling of B frame encoding
If there is no output buffer at LAST_SEQ of B frame encoding, set addr and size as 0xffff_ffff for COMPLETE_SEQ. Bug: 314887997 Test: run cts -m CtsVideoTestCases Change-Id: I611a708527a392d629089788a2530adb347559ca Signed-off-by: Sunyoung Kang <sy0816.kang@samsung.com>
-rw-r--r--drivers/media/platform/exynos/mfc/mfc_core_reg_api.c8
-rw-r--r--drivers/media/platform/exynos/mfc/mfc_core_run.c3
2 files changed, 9 insertions, 2 deletions
diff --git a/drivers/media/platform/exynos/mfc/mfc_core_reg_api.c b/drivers/media/platform/exynos/mfc/mfc_core_reg_api.c
index 519a8859e..79b55ec89 100644
--- a/drivers/media/platform/exynos/mfc/mfc_core_reg_api.c
+++ b/drivers/media/platform/exynos/mfc/mfc_core_reg_api.c
@@ -473,6 +473,14 @@ int mfc_core_set_enc_stream_buffer(struct mfc_core *core, struct mfc_ctx *ctx,
offset = mfc_buf->vb.vb2_buf.planes[0].data_offset;
size = (unsigned int)vb2_plane_size(&mfc_buf->vb.vb2_buf, 0);
size = ALIGN(size, STREAM_BUF_ALIGN);
+ } else {
+ /*
+ * When LAST_SEQ of B frame encoding
+ * if there is no output buffer, set addr and size with 0xffffffff
+ * and then FW returns COMPLETE_SEQ.
+ */
+ addr = 0xffffffff;
+ size = 0xffffffff;
}
MFC_CORE_WRITEL(addr, MFC_REG_E_STREAM_BUFFER_ADDR); /* 16B align */
diff --git a/drivers/media/platform/exynos/mfc/mfc_core_run.c b/drivers/media/platform/exynos/mfc/mfc_core_run.c
index a6b172f08..9aa6bb89b 100644
--- a/drivers/media/platform/exynos/mfc/mfc_core_run.c
+++ b/drivers/media/platform/exynos/mfc/mfc_core_run.c
@@ -590,8 +590,7 @@ int mfc_core_run_enc_last_frames(struct mfc_core *core, struct mfc_ctx *ctx)
mfc_debug(2, "no dst buffers set to zero\n");
if (mfc_core_get_enc_bframe(ctx)) {
- mfc_ctx_info("B frame encoding should be dst buffer\n");
- return -EINVAL;
+ mfc_ctx_info("B frame encoding doesn't have dst buffer\n");
}
}