diff options
author | Sunyoung Kang <sy0816.kang@samsung.com> | 2020-12-17 14:46:33 +0900 |
---|---|---|
committer | Wen Chang Liu <wenchangliu@google.com> | 2023-12-06 02:42:14 +0000 |
commit | 94e581a166fa8d4aa36875f84e5f471b22f01253 (patch) | |
tree | 4d1269a300f05a6578db48c45f53e94953644524 | |
parent | 4877a693370dcc15914ebda4ab2bf6089829376a (diff) | |
download | gs-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.c | 8 | ||||
-rw-r--r-- | drivers/media/platform/exynos/mfc/mfc_core_run.c | 3 |
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"); } } |