From ee6b6012b55a79178abe2b63f32962ac1cf6a625 Mon Sep 17 00:00:00 2001 From: "Xiang, Haihao" Date: Mon, 26 Nov 2012 15:23:40 +0800 Subject: [PATCH] mpeg2enc: insert picture header for each picture Signed-off-by: Xiang, Haihao --- test/encode/mpeg2enc.c | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/test/encode/mpeg2enc.c b/test/encode/mpeg2enc.c index ddb932a..f5f9b46 100644 --- a/test/encode/mpeg2enc.c +++ b/test/encode/mpeg2enc.c @@ -871,6 +871,9 @@ begin_picture(struct mpeg2enc_context *ctx, { VAStatus va_status; int tmp; + VAEncPackedHeaderParameterBuffer packed_header_param_buffer; + unsigned int length_in_bits; + unsigned char *packed_seq_buffer = NULL, *packed_pic_buffer = NULL; if (ctx->upload_thread_value != 0) { fprintf(stderr, "FATAL error!!!\n"); @@ -885,10 +888,6 @@ begin_picture(struct mpeg2enc_context *ctx, ctx->current_upload_surface = tmp; if (coded_order == 0) { - VAEncPackedHeaderParameterBuffer packed_header_param_buffer; - unsigned int length_in_bits; - unsigned char *packed_seq_buffer = NULL, *packed_pic_buffer = NULL; - assert(picture_type == VAEncPictureTypeIntra); length_in_bits = build_packed_seq_buffer(&ctx->seq_param, &packed_seq_buffer); packed_header_param_buffer.type = VAEncPackedHeaderMPEG2_SPS; @@ -908,28 +907,29 @@ begin_picture(struct mpeg2enc_context *ctx, &ctx->packed_seq_buf_id); CHECK_VASTATUS(va_status,"vaCreateBuffer"); - length_in_bits = build_packed_pic_buffer(&ctx->seq_param, &ctx->pic_param, &packed_pic_buffer); - packed_header_param_buffer.type = VAEncPackedHeaderMPEG2_PPS; - packed_header_param_buffer.has_emulation_bytes = 0; - packed_header_param_buffer.bit_length = length_in_bits; + free(packed_seq_buffer); + } - va_status = vaCreateBuffer(ctx->va_dpy, - ctx->context_id, - VAEncPackedHeaderParameterBufferType, - sizeof(packed_header_param_buffer), 1, &packed_header_param_buffer, - &ctx->packed_pic_header_param_buf_id); - CHECK_VASTATUS(va_status,"vaCreateBuffer"); + length_in_bits = build_packed_pic_buffer(&ctx->seq_param, &ctx->pic_param, &packed_pic_buffer); + packed_header_param_buffer.type = VAEncPackedHeaderMPEG2_PPS; + packed_header_param_buffer.has_emulation_bytes = 0; + packed_header_param_buffer.bit_length = length_in_bits; - va_status = vaCreateBuffer(ctx->va_dpy, - ctx->context_id, - VAEncPackedHeaderDataBufferType, - (length_in_bits + 7) / 8, 1, packed_pic_buffer, - &ctx->packed_pic_buf_id); - CHECK_VASTATUS(va_status,"vaCreateBuffer"); + va_status = vaCreateBuffer(ctx->va_dpy, + ctx->context_id, + VAEncPackedHeaderParameterBufferType, + sizeof(packed_header_param_buffer), 1, &packed_header_param_buffer, + &ctx->packed_pic_header_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); - free(packed_seq_buffer); - free(packed_pic_buffer); - } + va_status = vaCreateBuffer(ctx->va_dpy, + ctx->context_id, + VAEncPackedHeaderDataBufferType, + (length_in_bits + 7) / 8, 1, packed_pic_buffer, + &ctx->packed_pic_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + free(packed_pic_buffer); /* sequence parameter set */ VAEncSequenceParameterBufferMPEG2 *seq_param = &ctx->seq_param; -- 2.7.4