mpeg2enc: find the right frame_rate_code
[profile/ivi/libva.git] / test / encode / mpeg2enc.c
index 783d49f..a605622 100644 (file)
@@ -100,7 +100,7 @@ struct mpeg2enc_context {
     VABufferID packed_seq_buf_id;
     VABufferID packed_pic_header_param_buf_id;
     VABufferID packed_pic_buf_id;
-    int num_slices;
+    int num_slice_groups;
     int codedbuf_i_size;
     int codedbuf_pb_size;
 
@@ -233,6 +233,7 @@ find_frame_rate_code(const VAEncSequenceParameterBufferMPEG2 *seq_param)
 
         if (abs(1000 * frame_rate_tab[i].value - 1000 * frame_rate_value) < delta) {
             code = frame_rate_tab[i].code;
+            delta = abs(1000 * frame_rate_tab[i].value - 1000 * frame_rate_value);
         }
     }
 
@@ -832,12 +833,13 @@ mpeg2enc_update_slice_parameter(struct mpeg2enc_context *ctx, VAEncPictureType p
     seq_param = &ctx->seq_param;
     width_in_mbs = (seq_param->picture_width + 15) / 16;
     height_in_mbs = (seq_param->picture_height + 15) / 16;
+    ctx->num_slice_groups = 1;
 
     for (i = 0; i < height_in_mbs; i++) {
         slice_param = &ctx->slice_param[i];
         slice_param->macroblock_address = i * width_in_mbs;
         slice_param->num_macroblocks = width_in_mbs;
-        slice_param->is_intra_slice = 0;
+        slice_param->is_intra_slice = (picture_type == VAEncPictureTypeIntra);
         slice_param->quantiser_scale_code = ctx->qp / 2;
     }
 
@@ -849,8 +851,6 @@ mpeg2enc_update_slice_parameter(struct mpeg2enc_context *ctx, VAEncPictureType p
                                ctx->slice_param,
                                ctx->slice_param_buf_id);
     CHECK_VASTATUS(va_status, "vaCreateBuffer");;
-
-    ctx->num_slices = height_in_mbs;
 }
 
 static int 
@@ -974,7 +974,7 @@ mpeg2enc_render_picture(struct mpeg2enc_context *ctx)
     va_status = vaRenderPicture(ctx->va_dpy,
                                 ctx->context_id,
                                 &ctx->slice_param_buf_id[0],
-                                ctx->num_slices);
+                                ctx->num_slice_groups);
     CHECK_VASTATUS(va_status,"vaRenderPicture");
 
     va_status = vaEndPicture(ctx->va_dpy, ctx->context_id);
@@ -1030,10 +1030,10 @@ end_picture(struct mpeg2enc_context *ctx, VAEncPictureType picture_type, int nex
     mpeg2enc_destroy_buffers(ctx, &ctx->packed_seq_buf_id, 1);
     mpeg2enc_destroy_buffers(ctx, &ctx->packed_pic_header_param_buf_id, 1);
     mpeg2enc_destroy_buffers(ctx, &ctx->packed_pic_buf_id, 1);
-    mpeg2enc_destroy_buffers(ctx, &ctx->slice_param_buf_id[0], ctx->num_slices);
+    mpeg2enc_destroy_buffers(ctx, &ctx->slice_param_buf_id[0], ctx->num_slice_groups);
     mpeg2enc_destroy_buffers(ctx, &ctx->codedbuf_buf_id, 1);
     memset(ctx->slice_param, 0, sizeof(ctx->slice_param));
-    ctx->num_slices = 0;
+    ctx->num_slice_groups = 0;
 }
 
 static int