H264_encoding: Don't update the slice qp for CBR mode when finding packed slice_heade...
authorZhao, Yakui <yakui.zhao@intel.com>
Mon, 26 May 2014 00:40:15 +0000 (08:40 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Mon, 16 Jun 2014 03:53:35 +0000 (11:53 +0800)
Otherwise the slice qp is inconsistent and the encoding is incorrect.

Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
(cherry picked from commit 897527c30435202927e6cd05cd5189a710d02c91)

src/gen6_mfc.c
src/gen75_mfc.c
src/gen8_mfc.c

index f1b29b9..0a10054 100644 (file)
@@ -794,7 +794,8 @@ gen6_mfc_avc_pipeline_slice_programing(VADriverContextP ctx,
 
     if (rate_control_mode == VA_RC_CBR) {
         qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY;
-        pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
+        if (encode_state->slice_header_index[slice_index] == 0)
+            pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
     }
 
     /* only support for 8-bit pixel bit-depth */
@@ -1173,7 +1174,8 @@ gen6_mfc_avc_batchbuffer_slice(VADriverContextP ctx,
 
     if (rate_control_mode == VA_RC_CBR) {
         qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY;
-        pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
+        if (encode_state->slice_header_index[slice_index] == 0)
+            pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
     }
 
     /* only support for 8-bit pixel bit-depth */
index 1051dd5..2ff35af 100644 (file)
@@ -1172,7 +1172,8 @@ gen75_mfc_avc_pipeline_slice_programing(VADriverContextP ctx,
 
     if (rate_control_mode == VA_RC_CBR) {
         qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY;
-        pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
+        if (encode_state->slice_header_index[slice_index] == 0)
+            pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
     }
 
     /* only support for 8-bit pixel bit-depth */
@@ -1510,7 +1511,8 @@ gen75_mfc_avc_batchbuffer_slice(VADriverContextP ctx,
 
     if (rate_control_mode == VA_RC_CBR) {
         qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY;
-        pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
+        if (encode_state->slice_header_index[slice_index] == 0)
+            pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
     }
 
     /* only support for 8-bit pixel bit-depth */
index c86cf09..e3f07ad 100644 (file)
@@ -1036,7 +1036,8 @@ gen8_mfc_avc_pipeline_slice_programing(VADriverContextP ctx,
 
     if (rate_control_mode == VA_RC_CBR) {
         qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY;
-        pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
+        if (encode_state->slice_header_index[slice_index] == 0)
+            pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
     }
 
     /* only support for 8-bit pixel bit-depth */
@@ -1405,7 +1406,8 @@ gen8_mfc_avc_batchbuffer_slice(VADriverContextP ctx,
 
     if (rate_control_mode == VA_RC_CBR) {
         qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY;
-        pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
+        if (encode_state->slice_header_index[slice_index] == 0)
+            pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
     }
 
     /* only support for 8-bit pixel bit-depth */