📄 mvmain.c
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>
#include <windows.h>
#include "MVDecodec.h"/***************************************************************************** * Main program ****************************************************************************/int main(int argc, char *argv[]){ unsigned char *mp4_buffer = NULL;
unsigned char *mp4_ptr = NULL; unsigned char *out_buffer = NULL; int useful_bytes = 0,used_bytes = 0, tmp; int status = 0, width = 352, height = 288, num =0;
long out_len, buffer_len = 1024*1024, file_len;
long handle; FILE * fp, *fp_out;
SYSTEMTIME time1, time2;
double total_time = 0;
fp = fopen("D:\\video\\bitstream_samples\\foreman_cif3.m4v", "rb");
fseek(fp, 0,SEEK_END);
file_len = ftell(fp);
fseek(fp, 0, SEEK_SET);
fp_out = fopen("d:\\a.yuv","wb");
/* Memory for encoded mp4 stream */ mp4_buffer = (unsigned char *) malloc(buffer_len);
out_buffer = (unsigned char *) malloc(width * height * 3 / 2);
useful_bytes = fread(mp4_buffer, 1, buffer_len, fp);
mp4_ptr = mp4_buffer; if (!mp4_buffer) return 0; status = mavrix_mp4_dec_open((void **)&handle); if (status)
return 0; do
{ GetLocalTime(&time1);
used_bytes = mavrix_mp4_dec_decode((void *)handle, (void *)mp4_ptr, useful_bytes, (void *)out_buffer, &out_len); GetLocalTime(&time2);
tmp = (time2.wHour - time1.wHour) * 3600;
tmp += (time2.wMinute - time1.wMinute) * 60;
tmp += time2.wSecond - time1.wSecond;
tmp = tmp * 1000 + (time2.wMilliseconds - time1.wMilliseconds);
total_time = total_time + tmp;
printf("Frame NO: %d, time: %d\n", num++, tmp);
printf("fps:%f\n", 1000*num/total_time);
fwrite(out_buffer, 1, out_len, fp_out);
fflush(fp_out);
useful_bytes -= used_bytes;
memcpy(mp4_ptr, mp4_ptr + used_bytes, useful_bytes);
file_len -= used_bytes;
if(file_len < 1)
break;
tmp = buffer_len - useful_bytes;
useful_bytes += fread(mp4_ptr + useful_bytes, 1, tmp, fp);
}while(1);
return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -