Use the common API to write avc SPS/PPS/SEI info on SNB/IVY/HSW
authorZhao Yakui <yakui.zhao@intel.com>
Mon, 24 Sep 2012 21:20:44 +0000 (17:20 -0400)
committerXiang, Haihao <haihao.xiang@intel.com>
Tue, 23 Oct 2012 05:50:28 +0000 (13:50 +0800)
This is to remove the dup code.

Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
src/gen6_mfc.c
src/gen6_mfc.h
src/gen6_mfc_common.c
src/gen75_mfc.c

index 59034be..09d1110 100644 (file)
@@ -619,82 +619,6 @@ static void gen6_mfc_init(VADriverContextP ctx, struct intel_encoder_context *en
     i965_gpe_context_init(ctx, &mfc_context->gpe_context);
 }
 
-static void gen6_mfc_avc_pipeline_header_programing(VADriverContextP ctx,
-                                                    struct encode_state *encode_state,
-                                                    struct intel_encoder_context *encoder_context,
-                                                    struct intel_batchbuffer *slice_batch)
-{
-    struct gen6_mfc_context *mfc_context = encoder_context->mfc_context;
-    int idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_SPS);
-
-    if (encode_state->packed_header_data[idx]) {
-        VAEncPackedHeaderParameterBuffer *param = NULL;
-        unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer;
-        unsigned int length_in_bits;
-
-        assert(encode_state->packed_header_param[idx]);
-        param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer;
-        length_in_bits = param->bit_length;
-
-        mfc_context->insert_object(ctx,
-                                   encoder_context,
-                                   header_data,
-                                   ALIGN(length_in_bits, 32) >> 5,
-                                   length_in_bits & 0x1f,
-                                   5,   /* FIXME: check it */
-                                   0,
-                                   0,
-                                   !param->has_emulation_bytes,
-                                   slice_batch);
-    }
-
-    idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_PPS);
-
-    if (encode_state->packed_header_data[idx]) {
-        VAEncPackedHeaderParameterBuffer *param = NULL;
-        unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer;
-        unsigned int length_in_bits;
-
-        assert(encode_state->packed_header_param[idx]);
-        param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer;
-        length_in_bits = param->bit_length;
-
-        mfc_context->insert_object(ctx,
-                                   encoder_context,
-                                   header_data,
-                                   ALIGN(length_in_bits, 32) >> 5,
-                                   length_in_bits & 0x1f,
-                                   5, /* FIXME: check it */
-                                   0,
-                                   0,
-                                   !param->has_emulation_bytes,
-                                   slice_batch);
-    }
-    
-    idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_SEI);
-
-    if (encode_state->packed_header_data[idx]) {
-        VAEncPackedHeaderParameterBuffer *param = NULL;
-        unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer;
-        unsigned int length_in_bits;
-
-        assert(encode_state->packed_header_param[idx]);
-        param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer;
-        length_in_bits = param->bit_length;
-
-        mfc_context->insert_object(ctx,
-                                   encoder_context,
-                                   header_data,
-                                   ALIGN(length_in_bits, 32) >> 5,
-                                   length_in_bits & 0x1f,
-                                   5, /* FIXME: check it */
-                                   0,
-                                   0,
-                                   !param->has_emulation_bytes,
-                                   slice_batch);
-    }
-}
-
 static void gen6_mfc_avc_pipeline_picture_programing( VADriverContextP ctx,
                                       struct encode_state *encode_state,
                                       struct intel_encoder_context *encoder_context)
@@ -1040,7 +964,7 @@ gen6_mfc_avc_pipeline_slice_programing(VADriverContextP ctx,
                              (rate_control_mode == VA_RC_CBR), qp, slice_batch);
 
     if ( slice_index == 0) 
-        gen6_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch);
+        intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch);
 
     slice_header_length_in_bits = build_avc_slice_header(pSequenceParameter, pPicParameter, pSliceParameter, &slice_header);
 
@@ -1420,7 +1344,7 @@ gen6_mfc_avc_batchbuffer_slice(VADriverContextP ctx,
                              slice_batch);
 
     if (slice_index == 0)
-        gen6_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch);
+        intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch);
 
     slice_header_length_in_bits = build_avc_slice_header(pSequenceParameter, pPicParameter, pSliceParameter, &slice_header);
 
index d458d10..45423fe 100644 (file)
@@ -250,4 +250,9 @@ extern int intel_mfc_interlace_check(VADriverContextP ctx,
 
 extern void intel_mfc_brc_prepare(struct encode_state *encode_state,
                           struct intel_encoder_context *encoder_context);
+
+extern void intel_mfc_avc_pipeline_header_programing(VADriverContextP ctx,
+                                                    struct encode_state *encode_state,
+                                                    struct intel_encoder_context *encoder_context,
+                                                    struct intel_batchbuffer *slice_batch);
 #endif /* _GEN6_MFC_BCS_H_ */
index f0dabe1..83f2792 100644 (file)
@@ -386,3 +386,79 @@ void intel_mfc_brc_prepare(struct encode_state *encode_state,
     }
 }
 
+void intel_mfc_avc_pipeline_header_programing(VADriverContextP ctx,
+                                                    struct encode_state *encode_state,
+                                                    struct intel_encoder_context *encoder_context,
+                                                    struct intel_batchbuffer *slice_batch)
+{
+    struct gen6_mfc_context *mfc_context = encoder_context->mfc_context;
+    int idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_SPS);
+
+    if (encode_state->packed_header_data[idx]) {
+        VAEncPackedHeaderParameterBuffer *param = NULL;
+        unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer;
+        unsigned int length_in_bits;
+
+        assert(encode_state->packed_header_param[idx]);
+        param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer;
+        length_in_bits = param->bit_length;
+
+        mfc_context->insert_object(ctx,
+                                   encoder_context,
+                                   header_data,
+                                   ALIGN(length_in_bits, 32) >> 5,
+                                   length_in_bits & 0x1f,
+                                   5,   /* FIXME: check it */
+                                   0,
+                                   0,
+                                   !param->has_emulation_bytes,
+                                   slice_batch);
+    }
+
+    idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_PPS);
+
+    if (encode_state->packed_header_data[idx]) {
+        VAEncPackedHeaderParameterBuffer *param = NULL;
+        unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer;
+        unsigned int length_in_bits;
+
+        assert(encode_state->packed_header_param[idx]);
+        param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer;
+        length_in_bits = param->bit_length;
+
+        mfc_context->insert_object(ctx,
+                                   encoder_context,
+                                   header_data,
+                                   ALIGN(length_in_bits, 32) >> 5,
+                                   length_in_bits & 0x1f,
+                                   5, /* FIXME: check it */
+                                   0,
+                                   0,
+                                   !param->has_emulation_bytes,
+                                   slice_batch);
+    }
+    
+    idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_SEI);
+
+    if (encode_state->packed_header_data[idx]) {
+        VAEncPackedHeaderParameterBuffer *param = NULL;
+        unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer;
+        unsigned int length_in_bits;
+
+        assert(encode_state->packed_header_param[idx]);
+        param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer;
+        length_in_bits = param->bit_length;
+
+        mfc_context->insert_object(ctx,
+                                   encoder_context,
+                                   header_data,
+                                   ALIGN(length_in_bits, 32) >> 5,
+                                   length_in_bits & 0x1f,
+                                   5, /* FIXME: check it */
+                                   0,
+                                   0,
+                                   !param->has_emulation_bytes,
+                                   slice_batch);
+    }
+}
+
index f558434..f15bd84 100644 (file)
@@ -1145,82 +1145,6 @@ gen75_mfc_avc_slice_state(VADriverContextP ctx,
 }
 
 
-static void gen75_mfc_avc_pipeline_header_programing(VADriverContextP ctx,
-                                                    struct encode_state *encode_state,
-                                                    struct intel_encoder_context *encoder_context,
-                                                    struct intel_batchbuffer *slice_batch)
-{
-    struct gen6_mfc_context *mfc_context = encoder_context->mfc_context;
-    int idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_SPS);
-
-    if (encode_state->packed_header_data[idx]) {
-        VAEncPackedHeaderParameterBuffer *param = NULL;
-        unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer;
-        unsigned int length_in_bits;
-
-        assert(encode_state->packed_header_param[idx]);
-        param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer;
-        length_in_bits = param->bit_length;
-
-        mfc_context->insert_object(ctx,
-                                   encoder_context,
-                                   header_data,
-                                   ALIGN(length_in_bits, 32) >> 5,
-                                   length_in_bits & 0x1f,
-                                   5,   /* FIXME: check it */
-                                   0,
-                                   0,
-                                   !param->has_emulation_bytes,
-                                   slice_batch);
-    }
-
-    idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_PPS);
-
-    if (encode_state->packed_header_data[idx]) {
-        VAEncPackedHeaderParameterBuffer *param = NULL;
-        unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer;
-        unsigned int length_in_bits;
-
-        assert(encode_state->packed_header_param[idx]);
-        param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer;
-        length_in_bits = param->bit_length;
-
-        mfc_context->insert_object(ctx,
-                                   encoder_context,
-                                   header_data,
-                                   ALIGN(length_in_bits, 32) >> 5,
-                                   length_in_bits & 0x1f,
-                                   5, /* FIXME: check it */
-                                   0,
-                                   0,
-                                   !param->has_emulation_bytes,
-                                   slice_batch);
-    }
-    
-    idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_SEI);
-
-    if (encode_state->packed_header_data[idx]) {
-        VAEncPackedHeaderParameterBuffer *param = NULL;
-        unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer;
-        unsigned int length_in_bits;
-
-        assert(encode_state->packed_header_param[idx]);
-        param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer;
-        length_in_bits = param->bit_length;
-
-        mfc_context->insert_object(ctx,
-                                   encoder_context,
-                                   header_data,
-                                   ALIGN(length_in_bits, 32) >> 5,
-                                   length_in_bits & 0x1f,
-                                   5, /* FIXME: check it */
-                                   0,
-                                   0,
-                                   !param->has_emulation_bytes,
-                                   slice_batch);
-    }
-}
-
 #ifdef MFC_SOFTWARE_HASWELL
 
 static int
@@ -1386,7 +1310,7 @@ gen75_mfc_avc_pipeline_slice_programing(VADriverContextP ctx,
                              (rate_control_mode == VA_RC_CBR), qp, slice_batch);
 
     if ( slice_index == 0) 
-        gen75_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch);
+        intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch);
 
     slice_header_length_in_bits = build_avc_slice_header(pSequenceParameter, pPicParameter, pSliceParameter, &slice_header);
 
@@ -1766,7 +1690,7 @@ gen75_mfc_avc_batchbuffer_slice(VADriverContextP ctx,
                              slice_batch);
 
     if (slice_index == 0)
-        gen75_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch);
+        intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch);
 
     slice_header_length_in_bits = build_avc_slice_header(pSequenceParameter, pPicParameter, pSliceParameter, &slice_header);