⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 6410BSP3
💻 C
📖 第 1 页 / 共 2 页
字号:
    /////     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 + -