Module: Mesa
Branch: master
Commit: f9311265bfa2d716490a89be09bec9c5e253a56a
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f9311265bfa2d716490a89be09bec9c5e253a56a

Author: Indrajit Das <indrajit-kumar....@amd.com>
Date:   Thu Sep 15 10:49:15 2016 +0530

st/omx/dec/h265: Correct the timestamping

(derived from commit 3b6bda665a5a890f2c98e19d2939d7de92b8cb4c)

v2: fix the tabs(Leo)

Reviewed-by: Christian K├Ânig <christian.koe...@amd.com>
Reviewed-by: Nishanth Peethambaran <nishanth.peethamba...@amd.com>
Signed-off-by: Indrajit Das <indrajit-kumar....@amd.com>
Signed-off-by: Leo Liu <leo....@amd.com>

---

 src/gallium/state_trackers/omx/vid_dec_h265.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/omx/vid_dec_h265.c 
b/src/gallium/state_trackers/omx/vid_dec_h265.c
index 7c0f75d..0772b4d 100644
--- a/src/gallium/state_trackers/omx/vid_dec_h265.c
+++ b/src/gallium/state_trackers/omx/vid_dec_h265.c
@@ -60,6 +60,7 @@ enum {
 struct dpb_list {
    struct list_head list;
    struct pipe_video_buffer *buffer;
+   OMX_TICKS timestamp;
    unsigned poc;
 };
 
@@ -518,6 +519,9 @@ static void vid_dec_h265_BeginFrame(vid_dec_PrivateType 
*priv)
       return;
 
    vid_dec_NeedTarget(priv);
+   if (priv->first_buf_in_frame)
+      priv->timestamp = priv->timestamps[0];
+   priv->first_buf_in_frame = false;
 
    if (!priv->codec) {
       struct pipe_video_codec templat = {};
@@ -558,6 +562,8 @@ static struct pipe_video_buffer 
*vid_dec_h265_Flush(vid_dec_PrivateType *priv,
       return NULL;
 
    buf = result->buffer;
+   if (timestamp)
+      *timestamp = result->timestamp;
 
    --priv->codec_data.h265.dpb_num;
    LIST_DEL(&result->list);
@@ -572,6 +578,7 @@ static void vid_dec_h265_EndFrame(vid_dec_PrivateType *priv)
    struct pipe_video_buffer *tmp;
    struct ref_pic_set *rps;
    int i;
+   OMX_TICKS timestamp;
 
    if (!priv->frame_started)
       return;
@@ -621,7 +628,9 @@ static void vid_dec_h265_EndFrame(vid_dec_PrivateType *priv)
    if (!entry)
       return;
 
+   priv->first_buf_in_frame = true;
    entry->buffer = priv->target;
+   entry->timestamp = priv->timestamp;
    entry->poc = get_poc(priv);
 
    LIST_ADDTAIL(&entry->list, &priv->codec_data.h265.dpb_list);
@@ -632,7 +641,8 @@ static void vid_dec_h265_EndFrame(vid_dec_PrivateType *priv)
       return;
 
    tmp = priv->in_buffers[0]->pInputPortPrivate;
-   priv->in_buffers[0]->pInputPortPrivate = vid_dec_h265_Flush(priv, NULL);
+   priv->in_buffers[0]->pInputPortPrivate = vid_dec_h265_Flush(priv, 
&timestamp);
+   priv->in_buffers[0]->nTimeStamp = timestamp;
    priv->target = tmp;
    priv->frame_finished = priv->in_buffers[0]->pInputPortPrivate != NULL;
    if (priv->frame_finished &&
@@ -894,4 +904,5 @@ void vid_dec_h265_Init(vid_dec_PrivateType *priv)
    priv->Decode = vid_dec_h265_Decode;
    priv->EndFrame = vid_dec_h265_EndFrame;
    priv->Flush = vid_dec_h265_Flush;
+   priv->first_buf_in_frame = true;
 }

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to