[FFmpeg-trac] #9967(avutil:new): [vaapi] av_hwframe_map with AV_PIX_FMT_PRIME_FD calls vaExportSurfaceHandle, but not vaSyncSurface

FFmpeg trac at avcodec.org
Thu Feb 23 21:33:34 EET 2023


#9967: [vaapi] av_hwframe_map with AV_PIX_FMT_PRIME_FD calls
vaExportSurfaceHandle, but not vaSyncSurface
-------------------------------------+----------------------------------
             Reporter:  goffioul     |                    Owner:  (none)
                 Type:  enhancement  |                   Status:  new
             Priority:  normal       |                Component:  avutil
              Version:  unspecified  |               Resolution:
             Keywords:  vaapi        |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+----------------------------------
Comment (by goffioul):

 @wangfei: I'm sorry, I won't be able to confirm, my client code has moved
 on too much and is not mapping anymore the VA-API frame to a prime fd. I
 can however confirm that at the time I submitted this bug, I was using the
 following patch locally, which effectively avoided the tearing artefact.
 While not being identical, it should be functionally equivalent. The main
 difference is that `vaSynSurface` was called
 '''after'''`vaExportSurfaceHandle`.

 {{{
 diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c
 index 01ac91c33b..e2d0217fe1 100644
 --- a/libavutil/hwcontext_vaapi.c
 +++ b/libavutil/hwcontext_vaapi.c
 @@ -1306,6 +1306,7 @@ static int vaapi_map_to_drm_esh(AVHWFramesContext
 *hwfc, AVFrame *dst,
                 "%d (%s).\n", surface_id, vas, vaErrorStr(vas));
          return AVERROR(EIO);
      }
 +    vaSyncSurface(hwctx->display, surface_id);

      drm_desc = av_mallocz(sizeof(*drm_desc));
      if (!drm_desc) {
 }}}
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/9967#comment:3>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list