Re: [FFmpeg-devel] [PATCH 3/4] vaapi: fix usage of invalid buffer ids.

2015-08-17 Thread wm4
On Mon, 17 Aug 2015 19:17:52 +0200
Gwenole Beauchesne  wrote:

> Invalid buffer ids are defined by VA_INVALID_ID. Use that through out
> vaapi_*.c support files now that we have private data initialized and
> managed by libavcodec. Previously, the only requirement for the public
> vaapi_context struct was to be zero-initialized.
> 
> This fixes support for 3rdparty VA drivers that strictly conform to
> the API whereby an invalid buffer id is VA_INVALID_ID and the first
> valid buffer id can actually be zero.
> 
> Signed-off-by: Gwenole Beauchesne 
> ---
>  libavcodec/vaapi.c | 20 
>  1 file changed, 12 insertions(+), 8 deletions(-)
> 
> diff --git a/libavcodec/vaapi.c b/libavcodec/vaapi.c
> index 880e3d6..1ae71a5 100644
> --- a/libavcodec/vaapi.c
> +++ b/libavcodec/vaapi.c
> @@ -34,9 +34,9 @@ static void destroy_buffers(VADisplay display, VABufferID 
> *buffers, unsigned int
>  {
>  unsigned int i;
>  for (i = 0; i < n_buffers; i++) {
> -if (buffers[i]) {
> +if (buffers[i] != VA_INVALID_ID) {
>  vaDestroyBuffer(display, buffers[i]);
> -buffers[i] = 0;
> +buffers[i] = VA_INVALID_ID;
>  }
>  }
>  }
> @@ -49,6 +49,10 @@ int ff_vaapi_context_init(AVCodecContext *avctx)
>  vactx->display  = user_vactx->display;
>  vactx->config_id= user_vactx->config_id;
>  vactx->context_id   = user_vactx->context_id;
> +
> +vactx->pic_param_buf_id = VA_INVALID_ID;
> +vactx->iq_matrix_buf_id = VA_INVALID_ID;
> +vactx->bitplane_buf_id  = VA_INVALID_ID;
>  return 0;
>  }
>  
> @@ -62,18 +66,18 @@ int ff_vaapi_render_picture(FFVAContext *vactx, 
> VASurfaceID surface)
>  VABufferID va_buffers[3];
>  unsigned int n_va_buffers = 0;
>  
> -if (!vactx->pic_param_buf_id)
> +if (vactx->pic_param_buf_id == VA_INVALID_ID)
>  return 0;
>  
>  vaUnmapBuffer(vactx->display, vactx->pic_param_buf_id);
>  va_buffers[n_va_buffers++] = vactx->pic_param_buf_id;
>  
> -if (vactx->iq_matrix_buf_id) {
> +if (vactx->iq_matrix_buf_id != VA_INVALID_ID) {
>  vaUnmapBuffer(vactx->display, vactx->iq_matrix_buf_id);
>  va_buffers[n_va_buffers++] = vactx->iq_matrix_buf_id;
>  }
>  
> -if (vactx->bitplane_buf_id) {
> +if (vactx->bitplane_buf_id != VA_INVALID_ID) {
>  vaUnmapBuffer(vactx->display, vactx->bitplane_buf_id);
>  va_buffers[n_va_buffers++] = vactx->bitplane_buf_id;
>  }
> @@ -113,7 +117,7 @@ int ff_vaapi_commit_slices(FFVAContext *vactx)
>  return -1;
>  vactx->slice_buf_ids = slice_buf_ids;
>  
> -slice_param_buf_id = 0;
> +slice_param_buf_id = VA_INVALID_ID;
>  if (vaCreateBuffer(vactx->display, vactx->context_id,
> VASliceParameterBufferType,
> vactx->slice_param_size,
> @@ -122,7 +126,7 @@ int ff_vaapi_commit_slices(FFVAContext *vactx)
>  return -1;
>  vactx->slice_count = 0;
>  
> -slice_data_buf_id = 0;
> +slice_data_buf_id = VA_INVALID_ID;
>  if (vaCreateBuffer(vactx->display, vactx->context_id,
> VASliceDataBufferType,
> vactx->slice_data_size,
> @@ -141,7 +145,7 @@ static void *alloc_buffer(FFVAContext *vactx, int type, 
> unsigned int size, uint3
>  {
>  void *data = NULL;
>  
> -*buf_id = 0;
> +*buf_id = VA_INVALID_ID;
>  if (vaCreateBuffer(vactx->display, vactx->context_id,
> type, size, 1, NULL, buf_id) == VA_STATUS_SUCCESS)
>  vaMapBuffer(vactx->display, *buf_id, &data);

LGTM
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 3/4] vaapi: fix usage of invalid buffer ids.

2015-08-17 Thread Gwenole Beauchesne
Invalid buffer ids are defined by VA_INVALID_ID. Use that through out
vaapi_*.c support files now that we have private data initialized and
managed by libavcodec. Previously, the only requirement for the public
vaapi_context struct was to be zero-initialized.

This fixes support for 3rdparty VA drivers that strictly conform to
the API whereby an invalid buffer id is VA_INVALID_ID and the first
valid buffer id can actually be zero.

Signed-off-by: Gwenole Beauchesne 
---
 libavcodec/vaapi.c | 20 
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/libavcodec/vaapi.c b/libavcodec/vaapi.c
index 880e3d6..1ae71a5 100644
--- a/libavcodec/vaapi.c
+++ b/libavcodec/vaapi.c
@@ -34,9 +34,9 @@ static void destroy_buffers(VADisplay display, VABufferID 
*buffers, unsigned int
 {
 unsigned int i;
 for (i = 0; i < n_buffers; i++) {
-if (buffers[i]) {
+if (buffers[i] != VA_INVALID_ID) {
 vaDestroyBuffer(display, buffers[i]);
-buffers[i] = 0;
+buffers[i] = VA_INVALID_ID;
 }
 }
 }
@@ -49,6 +49,10 @@ int ff_vaapi_context_init(AVCodecContext *avctx)
 vactx->display  = user_vactx->display;
 vactx->config_id= user_vactx->config_id;
 vactx->context_id   = user_vactx->context_id;
+
+vactx->pic_param_buf_id = VA_INVALID_ID;
+vactx->iq_matrix_buf_id = VA_INVALID_ID;
+vactx->bitplane_buf_id  = VA_INVALID_ID;
 return 0;
 }
 
@@ -62,18 +66,18 @@ int ff_vaapi_render_picture(FFVAContext *vactx, VASurfaceID 
surface)
 VABufferID va_buffers[3];
 unsigned int n_va_buffers = 0;
 
-if (!vactx->pic_param_buf_id)
+if (vactx->pic_param_buf_id == VA_INVALID_ID)
 return 0;
 
 vaUnmapBuffer(vactx->display, vactx->pic_param_buf_id);
 va_buffers[n_va_buffers++] = vactx->pic_param_buf_id;
 
-if (vactx->iq_matrix_buf_id) {
+if (vactx->iq_matrix_buf_id != VA_INVALID_ID) {
 vaUnmapBuffer(vactx->display, vactx->iq_matrix_buf_id);
 va_buffers[n_va_buffers++] = vactx->iq_matrix_buf_id;
 }
 
-if (vactx->bitplane_buf_id) {
+if (vactx->bitplane_buf_id != VA_INVALID_ID) {
 vaUnmapBuffer(vactx->display, vactx->bitplane_buf_id);
 va_buffers[n_va_buffers++] = vactx->bitplane_buf_id;
 }
@@ -113,7 +117,7 @@ int ff_vaapi_commit_slices(FFVAContext *vactx)
 return -1;
 vactx->slice_buf_ids = slice_buf_ids;
 
-slice_param_buf_id = 0;
+slice_param_buf_id = VA_INVALID_ID;
 if (vaCreateBuffer(vactx->display, vactx->context_id,
VASliceParameterBufferType,
vactx->slice_param_size,
@@ -122,7 +126,7 @@ int ff_vaapi_commit_slices(FFVAContext *vactx)
 return -1;
 vactx->slice_count = 0;
 
-slice_data_buf_id = 0;
+slice_data_buf_id = VA_INVALID_ID;
 if (vaCreateBuffer(vactx->display, vactx->context_id,
VASliceDataBufferType,
vactx->slice_data_size,
@@ -141,7 +145,7 @@ static void *alloc_buffer(FFVAContext *vactx, int type, 
unsigned int size, uint3
 {
 void *data = NULL;
 
-*buf_id = 0;
+*buf_id = VA_INVALID_ID;
 if (vaCreateBuffer(vactx->display, vactx->context_id,
type, size, 1, NULL, buf_id) == VA_STATUS_SUCCESS)
 vaMapBuffer(vactx->display, *buf_id, &data);
-- 
1.9.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel