why can't improve performance?
zzw6789 <[email protected]>
| Newsgroups | gmane.comp.video.xvid.user |
|---|---|
| Message-ID | <[email protected]> |
Hi,I'm use the xvid lib to encode and docode the mpeg4 stream, I read form a video file and encode video to mpeg stream, write the stream to a file, then I read from the encode file, decode form it to video file. In a VIA C3 500MHz processor, I can't get idea speed, wo I use a INTEL PIII 1000MHz do the same, I hope to improve the encode and decode speed! but I can't get much improve, the performance is only a little better. I attach the message of 2 result and my code for referrence!(the code I changed form the sample code of xvidcore lib). also I found some frame encodeing(or decoding) time is much longer than others! Can You tell me why, and hope you suggestion! thanks ! _______________________________________________ XviD-users mailing list [email protected] http://list.xvid.org/mailman/listinfo/xvid-users
xvid_codec.c
(text/x-csrc, 14.2 KB)
#include <stdio.h>
#include <time.h>
#include <xvid.h>
#include "xvid_codec.h"
//static int WIDTH=320;
//static int HEIGHT=240;
#define COLOR_DEPTH 16
#define FRAMERATE 25
/****************** XVID_ENC_PARAM const define ********************/
//#define WIDTH 640
//#define HEIGHT 480
#define WIDTH 320
#define HEIGHT 240
//#define WIDTH 160
//#define HEIGHT 120
//#define WIDTH 208
//#define HEIGHT 160
#define FINCR 1
#define FBASE FRAMERATE
#define RC_BITRATE (900*1000)
#define RC_REACTION_DELAY_FACTOR 16
#define RC_AVERAGING_PERIOD 100
#define RC_BUFFER 10
#define MINQUANTIZER 1
#define MAXQUANTIZER 31
#define MAX_KEY_INTERVAL (10 * FRAMERATE)
/****************** XVID_ENC_FRAME const define ********************/
#define QUANT 0
//#define COLORSPACE XVID_CSP_RGB24
#define COLORSPACE XVID_CSP_RGB565
#define INTRA -1
#define GENERAL XVID_H263QUANT | XVID_HALFPEL | XVID_INTER4V
#define MOTION PMV_EARLYSTOP16 | PMV_HALFPELREFINE16 | PMV_EARLYSTOP8 | PMV_HALFPELREFINE8
#define HINT_MODE_NONE 0
#define HINT_MODE_GET 1
#define HINT_MODE_SET 2
#define ABS_MAXFRAMENR 2000
#define BUFFER_SIZE (10*WIDTH*HEIGHT)
const int HINTMODE = HINT_MODE_NONE;
/*******************************************************************************
*xvid encoder initilization
*enc_handle: if success the void* stores the handle of encoder
******************************************************************************/
int xvid_encode_init(void** enc_handle)
{
int result;
XVID_INIT_PARAM xinit;
XVID_ENC_PARAM xparam;
xinit.cpu_flags = 0;
xvid_init(NULL, 0, &xinit, NULL);
xparam.width = WIDTH;
xparam.height = HEIGHT;
xparam.fincr = FINCR;
xparam.fbase = FBASE;
xparam.rc_reaction_delay_factor = RC_REACTION_DELAY_FACTOR;
xparam.rc_averaging_period = RC_AVERAGING_PERIOD;
xparam.rc_buffer = RC_BUFFER;
xparam.rc_bitrate = RC_BITRATE;
xparam.min_quantizer = MINQUANTIZER;
xparam.max_quantizer = MAXQUANTIZER;
xparam.max_key_interval = MAX_KEY_INTERVAL;
result = xvid_encore(NULL, XVID_ENC_CREATE, &xparam, NULL);
*enc_handle=xparam.handle;
return result;
}
/*******************************************************************************
* the function do encode
* use the created encoder encode one frame
* input param:
* enc_handle: encoder handle
* image: buffer store data to encode
* hints_buffer: used for Motoin Estimation
* out param:
* bitstream: buffer to store frame
* streamlength: the frame length
* frametype: is a Key frame or not
* hints_size: user for Motion Estimation
******************************************************************************/
int xvid_encode_do(void * enc_handle, unsigned char* image, \
unsigned char* bitstream,unsigned char* hints_buffer,\
long *streamlength, long *frametype, long *hints_size)
{
int result;
XVID_ENC_FRAME xframe;
XVID_ENC_STATS xstats;
xframe.bitstream = bitstream;
xframe.length = -1;
xframe.image = image;
// xframe.colorspace = XVID_CSP_RGB24;
xframe.colorspace = COLORSPACE;
xframe.intra = -1; /* let the codec decide between I-frame (1) and P-frame (0) */
xframe.quant = QUANT; /* is quant != 0, use a fixed quant (and ignore bitrate) */
xframe.motion = MOTION;
xframe.general = GENERAL;
xframe.quant_intra_matrix = xframe.quant_inter_matrix = NULL;
xframe.hint.hintstream = hints_buffer;
if(HINTMODE == HINT_MODE_SET) {
xframe.hint.hintlength = *hints_size;
xframe.hint.rawhints = 0;
xframe.general |= XVID_HINTEDME_SET;
}
if(HINTMODE == HINT_MODE_GET) {
xframe.hint.rawhints = 0;
xframe.general |= XVID_HINTEDME_GET;
}
result = xvid_encore(enc_handle, XVID_ENC_ENCODE, &xframe, &xstats);
if(HINTMODE == HINT_MODE_GET)
*hints_size = xframe.hint.hintlength;
*frametype = xframe.intra;
*streamlength = xframe.length;
return result;
}
/*******************************************************************************
* destroy the encoder instance
* enc_handle: the encoder to destroy
* retrun value:
* 0 if success ,non_zero error
******************************************************************************/
int xvid_encode_quit(void* enc_handle)
{
return xvid_encore(enc_handle, XVID_ENC_DESTROY, NULL, NULL);
}
/*******************************************************************************
*xvid encoder initilization
*enc_handle: if success the void* stores the handle of encoder
******************************************************************************/
int xvid_decode_init(void** dec_handle)
{
int result;
XVID_INIT_PARAM xinit;
XVID_DEC_PARAM xparam;
xinit.cpu_flags = 0;
xvid_init(NULL, 0, &xinit, NULL);
xparam.width = WIDTH;
xparam.height = HEIGHT;
result = xvid_decore(NULL, XVID_DEC_CREATE, &xparam, NULL);
*dec_handle = xparam.handle;
return result;
}
/*******************************************************************************
* the function do decode
* decode one frame
* input param:
* dec_handle: decoder handle
* istream: buffer store data to decode
* istream_size: size of frame to decode
* out param:
* ostream: buffer to store frame
* ostream_size: size of ostream
******************************************************************************/
int xvid_decode_do(void* dec_handle, unsigned char *istream,\
unsigned char *ostream, int istream_size, int *ostream_size)
{
int xerr;
XVID_DEC_FRAME xframe;
xframe.bitstream = istream;
xframe.length = istream_size;
xframe.image = ostream;
xframe.stride = WIDTH;
if(COLORSPACE == XVID_CSP_RGB24)
xframe.colorspace = XVID_CSP_RGB24 | XVID_CSP_VFLIP;
else
xframe.colorspace = COLORSPACE;
xerr = xvid_decore(dec_handle, XVID_DEC_DECODE, &xframe, NULL);
*ostream_size = xframe.length;
return xerr;
}
/*******************************************************************************
* destroy the decoder instance
* enc_handle: the decoder to destroy
* retrun value:
* 0 if success, non_zero error
******************************************************************************/
int xvid_decode_quit(void* dec_handle)
{
return xvid_decore(dec_handle, XVID_DEC_DESTROY, NULL, NULL);
}
/***************************** code for test **********************************/
#ifdef XVID_CODEC_TEST
/* Return time elapsed time in miliseconds since the program started */
double msecond()
{
clock_t clk;
clk = clock();
return (double)clk * 1000 / CLOCKS_PER_SEC;
}
int main_encode(void)
{
// char* srcfm = "/hdb1/test/rgb565_160x120.data";
// char* encodefm = "/hdb1/test/rgb565_160x120.m4v";
// char* srcfm = "/hdb1/test/rgb565_208x160.data";
// char* encodefm = "/hdb1/test/rgb565_208x160.m4v";
char* srcfm = "/hdb1/test/rgb565_320x240.data";
char* encodefm = "/hdb1/test/rgb565_320x240.m4v";
// char* srcfm = "/hdb1/test/rgb565_640x480.data";
// char* encodefm = "/hdb1/test/encode_rgb565_640x480.m4v";
FILE* srcfile;
FILE* encodefile;
unsigned char* src_buffer;
unsigned char* mp4_buffer;
unsigned char* hint_buffer;
void* enc_handle = NULL;
long totalsize;
long hint_size = 0;
long frame_type;
int result;
long m4v_size;
int filenr = 0;
double enctime;
double totalenctime=0.;
srcfile = fopen(srcfm, "r");
if (srcfile == NULL)
{
fprintf(stderr, "Error opening input file %s\n", encodefile);
goto release_all;
}
encodefile = fopen(encodefm, "w");
if (srcfile == NULL)
{
fprintf(stderr, "Error opening input file %s\n", encodefile);
goto release_all;
}
// src_buffer = (unsigned char *) malloc(HEIGHT*WIDTH*3);
src_buffer = (unsigned char *) malloc(HEIGHT*WIDTH*COLOR_DEPTH/8);
if (!src_buffer)
{
fprintf(stderr, "malloc error!\n");
goto release_all;
}
/* this should really be enough memory ! */
// mp4_buffer = (unsigned char *) malloc(HEIGHT*WIDTH*3*2);
mp4_buffer = (unsigned char *) malloc(HEIGHT*WIDTH*COLOR_DEPTH/8*2);
if (!mp4_buffer)
{
fprintf(stderr, "malloc error!\n");
goto release_all;
}
// hint_buffer = (unsigned char*) malloc(HEIGHT*WIDTH*3*2);
hint_buffer = (unsigned char*) malloc(HEIGHT*WIDTH*COLOR_DEPTH/8*2);
if(!hint_buffer)
{
fprintf(stderr, "malloc hint_buffer error!\n");
goto release_all;
}
//init encoder
result = xvid_encode_init(&enc_handle);
if(enc_handle == NULL)
{
fprintf(stderr, "enc_handle NULL %d\n");
goto release_all;
}
if (result)
{
fprintf(stderr, "Encore INIT problem, return value %d\n", result);
goto release_all;
}
/*********************** Encoding loop *************************************/
totalsize = 0;
do {
// fread(src_buffer, 1, HEIGHT*WIDTH*3, srcfile);
fread(src_buffer, 1, HEIGHT*WIDTH*COLOR_DEPTH/8, srcfile);
/*********************** Encode and decode this frame **********************/
enctime = msecond();
result = xvid_encode_do(enc_handle ,src_buffer, mp4_buffer, hint_buffer,
&m4v_size, &frame_type, &hint_size);
enctime = msecond() - enctime;
totalenctime += enctime;
totalsize += m4v_size;
printf("Frame %5d: intra %1d, enctime=%6.1f ms, size=%6dbytes\n",
(int)filenr, (int)frame_type, (float)enctime, (int)m4v_size);
/* Write mp4 data */
fwrite(mp4_buffer, m4v_size, 1, encodefile);
filenr++;
} while (!feof(srcfile));
/******** Calculate totals and averages for output, print results *********/
totalsize /= filenr;
totalenctime /= filenr;
printf("Avg: enctime %5.2f ms, %5.2f fps, filesize %7d bytes\n",
totalenctime, 1000/totalenctime, (int)totalsize);
release_all:
if (enc_handle)
{
result = xvid_encode_quit(enc_handle);
if (result)
fprintf(stderr, "Encore RELEASE problem return value %d\n", result);
}
if(srcfile)
fclose(srcfile);
if(encodefile)
fclose(encodefile);
free_all_memory:
free(mp4_buffer);
free(src_buffer);
free(hint_buffer);
return 0;
}
int main_decode(void)
{
/* max number of frames */
// static char *ARG_INPUTFILE = "/hdb1/test/encode_rgb24_320x240.m4v";
static char *ARG_OUTPUTFILE = "/hdb1/test/rgb24_320x240.dec";
static char *ARG_INPUTFILE = "/hdb1/test/rgb565_320x240.m4v";
// static char *ARG_OUTPUTFILE = "/hdb1/test/rgb565_320x240.dec";
// static char *ARG_INPUTFILE = "/hdb1/test/rgb565_160x120.m4v";
// static char *ARG_OUTPUTFILE = "/hdb1/test/rgb565_160x120.dec";
// static char *ARG_INPUTFILE = "/hdb1/test/rgb565_208x160.m4v";
// static char *ARG_OUTPUTFILE = "/hdb1/test/rgb565_208x160.dec";
void *dec_handle = NULL;
char* filepath = "./";
unsigned char *mp4_buffer = NULL;
unsigned char *mp4_ptr = NULL;
unsigned char *out_buffer = NULL;
int bigendian = 0;
double totaldectime;
long totalsize;
int status;
int use_assembler = 0;
char filename[256];
FILE *in_file;
FILE *out_file;
int filenr;
int i = 0;
in_file = fopen(ARG_INPUTFILE, "rb");
if (in_file == NULL) {
fprintf(stderr, "Error opening input file %s\n", ARG_INPUTFILE);
return -1;
}
out_file = fopen(ARG_OUTPUTFILE, "w");
if(out_file == NULL)
{
fprintf(stderr, "Error opening input file %s\n", ARG_INPUTFILE);
return -1;
}
/*****************************************************************************
* Memory allocation
****************************************************************************/
/* Memory for encoded mp4 stream */
mp4_buffer = (unsigned char *) malloc(BUFFER_SIZE);
mp4_ptr = mp4_buffer;
if (!mp4_buffer)
goto free_all_memory;
/* Memory for frame output */
out_buffer = (unsigned char *) malloc(WIDTH*HEIGHT*4);
if (!out_buffer)
goto free_all_memory;
/*****************************************************************************
* XviD PART Start
****************************************************************************/
// status = dec_init(&dec_handle);
status = xvid_decode_init(&dec_handle);
if (status) {
fprintf(stderr,
"Decore INIT problem, return value %d\n", status);
goto release_all;
}
/*****************************************************************************
* Main loop
****************************************************************************/
fread(mp4_buffer, BUFFER_SIZE, 1, in_file);
totaldectime = 0;
totalsize = 0;
filenr = 0;
mp4_ptr = mp4_buffer;
do {
int mp4_size = (mp4_buffer + BUFFER_SIZE - mp4_ptr);
int used_bytes = 0;
double dectime;
/* Read data from input file */
/* Real raw stream */
/* buffer more than half empty -> Fill it */
if (mp4_ptr > mp4_buffer + BUFFER_SIZE/2) {
int rest = (mp4_buffer + BUFFER_SIZE - mp4_ptr);
/* Move data if needed */
if (rest)
memcpy(mp4_buffer, mp4_ptr, rest);
/* Update mp4_ptr */
mp4_ptr = mp4_buffer;
/* read new data */
if(feof(in_file))
break;
fread(mp4_buffer + rest, BUFFER_SIZE - rest, 1, in_file);
}
/* Decode frame */
dectime = msecond();
// status = dec_main(mp4_ptr, out_buffer, mp4_size, &used_bytes);
status = xvid_decode_do(dec_handle, mp4_ptr, out_buffer, mp4_size, &used_bytes);
dectime = msecond() - dectime;
if (status) {
break;
}
/*
* Only needed for real raw stream, mp4u uses
* mp4_ptr = mp4_buffer for each frame
*/
mp4_ptr += used_bytes;
/* Updated data */
totalsize += used_bytes;
totaldectime += dectime;
/* Prints some decoding stats */
printf("Frame %5d: dectime =%6.1f ms length=%7d bytes \n",
filenr, dectime, used_bytes);
/* Save output frame if required */
fwrite(out_buffer, 1, WIDTH*HEIGHT*COLOR_DEPTH/8, out_file);
filenr++;
} while ( (status>=0) && (filenr<=1000) );
// } while ( (status>=0) && (filenr<ABS_MAXFRAMENR) );
// Calculate totals and averages for output, print results
totalsize /= filenr;
totaldectime /= filenr;
printf("Avg: dectime %5.2f ms, %5.2f fps, mp4 stream size =%d\n",
totaldectime, 1000/totaldectime, (int)totalsize);
// XviD PART Stop
release_all:
if (dec_handle) {
// status = dec_stop();
status = xvid_decode_quit(dec_handle);
if (status)
fprintf(stderr, "decore RELEASE problem return value %d\n", status);
}
fclose(out_file);
free_all_memory:
free(out_buffer);
free(mp4_buffer);
return 0;
}
int main(int argc, char** argv)
{
printf("now exec encode\n");
main_encode();
printf("exec encode OK!\n now exec decode\n");
main_decode();
printf("exec decode OK!\n");
return 0;
}
#endif //XVID_CODEC_TEST
xvid_codec.h
(text/x-chdr, 542 B)
#ifndef __XVID_CODEC_H #define __XVID_CODEC_H int xvid_encode_init(void** enc_handle); int xvid_encode_do(void * enc_handle, unsigned char* image, \ unsigned char* bitstream, unsigned char* hints_buffer,\ long *streamlength, long *frametype, long *hints_size); int xvid_encode_quit(void* enc_handle); int xvid_decode_init(void** dec_hangle); int xvid_decode_do(void* dec_handle, unsigned char *istream, \ unsigned char *ostream, int istream_size, int *ostream_size); int xvid_decode_quit(void* dec_handle); #endif //__XVID_CODEC_H
intel_PIII-1000MHz.txt
(text/plain, 4.2 KB)
now exec encode Frame 0: intra 1, enctime= 60.0 ms, size= 10675bytes Frame 1: intra 0, enctime= 60.0 ms, size= 5299bytes Frame 2: intra 0, enctime= 60.0 ms, size= 3187bytes rame 44: intra 0, enctime= 50.0 ms, size= 5186bytes Frame 45: intra 0, enctime= 40.0 ms, size= 2395bytes Frame 46: intra 0, enctime= 100.0 ms, size= 5434bytes Frame 47: intra 0, enctime= 40.0 ms, size= 2293bytes Frame 48: intra 0, enctime= 90.0 ms, size= 5347bytes Frame 49: intra 0, enctime= 50.0 ms, size= 4709bytes Frame 50: intra 0, enctime= 50.0 ms, size= 4988bytes Frame 51: intra 0, enctime= 50.0 ms, size= 2292bytes Frame 52: intra 0, enctime= 100.0 ms, size= 5056bytes Frame 53: intra 0, enctime= 50.0 ms, size= 4727bytes Frame 54: intra 0, enctime= 90.0 ms, size= 4977bytes Frame 55: intra 0, enctime= 50.0 ms, size= 4802bytes Frame 56: intra 0, enctime= 70.0 ms, size= 2373bytes Frame 57: intra 0, enctime= 50.0 ms, size= 5094bytes Frame 58: intra 0, enctime= 100.0 ms, size= 4731bytes Frame 59: intra 0, enctime= 40.0 ms, size= 4775bytes Frame 60: intra 0, enctime= 60.0 ms, size= 4864bytes Frame 61: intra 0, enctime= 50.0 ms, size= 4662bytes Frame 62: intra 0, enctime= 70.0 ms, size= 2402bytes Frame 63: intra 0, enctime= 40.0 ms, size= 5088bytes Frame 64: intra 0, enctime= 90.0 ms, size= 4929bytes Frame 65: intra 0, enctime= 50.0 ms, size= 4752bytes rame 761: intra 0, enctime= 50.0 ms, size= 3590bytes Frame 762: intra 0, enctime= 100.0 ms, size= 4654bytes Frame 763: intra 0, enctime= 60.0 ms, size= 3548bytes Frame 764: intra 0, enctime= 100.0 ms, size= 6009bytes Frame 765: intra 0, enctime= 60.0 ms, size= 4009bytes Frame 766: intra 0, enctime= 90.0 ms, size= 6594bytes Frame 767: intra 0, enctime= 60.0 ms, size= 5369bytes Frame 768: intra 0, enctime= 100.0 ms, size= 3535bytes rame 999: intra 0, enctime= 50.0 ms, size= 6364bytes Frame 1000: intra 0, enctime= 40.0 ms, size= 51bytes Avg: enctime 67.25 ms, 14.87 fps, filesize 4500 bytes exec encode OK! now exec decode Frame 0: dectime = 10.0 ms length= 10670 bytes Frame 1: dectime = 10.0 ms length= 5299 bytes Frame 2: dectime = 0.0 ms length= 3187 bytes Frame 3: dectime = 10.0 ms length= 2077 bytes Frame 4: dectime = 10.0 ms length= 3179 bytes Frame 5: dectime = 10.0 ms length= 1881 bytes Frame 6: dectime = 10.0 ms length= 2875 bytes Frame 7: dectime = 0.0 ms length= 3149 bytes Frame 8: dectime = 10.0 ms length= 2625 bytes Frame 9: dectime = 10.0 ms length= 6337 bytes rame 317: dectime = 0.0 ms length= 5193 bytes Frame 318: dectime = 0.0 ms length= 5342 bytes Frame 319: dectime = 0.0 ms length= 4932 bytes Frame 320: dectime = 0.0 ms length= 2298 bytes Frame 321: dectime = 10.0 ms length= 5543 bytes Frame 322: dectime = 10.0 ms length= 4644 bytes Frame 323: dectime = 10.0 ms length= 4852 bytes Frame 324: dectime = 10.0 ms length= 4755 bytes Frame 325: dectime = 10.0 ms length= 2402 bytes Frame 326: dectime = 130.0 ms length= 5067 bytes Frame 327: dectime = 460.0 ms length= 4730 bytes Frame 328: dectime = 410.0 ms length= 4879 bytes Frame 329: dectime = 460.0 ms length= 4858 bytes Frame 330: dectime = 400.0 ms length= 4865 bytes Frame 331: dectime = 390.0 ms length= 2615 bytes Frame 332: dectime = 390.0 ms length= 5275 bytes Frame 333: dectime = 460.0 ms length= 4571 bytes Frame 334: dectime = 440.0 ms length= 4764 bytes Frame 335: dectime = 450.0 ms length= 4661 bytes Frame 336: dectime = 170.0 ms length= 2351 bytes Frame 337: dectime = 460.0 ms length= 4920 bytes Frame 338: dectime = 350.0 ms length= 4553 bytes Frame 339: dectime = 440.0 ms length= 4563 bytes Frame 340: dectime = 140.0 ms length= 4756 bytes Frame 341: dectime = 10.0 ms length= 4621 bytes Frame 342: dectime = 10.0 ms length= 4623 bytes rame 940: dectime = 10.0 ms length= 2121 bytes Frame 941: dectime = 10.0 ms length= 5892 bytes Avg: dectime 32.31 ms, 30.95 fps, mp4 stream size =4502 exec decode OK!
via_c3_500MHz.txt
(text/plain, 2.5 KB)
now exec encode Frame 0: intra 1, enctime= 30.0 ms, size= 10666bytes Frame 1: intra 0, enctime= 70.0 ms, size= 5297bytes Frame 2: intra 0, enctime= 60.0 ms, size= 3193bytes Frame 31: intra 0, enctime= 50.0 ms, size= 2350bytes Frame 32: intra 0, enctime= 50.0 ms, size= 5699bytes Frame 33: intra 0, enctime= 50.0 ms, size= 2293bytes Frame 34: intra 0, enctime= 110.0 ms, size= 5837bytes Frame 35: intra 0, enctime= 50.0 ms, size= 5248bytes Frame 36: intra 0, enctime= 40.0 ms, size= 2483bytes Frame 37: intra 0, enctime= 100.0 ms, size= 5706bytes Frame 38: intra 0, enctime= 50.0 ms, size= 5289bytes Frame 39: intra 0, enctime= 50.0 ms, size= 2365bytes Frame 40: intra 0, enctime= 50.0 ms, size= 4164bytes Frame 41: intra 0, enctime= 50.0 ms, size= 6209bytes Frame 42: intra 0, enctime= 50.0 ms, size= 3577bytes Frame 43: intra 0, enctime= 110.0 ms, size= 5639bytes Frame 44: intra 0, enctime= 50.0 ms, size= 5140bytes Frame 45: intra 0, enctime= 50.0 ms, size= 2389bytes Frame 46: intra 0, enctime= 50.0 ms, size= 5402bytes Frame 47: intra 0, enctime= 100.0 ms, size= 2314bytes Frame 48: intra 0, enctime= 50.0 ms, size= 5355bytes Frame 49: intra 0, enctime= 100.0 ms, size= 4705bytes Frame 50: intra 0, enctime= 50.0 ms, size= 5017bytes Frame 51: intra 0, enctime= 40.0 ms, size= 2255bytes Frame 52: intra 0, enctime= 50.0 ms, size= 5060bytes Frame 53: intra 0, enctime= 50.0 ms, size= 4718bytes Frame 54: intra 0, enctime= 50.0 ms, size= 4935bytes Frame 55: intra 0, enctime= 50.0 ms, size= 4793bytes rame 999: intra 0, enctime= 50.0 ms, size= 3211bytes Frame 1000: intra 1, enctime= 40.0 ms, size= 13857bytes Avg: enctime 66.75 ms, 14.98 fps, filesize 4512 bytes exec encode OK! now exec decode Frame 0: dectime = 30.0 ms length= 10661 bytes Frame 1: dectime = 30.0 ms length= 5297 bytes rame 658: dectime = 50.0 ms length= 3358 bytes Frame 659: dectime = 80.0 ms length= 5781 bytes rame 935: dectime = 30.0 ms length= 6216 bytes Frame 936: dectime = 30.0 ms length= 5164 bytes Frame 937: dectime = 20.0 ms length= 3123 bytes Frame 938: dectime = 30.0 ms length= 5905 bytes Frame 939: dectime = 20.0 ms length= 2226 bytes Frame 940: dectime = 20.0 ms length= 3698 bytes Frame 941: dectime = 20.0 ms length= 2828 bytes Frame 942: dectime = 20.0 ms length= 6021 bytes Avg: dectime 22.95 ms, 43.58 fps, mp4 stream size =4502 exec decode OK!