summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--drivers/frame_provider/decoder/h264_multi/vmh264.c226
-rw-r--r--drivers/frame_provider/decoder/h265/vh265.c7
-rw-r--r--drivers/frame_provider/decoder/vp9/vvp9.c4
3 files changed, 155 insertions, 82 deletions
diff --git a/drivers/frame_provider/decoder/h265/vh265.c b/drivers/frame_provider/decoder/h265/vh265.c
index 8c4a9ab..fe582a9 100644
--- a/drivers/frame_provider/decoder/h265/vh265.c
+++ b/drivers/frame_provider/decoder/h265/vh265.c
@@ -5554,6 +5554,7 @@ static struct PIC_s *get_new_pic(struct hevc_state_s *hevc,
&& pic->output_ready == 0
&& pic->width == hevc->pic_w
&& pic->height == hevc->pic_h
+ && pic->vf_ref == 0
) {
if (new_pic) {
if (new_pic->POC != INVALID_POC) {
@@ -5670,14 +5671,13 @@ static struct PIC_s *v4l_get_new_pic(struct hevc_state_s *hevc,
union param_u *rpm_param)
{
int ret;
- int used_buf_num = get_work_pic_num(hevc);
struct aml_vcodec_ctx * v4l = hevc->v4l2_ctx;
+ struct v4l_buff_pool *pool = &v4l->cap_pool;
struct PIC_s *new_pic = NULL;
struct PIC_s *pic = NULL;
int i;
- for (i = 0; i < used_buf_num; ++i) {
- struct v4l_buff_pool *pool = &v4l->cap_pool;
+ for (i = 0; i < pool->in; ++i) {
u32 state = (pool->seq[i] >> 16);
u32 index = (pool->seq[i] & 0xffff);
@@ -5690,6 +5690,7 @@ static struct PIC_s *v4l_get_new_pic(struct hevc_state_s *hevc,
(pic->output_ready == 0) &&
(pic->width == hevc->pic_w) &&
(pic->height == hevc->pic_h) &&
+ (pic->vf_ref == 0) &&
pic->cma_alloc_addr) {
new_pic = pic;
}