Now we can use "avcenc [options]" to use this program where options are: -help or -h -input <filename> or -i <filename> -output <filename> or -o <filename> -width <width> or -w <width> -height <height> or -h <height> -cqp <qpvalue> :use const qp mode -cbr <bitrate> :use const bitrate mode -fps <fps> or -f <fps> -i_frame_only :use i frames only -i_p_frame_only :use i and p frames -i_p_b_frame :use i, p and b frames -cavlc :use cavlc, default is to use cabac
Signed-off-by: Hai Lan <[email protected]> --- test/encode/avcenc.c | 157 ++++++++++++++++++++++++++++++++++---------------- 1 files changed, 108 insertions(+), 49 deletions(-) diff --git a/test/encode/avcenc.c b/test/encode/avcenc.c index a4f343f..d354fef 100644 --- a/test/encode/avcenc.c +++ b/test/encode/avcenc.c @@ -46,6 +46,9 @@ #define PROFILE_IDC_MAIN 77 #define PROFILE_IDC_HIGH 100 +#define TRUE 1 +#define FALSE 0 + #define CHECK_VASTATUS(va_status,func) \ if (va_status != VA_STATUS_SUCCESS) { \ fprintf(stderr,"%s:%s (%d) failed,exit\n", __func__, func, __LINE__); \ @@ -66,6 +69,12 @@ static int intra_period = 30; static int pb_period = 5; static int frame_bit_rate = -1; +static int use_cavlc = FALSE; +static int i_frame_only = FALSE; +static int i_p_frame_only = TRUE; +static int i_p_b_frame = FALSE; +static int fps = 30; + #define BR_CBR 0 #define BR_VBR 1 #define BR_CQP 2 @@ -1110,7 +1119,21 @@ static void encode_pb_pictures(FILE *yuv_fp, FILE *avc_fp, int f, int nbframes, static void show_help() { - printf("Usage: avnenc <width> <height> <input_yuvfile> <output_avcfile> [qp=qpvalue|fb=framebitrate] [mode=0(I frames only)/1(I and P frames)/2(I, P and B frames)\n"); + fprintf(stderr, "usage: %s [options]\n", "avcenc"); + fprintf(stderr, " where options are:\n"); + fprintf(stderr, " -help or -h\n"); + fprintf(stderr, " -input <filename> or -i <filename>\n"); + fprintf(stderr, " -output <filename> or -o <filename>\n"); + fprintf(stderr, " -width <width> or -w <width>\n"); + fprintf(stderr, " -height <height> or -h <height>\n"); + fprintf(stderr, " -cqp <qpvalue>\t:use const qp mode\n"); + fprintf(stderr, " -cbr <bitrate>\t:use const bitrate mode\n"); + fprintf(stderr, " -fps <fps> or -f <fps>\n"); + fprintf(stderr, " -i_frame_only\t\t:use i frames only \n"); + fprintf(stderr, " -i_p_frame_only\t:use i and p frames\n"); + fprintf(stderr, " -i_p_b_frame\t\t:use i, p and b frames\n"); + fprintf(stderr, " -cavlc\t\t:use cavlc, default is to use cabac\n"); + exit(1); } static void avcenc_context_seq_param_init(VAEncSequenceParameterBufferH264 *seq_param, @@ -1194,7 +1217,7 @@ static void avcenc_context_pic_param_init(VAEncPictureParameterBufferH264 *pic_p pic_param->pic_fields.bits.idr_pic_flag = 0; pic_param->pic_fields.bits.reference_pic_flag = 0; - pic_param->pic_fields.bits.entropy_coding_mode_flag = ENTROPY_MODE_CABAC; + pic_param->pic_fields.bits.entropy_coding_mode_flag = !use_cavlc; 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; @@ -1236,61 +1259,97 @@ int main(int argc, char *argv[]) int mode_value; struct timeval tpstart,tpend; float timeuse; + int i; //TODO may be we should using option analytics library - if(argc != 5 && argc != 6 && argc != 7) { - show_help(); - return -1; - } + if (argc<9) { + fprintf(stderr, "You must specify input/output/width/height at least\n"); + show_help(); + } + + for (i = 1; i < argc; i++) { + if (!strcmp("-help", argv[i])) { + show_help(); + continue; + } + if (!strcmp ("-input", argv[i]) || !strcmp ("-i", argv[i])) { + if (++i>=argc) show_help(); + yuv_fp = fopen(argv[i],"rb"); + continue; + } + if (!strcmp ("-output", argv[i]) || !strcmp ("-o", argv[i])) { + if (++i>=argc) show_help(); + avc_fp = fopen(argv[i], "wb"); + continue; + } + if (!strcmp ("-cqp", argv[i])) { + if (++i>=argc) show_help(); + if (sscanf (argv[i], "%d",&qp_value) != 1) + show_help(); + if (qp_value > 51) { + qp_value = 51; + } else if (qp_value < 0) { + qp_value = 0; + } + frame_bit_rate = -1; + continue; + } + if (!strcmp ("-cbr", argv[i])) { + if (++i>=argc) show_help(); + if (sscanf (argv[i], "%d",&frame_bit_rate) != 1) + show_help(); + qp_value = -1; + continue; + } + if (!strcmp ("-width", argv[i]) || !strcmp ("-w", argv[i])) { + if (++i>=argc) show_help(); + if (sscanf (argv[i], "%d",&picture_width) != 1) + show_help(); + continue; + } + if (!strcmp ("-height", argv[i]) || !strcmp ("-h", argv[i])) { + if (++i>=argc) show_help(); + if (sscanf (argv[i], "%d",&picture_height) != 1) + show_help(); + continue; + } + if (!strcmp("-cavlc", argv[i])) { + use_cavlc = TRUE; + continue; + } + if (!strcmp("-i_frame_only", argv[i])) { + i_frame_only = TRUE; + i_p_frame_only = FALSE; + i_p_b_frame = FALSE; + continue; + } + if (!strcmp("-i_p_frame_only", argv[i])) { + i_frame_only = FALSE; + i_p_frame_only = TRUE; + i_p_b_frame = FALSE; + continue; + } + if (!strcmp("-i_p_b_frame", argv[i])) { + i_frame_only = FALSE; + i_p_frame_only = FALSE; + i_p_b_frame = TRUE; + continue; + } + if (!strcmp ("-fps", argv[i]) || !strcmp ("-f", argv[i])) { + if (++i>=argc) show_help(); + if (sscanf (argv[i], "%d",&fps) != 1) + show_help(); + continue; + } + } - picture_width = atoi(argv[1]); - picture_height = atoi(argv[2]); picture_width_in_mbs = (picture_width + 15) / 16; picture_height_in_mbs = (picture_height + 15) / 16; - if (argc == 6 || argc == 7) { - qp_value = -1; - sscanf(argv[5], "qp=%d", &qp_value); - if ( qp_value == -1 ) { - frame_bit_rate = -1; - sscanf(argv[5], "fb=%d", &frame_bit_rate); - if ( frame_bit_rate == -1 ) { - show_help(); - return -1; - } - } else if (qp_value > 51) { - qp_value = 51; - } else if (qp_value < 0) { - qp_value = 0; - } - } else - qp_value = 28; //default const QP mode - - if (argc == 7) { - sscanf(argv[6], "mode=%d", &mode_value); - if ( mode_value == 0 ) { - i_frame_only = 1; - i_p_frame_only = 0; - } - else if ( mode_value == 1) { - i_frame_only = 0; - i_p_frame_only = 1; - } - else if ( mode_value == 2 ) { - i_frame_only = 0; - i_p_frame_only = 0; - } - else { - printf("mode_value=%d\n",mode_value); - show_help(); - return -1; - } - } - - yuv_fp = fopen(argv[3],"rb"); if ( yuv_fp == NULL){ printf("Can't open input YUV file\n"); return -1; } + fseek(yuv_fp,0l, SEEK_END); file_size = ftell(yuv_fp); frame_size = picture_width * picture_height + ((picture_width * picture_height) >> 1) ; @@ -1303,7 +1362,7 @@ int main(int argc, char *argv[]) frame_number = file_size / frame_size; fseek(yuv_fp, 0l, SEEK_SET); - avc_fp = fopen(argv[4], "wb"); + //avc_fp = fopen(argv[4], "wb"); if ( avc_fp == NULL) { fclose(yuv_fp); printf("Can't open output avc file\n"); -- 1.7.4.1 _______________________________________________ Libva mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libva
