From 3319c455855acf9d3474f51c7ae3a080bc6d9103 Mon Sep 17 00:00:00 2001 From: rongrong zhou Date: Fri, 20 Jul 2018 14:11:16 +0800 Subject: [PATCH] media: ptsserv: set pts_us64 in pts_lookup_offset PD#170127: media: ptsserv: set pts_us64 in pts_lookup_offset Setiting pts_us64 prevents the decoder from using uninitialized values, Sometimes the function return pts valid only if pts is set. Change-Id: If4b0a329bbc013902fd2045207420f0f85bfff4e Signed-off-by: rongrong zhou --- drivers/amlogic/media/frame_sync/ptsserv.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/amlogic/media/frame_sync/ptsserv.c b/drivers/amlogic/media/frame_sync/ptsserv.c index 295507be128e..de2e8b5b6da8 100644 --- a/drivers/amlogic/media/frame_sync/ptsserv.c +++ b/drivers/amlogic/media/frame_sync/ptsserv.c @@ -65,6 +65,7 @@ struct pts_table_s { u32 lookup_cache_offset; bool lookup_cache_valid; u32 lookup_cache_pts; + u64 lookup_cache_pts_uS64; unsigned long buf_start; u32 buf_size; int first_checkin_pts; @@ -686,6 +687,7 @@ static int pts_lookup_offset_inline_locked(u8 type, u32 offset, u32 *val, if ((pTable->lookup_cache_valid) && (offset == pTable->lookup_cache_offset)) { *val = pTable->lookup_cache_pts; + *uS64 = pTable->lookup_cache_pts_uS64; return 0; } @@ -803,6 +805,7 @@ static int pts_lookup_offset_inline_locked(u8 type, u32 offset, u32 *val, #endif pTable->lookup_cache_pts = *val; + pTable->lookup_cache_pts_uS64 = *uS64; pTable->lookup_cache_offset = offset; pTable->lookup_cache_valid = true; @@ -899,8 +902,8 @@ static int pts_lookup_offset_inline_locked(u8 type, u32 offset, u32 *val, p->val); } } + return 0; } - return 0; } #endif else { @@ -910,6 +913,7 @@ static int pts_lookup_offset_inline_locked(u8 type, u32 offset, u32 *val, */ if (!pTable->first_lookup_ok) { *val = pTable->first_checkin_pts; + *uS64 = (u64)(*val) << 32; pTable->first_lookup_ok = 1; pTable->first_lookup_is_fail = 1;