summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrongrong zhou <rongrong.zhou@amlogic.com>2018-07-18 18:26:31 +0800
committerZhi Zhou <zhi.zhou@amlogic.com>2018-07-25 19:28:53 -0700
commit9f29a7f54a8161fefe190217ffe817b587e5fe20 (patch)
tree1e966a099a7b8de11f46d46cc8fccaa9d7886bfa
parenta52334e09181ff9d1090489a2f56963a9a9561af (diff)
downloadmedia_modules-9f29a7f54a8161fefe190217ffe817b587e5fe20.tar.gz
codec_mm: fix alloc fail issue
PD# 169831 1. if alloc bmmu idx fail, try free keep video 2. delete redundant code to set the connected status in vmjpeg_multi Change-Id: I356be5cf530600c3b439b4beab6289eba98c9d1a
-rw-r--r--drivers/frame_provider/decoder/mjpeg/vmjpeg_multi.c1
-rw-r--r--drivers/frame_provider/decoder/utils/decoder_bmmu_box.c6
2 files changed, 5 insertions, 2 deletions
diff --git a/drivers/frame_provider/decoder/mjpeg/vmjpeg_multi.c b/drivers/frame_provider/decoder/mjpeg/vmjpeg_multi.c
index a0b4493..7364f35 100644
--- a/drivers/frame_provider/decoder/mjpeg/vmjpeg_multi.c
+++ b/drivers/frame_provider/decoder/mjpeg/vmjpeg_multi.c
@@ -795,7 +795,6 @@ static void vmjpeg_work(struct work_struct *work)
}
amvdec_stop();
/* mark itself has all HW resource released and input released */
- vdec_set_status(hw_to_vdec(hw), VDEC_STATUS_CONNECTED);
vdec_core_finish_run(hw_to_vdec(hw), CORE_MASK_VDEC_1
| CORE_MASK_HEVC);
del_timer_sync(&hw->check_timer);
diff --git a/drivers/frame_provider/decoder/utils/decoder_bmmu_box.c b/drivers/frame_provider/decoder/utils/decoder_bmmu_box.c
index fe00832..6181063 100644
--- a/drivers/frame_provider/decoder/utils/decoder_bmmu_box.c
+++ b/drivers/frame_provider/decoder/utils/decoder_bmmu_box.c
@@ -298,6 +298,10 @@ int decoder_bmmu_box_alloc_idx_wait(
if (have_space) {
ret = decoder_bmmu_box_alloc_idx(handle,
idx, size, aligned_2n, mem_flags);
+ if (ret == -ENOMEM) {
+ pr_info("bmmu alloc idx fail, try free keep video.\n");
+ try_free_keep_video(1);
+ }
} else {
try_free_keep_video(1);
ret = -ENOMEM;
@@ -335,7 +339,7 @@ int decoder_bmmu_box_alloc_buf_phy(
* driver_name, idx, *buf_phy_addr, size);
*/
} else {
- pr_info("%s malloc failed %d\n", driver_name, idx);
+ pr_info("%s malloc failed %d\n", driver_name, idx);
return -ENOMEM;
}