On Mon, Jan 19, 2015 at 10:34:37AM +0800, Xiang, Haihao wrote:
> On Mon, 2015-01-19 at 00:20 +0100, Gilles Chanteperdrix wrote:
> > Hi,
> > 
> > I am testing libva with ffmpeg on Linux to decode h264 video. 
> > Linux version is 3.4.29 
> > FFmpeg version is 2.5.3 
> > Mesa version is 10.4.0 
> > libdrm version is 2.4.58 
> > libva version is 1.5.0
> > 
> > From what I could gather from the documentation and examples, using
> > vaDeriveImage should be preferred if it is available. However, I
> > have compared, with top, the CPU consumed, and I observe that the
> > following code:
> > 
> > #ifdef USE_VADERIVEIMAGE
> >     vrc = vaDeriveImage(ctx->display, buf->surface_id, &va_image);
> >     CHECK_VASTATUS(vrc, "vaDeriveImage");
> > #else
> >     vrc = vaGetImage(ctx->display, buf->surface_id,
> >                     0, 0, cctx->coded_width, cctx->coded_height,
> >                     va_image.image_id);
> >     CHECK_VASTATUS(vrc, "vaGetImage");
> > #endif
> > 
> >     vrc = vaMapBuffer(ctx->display, va_image.buf, &data);
> >     CHECK_VASTATUS(vrc, "vaMapBuffer");
> > 
> >     memcpy(f->img[0], data + va_image.offsets[0],
> >             va_image.pitches[0] * cctx->coded_height);
> >     memcpy(f->img[1], data + va_image.offsets[1],
> >             va_image.pitches[1] * cctx->coded_height / 2);
> > 
> >     vrc = vaUnmapBuffer(ctx->display, va_image.buf);
> >     CHECK_VASTATUS(vrc, "vaUnmapBuffer");
> > 
> > #ifdef USE_VADERIVEIMAGE
> >     vrc = vaDestroyImage(ctx->display, va_image.image_id);
> >     CHECK_VASTATUS(vrc, "vaDestroyImage");
> > #endif
> > 
> > Results in a higher cpu consumption if compiled with
> > USE_VADERIVEIMAGE. Is this normal, or is there something I am doing
> > wrong? I can provide the complete code if needed.
> 
> It depends on the the underlying memory format. Most surfaces used in
> the driver are tiled, so the derived images are tiled too, the memory
> returned is uncached and reading data from it would be slow. If the
> image isn't tiled, the returned memory is cached. 

Ok. Thanks for the explanation.

Is the result of vaMapBuffer always uncached, or only for
a VA image obtained with vaDeriveImage ? If I plan to run the same
program with multiple drivers, is there a way to know whether
vaDeriveImage is optimal ?

Regards.

-- 
                                            Gilles.
_______________________________________________
Libva mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libva

Reply via email to