summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiang, Haihao <haihao.xiang@intel.com>2012-10-24 16:05:05 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2012-10-24 16:07:26 +0800
commit210094ee4adc28233fc096285ab4b9ebc9a49511 (patch)
treec4be151bf59a16951ae07fcc01914f027e3fb6be
parent502c1b47eb9b05a3f8fc02e346c722b99d82e6ac (diff)
Unify the code for xxx_free_avc_surface
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
-rwxr-xr-xsrc/gen6_mfd.c29
-rw-r--r--src/gen6_mfd.h7
-rw-r--r--src/gen75_mfd.c31
-rwxr-xr-xsrc/gen7_mfd.c29
-rw-r--r--src/gen7_mfd.h7
-rw-r--r--src/i965_avc_bsd.c31
-rw-r--r--src/i965_avc_bsd.h8
-rw-r--r--src/i965_decoder.h31
8 files changed, 64 insertions, 109 deletions
diff --git a/src/gen6_mfd.c b/src/gen6_mfd.c
index c420e9b..fa2f128 100755
--- a/src/gen6_mfd.c
+++ b/src/gen6_mfd.c
@@ -26,6 +26,10 @@
*
*/
+#ifndef HAVE_GEN_AVC_SURFACE
+#define HAVE_GEN_AVC_SURFACE 1
+#endif
+
#include "sysdeps.h"
#include "intel_batchbuffer.h"
#include "intel_driver.h"
@@ -162,37 +166,20 @@ gen6_mfd_avc_frame_store_index(VADriverContextP ctx,
}
}
-static void
-gen6_mfd_free_avc_surface(void **data)
-{
- struct gen6_avc_surface *gen6_avc_surface = *data;
-
- if (!gen6_avc_surface)
- return;
-
- dri_bo_unreference(gen6_avc_surface->dmv_top);
- gen6_avc_surface->dmv_top = NULL;
- dri_bo_unreference(gen6_avc_surface->dmv_bottom);
- gen6_avc_surface->dmv_bottom = NULL;
-
- free(gen6_avc_surface);
- *data = NULL;
-}
-
static void
gen6_mfd_init_avc_surface(VADriverContextP ctx,
VAPictureParameterBufferH264 *pic_param,
struct object_surface *obj_surface)
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
- struct gen6_avc_surface *gen6_avc_surface = obj_surface->private_data;
+ GenAvcSurface *gen6_avc_surface = obj_surface->private_data;
int height_in_mbs;
- obj_surface->free_private_data = gen6_mfd_free_avc_surface;
+ obj_surface->free_private_data = gen_free_avc_surface;
height_in_mbs = ((pic_param->picture_height_in_mbs_minus1 + 1) & 0xff); /* frame height */
if (!gen6_avc_surface) {
- gen6_avc_surface = calloc(sizeof(struct gen6_avc_surface), 1);
+ gen6_avc_surface = calloc(sizeof(GenAvcSurface), 1);
assert((obj_surface->size & 0x3f) == 0);
obj_surface->private_data = gen6_avc_surface;
}
@@ -570,7 +557,7 @@ gen6_mfd_avc_directmode_state(VADriverContextP ctx,
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct intel_batchbuffer *batch = gen6_mfd_context->base.batch;
struct object_surface *obj_surface;
- struct gen6_avc_surface *gen6_avc_surface;
+ GenAvcSurface *gen6_avc_surface;
VAPictureH264 *va_pic;
int i, j;
diff --git a/src/gen6_mfd.h b/src/gen6_mfd.h
index 6e20364..de131d6 100644
--- a/src/gen6_mfd.h
+++ b/src/gen6_mfd.h
@@ -35,13 +35,6 @@
#include <intel_bufmgr.h>
#include "i965_decoder.h"
-struct gen6_avc_surface
-{
- dri_bo *dmv_top;
- dri_bo *dmv_bottom;
- int dmv_bottom_flag;
-};
-
#define GEN6_VC1_I_PICTURE 0
#define GEN6_VC1_P_PICTURE 1
#define GEN6_VC1_B_PICTURE 2
diff --git a/src/gen75_mfd.c b/src/gen75_mfd.c
index 50bcfd4..b7592f1 100644
--- a/src/gen75_mfd.c
+++ b/src/gen75_mfd.c
@@ -27,6 +27,10 @@
*
*/
+#ifndef HAVE_GEN_AVC_SURFACE
+#define HAVE_GEN_AVC_SURFACE 1
+#endif
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -172,38 +176,21 @@ gen75_mfd_avc_frame_store_index(VADriverContextP ctx,
}
}
-static void
-gen75_mfd_free_avc_surface(void **data)
-{
- struct gen7_avc_surface *gen7_avc_surface = *data;
-
- if (!gen7_avc_surface)
- return;
-
- dri_bo_unreference(gen7_avc_surface->dmv_top);
- gen7_avc_surface->dmv_top = NULL;
- dri_bo_unreference(gen7_avc_surface->dmv_bottom);
- gen7_avc_surface->dmv_bottom = NULL;
-
- free(gen7_avc_surface);
- *data = NULL;
-}
-
static void
gen75_mfd_init_avc_surface(VADriverContextP ctx,
VAPictureParameterBufferH264 *pic_param,
struct object_surface *obj_surface)
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
- struct gen7_avc_surface *gen7_avc_surface = obj_surface->private_data;
+ GenAvcSurface *gen7_avc_surface = obj_surface->private_data;
int width_in_mbs, height_in_mbs;
- obj_surface->free_private_data = gen75_mfd_free_avc_surface;
+ obj_surface->free_private_data = gen_free_avc_surface;
width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1;
height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */
if (!gen7_avc_surface) {
- gen7_avc_surface = calloc(sizeof(struct gen7_avc_surface), 1);
+ gen7_avc_surface = calloc(sizeof(GenAvcSurface), 1);
assert((obj_surface->size & 0x3f) == 0);
obj_surface->private_data = gen7_avc_surface;
}
@@ -816,7 +803,7 @@ gen75_mfd_avc_directmode_state_bplus(VADriverContextP ctx,
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct intel_batchbuffer *batch = gen7_mfd_context->base.batch;
struct object_surface *obj_surface;
- struct gen7_avc_surface *gen7_avc_surface;
+ GenAvcSurface *gen7_avc_surface;
VAPictureH264 *va_pic;
int i, j;
@@ -903,7 +890,7 @@ gen75_mfd_avc_directmode_state(VADriverContextP ctx,
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct intel_batchbuffer *batch = gen7_mfd_context->base.batch;
struct object_surface *obj_surface;
- struct gen7_avc_surface *gen7_avc_surface;
+ GenAvcSurface *gen7_avc_surface;
VAPictureH264 *va_pic;
int i, j;
diff --git a/src/gen7_mfd.c b/src/gen7_mfd.c
index 852fb03..f578c64 100755
--- a/src/gen7_mfd.c
+++ b/src/gen7_mfd.c
@@ -26,6 +26,10 @@
*
*/
+#ifndef HAVE_GEN_AVC_SURFACE
+#define HAVE_GEN_AVC_SURFACE 1
+#endif
+
#include "sysdeps.h"
#include "intel_batchbuffer.h"
#include "intel_driver.h"
@@ -162,38 +166,21 @@ gen7_mfd_avc_frame_store_index(VADriverContextP ctx,
}
}
-static void
-gen7_mfd_free_avc_surface(void **data)
-{
- struct gen7_avc_surface *gen7_avc_surface = *data;
-
- if (!gen7_avc_surface)
- return;
-
- dri_bo_unreference(gen7_avc_surface->dmv_top);
- gen7_avc_surface->dmv_top = NULL;
- dri_bo_unreference(gen7_avc_surface->dmv_bottom);
- gen7_avc_surface->dmv_bottom = NULL;
-
- free(gen7_avc_surface);
- *data = NULL;
-}
-
static void
gen7_mfd_init_avc_surface(VADriverContextP ctx,
VAPictureParameterBufferH264 *pic_param,
struct object_surface *obj_surface)
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
- struct gen7_avc_surface *gen7_avc_surface = obj_surface->private_data;
+ GenAvcSurface *gen7_avc_surface = obj_surface->private_data;
int width_in_mbs, height_in_mbs;
- obj_surface->free_private_data = gen7_mfd_free_avc_surface;
+ obj_surface->free_private_data = gen_free_avc_surface;
width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1;
height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */
if (!gen7_avc_surface) {
- gen7_avc_surface = calloc(sizeof(struct gen7_avc_surface), 1);
+ gen7_avc_surface = calloc(sizeof(GenAvcSurface), 1);
assert((obj_surface->size & 0x3f) == 0);
obj_surface->private_data = gen7_avc_surface;
}
@@ -574,7 +561,7 @@ gen7_mfd_avc_directmode_state(VADriverContextP ctx,
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct intel_batchbuffer *batch = gen7_mfd_context->base.batch;
struct object_surface *obj_surface;
- struct gen7_avc_surface *gen7_avc_surface;
+ GenAvcSurface *gen7_avc_surface;
VAPictureH264 *va_pic;
int i, j;
diff --git a/src/gen7_mfd.h b/src/gen7_mfd.h
index 08d9e3a..0700c80 100644
--- a/src/gen7_mfd.h
+++ b/src/gen7_mfd.h
@@ -35,13 +35,6 @@
#include <intel_bufmgr.h>
#include "i965_decoder.h"
-struct gen7_avc_surface
-{
- dri_bo *dmv_top;
- dri_bo *dmv_bottom;
- int dmv_bottom_flag;
-};
-
#define GEN7_VC1_I_PICTURE 0
#define GEN7_VC1_P_PICTURE 1
#define GEN7_VC1_B_PICTURE 2
diff --git a/src/i965_avc_bsd.c b/src/i965_avc_bsd.c
index b2b6c92..a118076 100644
--- a/src/i965_avc_bsd.c
+++ b/src/i965_avc_bsd.c
@@ -30,6 +30,10 @@
#include <string.h>
#include <assert.h>
+#ifndef HAVE_GEN_AVC_SURFACE
+#define HAVE_GEN_AVC_SURFACE 1
+#endif
+
#include "intel_batchbuffer.h"
#include "intel_driver.h"
@@ -40,23 +44,6 @@
#include "i965_media.h"
#include "i965_decoder_utils.h"
-static void
-i965_avc_bsd_free_avc_bsd_surface(void **data)
-{
- struct i965_avc_bsd_surface *avc_bsd_surface = *data;
-
- if (!avc_bsd_surface)
- return;
-
- dri_bo_unreference(avc_bsd_surface->dmv_top);
- avc_bsd_surface->dmv_top = NULL;
- dri_bo_unreference(avc_bsd_surface->dmv_bottom);
- avc_bsd_surface->dmv_bottom = NULL;
-
- free(avc_bsd_surface);
- *data = NULL;
-}
-
static void
i965_avc_bsd_init_avc_bsd_surface(VADriverContextP ctx,
struct object_surface *obj_surface,
@@ -64,18 +51,16 @@ i965_avc_bsd_init_avc_bsd_surface(VADriverContextP ctx,
struct i965_h264_context *i965_h264_context)
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
- struct i965_avc_bsd_context *i965_avc_bsd_context = &i965_h264_context->i965_avc_bsd_context;
- struct i965_avc_bsd_surface *avc_bsd_surface = obj_surface->private_data;
+ GenAvcSurface *avc_bsd_surface = obj_surface->private_data;
- obj_surface->free_private_data = i965_avc_bsd_free_avc_bsd_surface;
+ obj_surface->free_private_data = gen_free_avc_surface;
if (!avc_bsd_surface) {
- avc_bsd_surface = calloc(sizeof(struct i965_avc_bsd_surface), 1);
+ avc_bsd_surface = calloc(sizeof(GenAvcSurface), 1);
assert((obj_surface->size & 0x3f) == 0);
obj_surface->private_data = avc_bsd_surface;
}
- avc_bsd_surface->ctx = i965_avc_bsd_context;
avc_bsd_surface->dmv_bottom_flag = (pic_param->pic_fields.bits.field_pic_flag &&
!pic_param->seq_fields.bits.direct_8x8_inference_flag);
@@ -404,7 +389,7 @@ i965_avc_bsd_buf_base_state(VADriverContextP ctx,
int i, j;
VAPictureH264 *va_pic;
struct object_surface *obj_surface;
- struct i965_avc_bsd_surface *avc_bsd_surface;
+ GenAvcSurface *avc_bsd_surface;
i965_avc_bsd_context = &i965_h264_context->i965_avc_bsd_context;
diff --git a/src/i965_avc_bsd.h b/src/i965_avc_bsd.h
index 25606ba..7f83007 100644
--- a/src/i965_avc_bsd.h
+++ b/src/i965_avc_bsd.h
@@ -42,14 +42,6 @@ struct i965_avc_bsd_context
} mpr_row_store;
};
-struct i965_avc_bsd_surface
-{
- struct i965_avc_bsd_context *ctx;
- dri_bo *dmv_top;
- dri_bo *dmv_bottom;
- int dmv_bottom_flag;
-};
-
void i965_avc_bsd_pipeline(VADriverContextP, struct decode_state *, void *h264_context);
void i965_avc_bsd_decode_init(VADriverContextP, void *h264_context);
Bool i965_avc_bsd_ternimate(struct i965_avc_bsd_context *);
diff --git a/src/i965_decoder.h b/src/i965_decoder.h
index 2cdc299..40158f0 100644
--- a/src/i965_decoder.h
+++ b/src/i965_decoder.h
@@ -26,6 +26,8 @@
#define I965_DECODER_H
#include <stdint.h>
+#include <stdlib.h>
+
#include <va/va.h>
#include <intel_bufmgr.h>
@@ -43,6 +45,35 @@ struct gen_buffer {
int valid;
};
+#if HAVE_GEN_AVC_SURFACE
+
+typedef struct gen_avc_surface GenAvcSurface;
+struct gen_avc_surface
+{
+ dri_bo *dmv_top;
+ dri_bo *dmv_bottom;
+ int dmv_bottom_flag;
+};
+
+static void
+gen_free_avc_surface(void **data)
+{
+ GenAvcSurface *avc_surface = *data;
+
+ if (!avc_surface)
+ return;
+
+ dri_bo_unreference(avc_surface->dmv_top);
+ avc_surface->dmv_top = NULL;
+ dri_bo_unreference(avc_surface->dmv_bottom);
+ avc_surface->dmv_bottom = NULL;
+
+ free(avc_surface);
+ *data = NULL;
+}
+
+#endif
+
extern struct hw_context *
gen75_dec_hw_context_init(VADriverContextP ctx, VAProfile profile);