Mark Thompson wrote:
---
A simple fix to the problem described here: 
<https://lists.freedesktop.org/archives/mesa-dev/2016-September/128076.html>.

With this applied, the driver no longer hangs/crashes when vaSyncSurface() is 
called in places other than for the first time after an encode operation 
(including a second call on the same surface).

Once I could get ffmpeg (patched) or avconv to roughly work (before the dual instance commit), but I can't get either to work now = produces unreadable file.

Testing with git avconv I am trying -

./avconv -vaapi_device :0 -f rawvideo -framerate 50 -s 2560x1440 -pix_fmt nv12 -i /mnt/ramdisk/trees-1440p50.nv12 -vframes 5 -vf 'hwupload' -c:v h264_vaapi -profile:v 66 -b:v 40M -bf 0 -g 30 -f h264 -y /mnt/ramdisk/out.264

but debugging printfs show refs = 2 and bframes enabled (I also notice with your baseline patch that -profile:v 66 fails).

Do you have an example that works for you with avconv + this patch?

TIA


Thanks,

- Mark


  src/gallium/state_trackers/va/surface.c | 7 +++++++
  1 file changed, 7 insertions(+)

diff --git a/src/gallium/state_trackers/va/surface.c 
b/src/gallium/state_trackers/va/surface.c
index 75db650..5e92980 100644
--- a/src/gallium/state_trackers/va/surface.c
+++ b/src/gallium/state_trackers/va/surface.c
@@ -111,6 +111,12 @@ vlVaSyncSurface(VADriverContextP ctx, VASurfaceID 
render_target)
        return VA_STATUS_ERROR_INVALID_SURFACE;
     }

+   if (!surf->feedback) {
+      // No outstanding operation: nothing to do.
+      pipe_mutex_unlock(drv->mutex);
+      return VA_STATUS_SUCCESS;
+   }
+
     context = handle_table_get(drv->htab, surf->ctx);
     if (!context) {
        pipe_mutex_unlock(drv->mutex);
@@ -126,6 +132,7 @@ vlVaSyncSurface(VADriverContextP ctx, VASurfaceID 
render_target)
        if (frame_diff < 2)
           context->decoder->flush(context->decoder);
        context->decoder->get_feedback(context->decoder, surf->feedback, 
&(surf->coded_buf->coded_size));
+      surf->feedback = NULL;
     }
     pipe_mutex_unlock(drv->mutex);
     return VA_STATUS_SUCCESS;


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

Reply via email to