📄 main.c
字号:
///// FrameExtractorFirst /////
///////////////////////////////////////
ret = FrameExtractorFirst(pCTX, fp);
num_filled = ExtractConfigStreamH263(pCTX, fp, outbuf, outbuf_size, &h263_conf);
for (i=0; i<num_frames_convert; i++) {
num_filled = NextFrameH263(pCTX, fp, outbuf, outbuf_size, &coding_type);
if (num_filled == 0)
break;
printf("\n{%02d}Num = %d,\t%d", i, num_filled, coding_type);
if (max_size < num_filled)
max_size = num_filled;
}
printf("\ni = %d, max_size = %d\n", i, max_size);
///////////////////////////////////////
///// FrameExtractorFinal /////
///////////////////////////////////////
free(outbuf);
fclose(fp);
fclose(fp2);
}
void h264test()
{
// LPCTSTR filename = TEXT("C:\\Program Files\\War-ftpd\\FTPRoot\\pub\\TestVectors\\h264_vectors\\Football(VGA)\\fb_3000k.264");
// LPCTSTR filename = TEXT("walk_vga_vbr_1951k_25fps_daci264.avc");
LPCTSTR filename = TEXT("D:\\FTPRoot\\anonymous\\pub\\TestVectors\\H.264_BP\\Stream\\250_Allegro_BDWIDTH_CAVLC_B01_L30_SD480_5.7.26l");
int i, ret;
int num_filled, max_size = 0;
void *inp;
FILE *fp2;
FRAMEX_CTX *pCTX;
unsigned char *outbuf;
int outbuf_size;
H264_CONFIG_DATA h264_conf;
unsigned int coding_type;
unsigned char *delimiter = delimiter_h264;
inp = SSB_FILE_OPEN(filename);
if (inp == NULL) {
printf("[Error] %s file not found\n", filename);
return;
}
fp2 = fopen("out.264", "wb");
if (fp2 == NULL) {
printf("[Error] %s file not found\n", filename);
return;
}
outbuf = (unsigned char *) malloc(MAX_FRAME_SIZE);
outbuf_size = MAX_FRAME_SIZE;
//////////////////////////////////////
///// FrameExtractorInit /////
//////////////////////////////////////
pCTX = FrameExtractorInit(FRAMEX_IN_TYPE_SEL, delimiter, 4, 1);
///////////////////////////////////////
///// FrameExtractorFirst /////
///////////////////////////////////////
ret = FrameExtractorFirst(pCTX, inp);
num_filled = ExtractConfigStreamH264(pCTX, inp, outbuf, outbuf_size, &h264_conf);
fwrite(outbuf, 1, num_filled, fp2);
printf("\n[[ width, height ]] = (%d, %d)\n", h264_conf.width, h264_conf.height);
for (i=1; i<1000; i++) {
num_filled = NextFrameH264(pCTX, inp, outbuf, outbuf_size, &coding_type);
if (num_filled == 0) {
break;
SSB_FILE_REWIND(inp);
FrameExtractorFirst(pCTX, inp);
num_filled = NextFrameH264(pCTX, inp, outbuf, outbuf_size, &coding_type);
}
fwrite(outbuf, 1, num_filled, fp2);
printf("\n{%02d}Num = %d,\t%d", i, num_filled, coding_type);
if (max_size < num_filled)
max_size = num_filled;
}
printf("\ni = %d, max_size = %d\n", i, max_size);
///////////////////////////////////////
///// FrameExtractorFinal /////
///////////////////////////////////////
free(outbuf);
SSB_FILE_CLOSE(inp);
fclose(fp2);
}
void vc1test()
{
LPCTSTR filename = TEXT("D:\\Temp\\VC1抛胶飘氦磐\\003_comdex_wmv9_cbr_0_one-pass_simple_progressive_0_0_0_3_0_0_58000bps_176x144_10fps_64kbps_44khz_s.rcv");
int i;
int num_filled, acc_size, max_size = 0;
void *fp;
unsigned char *outbuf;
int outbuf_size;
VC1_CONFIG_DATA vc1_conf_data;
fp = SSB_FILE_OPEN(filename);
if (fp == NULL) {
printf("[Error] %s file not found\n", filename);
return;
}
acc_size = 0;
outbuf = (unsigned char *) malloc(MAX_FRAME_SIZE);
outbuf_size = MAX_FRAME_SIZE;
num_filled = ExtractConfigStreamVC1(fp, outbuf, outbuf_size, &vc1_conf_data);
if (max_size < num_filled)
max_size = num_filled;
acc_size += num_filled;
for (i=0; i<4000; i++) {
num_filled = NextFrameVC1(fp, outbuf, outbuf_size, NULL);
if (num_filled == 0)
break;
acc_size += num_filled;
printf("\n[%d] Num = %d,\tAcc = %d", i+1, num_filled, acc_size);
if (max_size < num_filled)
max_size = num_filled;
}
printf("\ni = %d, max_size = %d\n", i, max_size);
///////////////////////////////////////
///// FrameExtractorFinal /////
///////////////////////////////////////
free(outbuf);
SSB_FILE_CLOSE(fp);
}
static int h264_parsing_test(LPCTSTR filename)
{
int i; // Loop counter
int nFrames, nLoop;
int ret, iRet;
int num_filled, max_size = 0;
void *inp;
FRAMEX_CTX *pCTX;
unsigned char *outbuf;
int outbuf_size;
H264_CONFIG_DATA h264_conf;
unsigned int coding_type;
unsigned char *delimiter = delimiter_h264;
inp = SSB_FILE_OPEN(filename);
if (inp == NULL) {
printf("[Error] %s file not found\n", filename);
return -1;
}
outbuf = (unsigned char *) malloc(MAX_FRAME_SIZE);
outbuf_size = MAX_FRAME_SIZE;
//////////////////////////////////////
///// FrameExtractorInit /////
//////////////////////////////////////
pCTX = FrameExtractorInit(FRAMEX_IN_TYPE_SEL, delimiter, 4, 1);
///////////////////////////////////////
///// FrameExtractorFirst /////
///////////////////////////////////////
ret = FrameExtractorFirst(pCTX, inp);
num_filled = ExtractConfigStreamH264(pCTX, inp, outbuf, outbuf_size, &h264_conf);
printf("\n----------------------------");
printf("\n- Filename : %s", filename);
printf("\n[[ width, height ]] = (%d, %d)\n", h264_conf.width, h264_conf.height);
for (nFrames=0, nLoop=0; nLoop<2 ; nFrames++) {
num_filled = NextFrameH264(pCTX, inp, outbuf, outbuf_size, &coding_type);
if (num_filled == 0) {
nLoop++;
nFrames++; break;
SSB_FILE_REWIND(inp);
FrameExtractorFirst(pCTX, inp);
num_filled = NextFrameH264(pCTX, inp, outbuf, outbuf_size, &coding_type);
}
if (max_size < num_filled)
max_size = num_filled;
}
printf("\nframes = %d, max_size = %d", nFrames / nLoop, max_size);
bail_out:
///////////////////////////////////////
///// FrameExtractorFinal /////
///////////////////////////////////////
FrameExtractorFinal(pCTX);
free(outbuf);
SSB_FILE_CLOSE(inp);
return iRet;
}
void h264_parser_batch_test()
{
int iRet;
HANDLE hFindFile;
WIN32_FIND_DATA find_data;
LPCTSTR folderpath = "D:\\FTPRoot\\anonymous\\pub\\TestVectors\\H.264_BP\\Stream\\";
CHAR filepath[512];
strcpy(filepath, folderpath);
// strcat(filepath, "*.26?");
strcat(filepath, "222_Allegro_PROCESSING_CAVLC_B00_L30_5x6_5.7.26l");
hFindFile = FindFirstFile(filepath, &find_data);
if (hFindFile == INVALID_HANDLE_VALUE)
return;
do {
strcpy(filepath, folderpath);
strcat(filepath, find_data.cFileName);
iRet = h264_parsing_test(filepath);
if (FindNextFile(hFindFile, &find_data) == FALSE)
break;
} while (1);
FindClose(hFindFile);
printf("\n");
}
void main(char *argv[], int argc)
{
// mpeg4();
// h263();
// h264test();
vc1test();
// h264_parser_batch_test();
}
int vc1maxtest(LPCTSTR filename)
{
int i, ret;
int num_filled, max_size = 0;
FILE *fp;
unsigned char *outbuf;
int outbuf_size;
fp = fopen(filename, "rb");
if (fp == NULL) {
printf("[Error] %s file not found\n", filename);
return;
}
outbuf = (unsigned char *) malloc(MAX_FRAME_SIZE);
outbuf_size = MAX_FRAME_SIZE;
num_filled = ExtractConfigStreamVC1(fp, outbuf, outbuf_size, NULL);
if (max_size < num_filled)
max_size = num_filled;
for (i=0; i<3600; i++) {
num_filled = NextFrameVC1(fp, outbuf, outbuf_size, NULL);
if (num_filled == 0)
break;
if (max_size < num_filled)
max_size = num_filled;
}
///////////////////////////////////////
///// FrameExtractorFinal /////
///////////////////////////////////////
free(outbuf);
fclose(fp);
return max_size;
}
void main011()
{
int max_size=0;
LPCTSTR folderpath = "D:\\Temp\\VC1抛胶飘氦磐\\";
CHAR filepath[512];
FILE *fp;
HANDLE hFindFile;
WIN32_FIND_DATA find_data;
strcpy(filepath, folderpath);
strcat(filepath, "*.rcv");
hFindFile = FindFirstFile(filepath, &find_data);
if (hFindFile == INVALID_HANDLE_VALUE)
return;
fp = fopen("out.txt", "wt");
do {
strcpy(filepath, folderpath);
strcat(filepath, find_data.cFileName);
max_size = vc1maxtest(filepath);
fprintf(fp, "\n[%s]\t\t max_size = %d\n", find_data.cFileName, max_size);
if (FindNextFile(hFindFile, &find_data) == FALSE)
break;
} while (1);
FindClose(hFindFile);
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -