From: Xiang, Haihao Date: Fri, 7 Sep 2012 08:52:22 +0000 (-0400) Subject: avcenc: Fix constraint flag X-Git-Tag: accepted/2.0/20130307.024053~28 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8ca148a36102a5728f0c4750e60168765ed21fbf;p=profile%2Fivi%2Flibva.git avcenc: Fix constraint flag This fixes the issue that the output file can't be play correctly by mplayer. Signed-off-by: Xiang, Haihao --- diff --git a/test/encode/avcenc.c b/test/encode/avcenc.c index 54761a5..a7e0575 100644 --- a/test/encode/avcenc.c +++ b/test/encode/avcenc.c @@ -109,6 +109,7 @@ upload_yuv_to_surface(FILE *yuv_fp, VASurfaceID surface_id); static struct { VAProfile profile; + int constraint_set_flag; VAEncSequenceParameterBufferH264 seq_param; VAEncPictureParameterBufferH264 pic_param; VAEncSliceParameterBufferH264 slice_param[MAX_SLICES]; @@ -805,10 +806,10 @@ static void sps_rbsp(bitstream *bs) profile_idc = PROFILE_IDC_MAIN; bitstream_put_ui(bs, profile_idc, 8); /* profile_idc */ - bitstream_put_ui(bs, 0, 1); /* constraint_set0_flag */ - bitstream_put_ui(bs, 1, 1); /* constraint_set1_flag */ - bitstream_put_ui(bs, 0, 1); /* constraint_set2_flag */ - bitstream_put_ui(bs, 0, 1); /* constraint_set3_flag */ + bitstream_put_ui(bs, !!(avcenc_context.constraint_set_flag & 1), 1); /* constraint_set0_flag */ + bitstream_put_ui(bs, !!(avcenc_context.constraint_set_flag & 2), 1); /* constraint_set1_flag */ + bitstream_put_ui(bs, !!(avcenc_context.constraint_set_flag & 4), 1); /* constraint_set2_flag */ + bitstream_put_ui(bs, !!(avcenc_context.constraint_set_flag & 8), 1); /* constraint_set3_flag */ bitstream_put_ui(bs, 0, 4); /* reserved_zero_4bits */ bitstream_put_ui(bs, seq_param->level_idc, 8); /* level_idc */ bitstream_put_ue(bs, seq_param->seq_parameter_set_id); /* seq_parameter_set_id */ @@ -1314,7 +1315,12 @@ static void avcenc_context_pic_param_init(VAEncPictureParameterBufferH264 *pic_p pic_param->pic_fields.bits.entropy_coding_mode_flag = ENTROPY_MODE_CABAC; pic_param->pic_fields.bits.weighted_pred_flag = 0; pic_param->pic_fields.bits.weighted_bipred_idc = 0; - pic_param->pic_fields.bits.transform_8x8_mode_flag = 1; + + if (avcenc_context.constraint_set_flag & 0x7) + pic_param->pic_fields.bits.transform_8x8_mode_flag = 0; + else + pic_param->pic_fields.bits.transform_8x8_mode_flag = 1; + pic_param->pic_fields.bits.deblocking_filter_control_present_flag = 1; } @@ -1323,6 +1329,24 @@ static void avcenc_context_init(int width, int height) int i; memset(&avcenc_context, 0, sizeof(avcenc_context)); avcenc_context.profile = VAProfileH264Main; + + switch (avcenc_context.profile) { + case VAProfileH264Baseline: + avcenc_context.constraint_set_flag |= (1 << 0); /* Annex A.2.1 */ + break; + + case VAProfileH264Main: + avcenc_context.constraint_set_flag |= (1 << 1); /* Annex A.2.2 */ + break; + + case VAProfileH264High: + avcenc_context.constraint_set_flag |= (1 << 3); /* Annex A.2.4 */ + break; + + default: + break; + } + avcenc_context.seq_param_buf_id = VA_INVALID_ID; avcenc_context.pic_param_buf_id = VA_INVALID_ID; avcenc_context.packed_seq_header_param_buf_id = VA_INVALID_ID;