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

📄 main.c

📁 6410BSP3
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <windows.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "FrameExtractor.h"
#include "MPEG4Frames.h"
#include "H263Frames.h"
#include "H264Frames.h"
#include "VC1Frames.h"


#include "FileRead.h"
#ifndef DATAREAD_TYPE
#error "DATAREAD_TYPE is not defined."
#endif
#if (DATAREAD_TYPE == DATA_FILE)
#define FRAMEX_IN_TYPE_SEL        (FRAMEX_IN_TYPE_FILE)
#else
#define FRAMEX_IN_TYPE_SEL        (FRAMEX_IN_TYPE_MEM)
#endif


//unsigned char delimiter[4] = {0x00, 0x00, 0x00, 0x01};
unsigned char delimiter_mpg4[] = {0x00, 0x00, 0x01};
unsigned char delimiter_h263[] = {0x00, 0x00, 0x80};
unsigned char delimiter_h264[] = {0x00, 0x00, 0x00, 0x01};


//#define MAX_FRAME_SIZE    (16384 * 7)
//#define MAX_FRAME_SIZE    (409600)
#define MAX_FRAME_SIZE    (429600)
#define DELTA_INCREASE    2048

void foo(char *filename)
{
    int   ret;
    int   num_frame, num_filled, max_size = 0;
    FILE *fp;

    FRAMEX_CTX *pCTX;
    unsigned char *outbuf, *tmpbuf;
    int            outbuf_size;

    unsigned char  *delimiter = delimiter_h264;

    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;


    //////////////////////////////////////
    /////     FrameExtractorInit     /////
    //////////////////////////////////////
    pCTX = FrameExtractorInit(FRAMEX_IN_TYPE_FILE, delimiter, 4, 1);


    ///////////////////////////////////////
    /////     FrameExtractorFirst     /////
    ///////////////////////////////////////
    ret = FrameExtractorFirst(pCTX, fp);

    num_frame = 0;
    do {
        //////////////////////////////////////
        /////     FrameExtractorNext     /////
        //////////////////////////////////////
        ret = FrameExtractorNext(pCTX, fp, outbuf, outbuf_size, &num_filled);
        while (ret == FRAMEX_CONTINUE) {
            tmpbuf = (unsigned char *) malloc(outbuf_size + DELTA_INCREASE);
            memcpy(tmpbuf, outbuf, outbuf_size);
            outbuf_size += DELTA_INCREASE;

            free(outbuf);
            outbuf = tmpbuf;
            tmpbuf = NULL;
            ret = FrameExtractorNext(pCTX, fp, outbuf, outbuf_size, &num_filled);
        }

        if (ret != FRAMEX_OK)
            break;

        // 茄 frame狼 弥措 辨捞甫 螟沥茄促.
        if (max_size < num_filled)
            max_size = num_filled;

        num_frame++;
    } while(1);

    switch (ret) {
    case FRAMEX_ERR_EOS:
        printf("End of Stream. (maxsize=%d)", max_size);
        break;

    case FRAMEX_ERR_NOTFOUND:
        printf("No such frame delimiter.");
        break;

    case FRAMEX_ERR_BUFSIZE_TOO_SMALL:
        printf("Buffer size is too small.");
        break;

    }

    printf("\n### Number of frames = %d\n", num_frame);


    ///////////////////////////////////////
    /////     FrameExtractorFinal     /////
    ///////////////////////////////////////
    FrameExtractorFinal(pCTX);

    free(outbuf);

    fclose(fp);
}



void main01()
{
    LPCTSTR  filename = TEXT("C:\\Utils\\resin-3.0.18\\webapps\\ROOT\\Vectors\\H.264\\ultraviolet-640x480.264");
//    LPCTSTR  filename = TEXT("C:\\Utils\\resin-3.0.18\\webapps\\ROOT\\Vectors\\MPEG4\\spider-man_3-720x480.m4v");
//    char *filename = "balls_of_fury_640_480.m4v";

    int   ret;
    int   num_frame, num_filled, max_size = 0;

    FILE   *fp2;

    FILE   *strm_ptr;

    FRAMEX_CTX      *pCTX;
//    FRAMEX_STRM_PTR *strm_ptr;
    unsigned char   *outbuf, *tmpbuf;
    int              outbuf_size;

    unsigned char   *delimiter = delimiter_h264;

    DWORD tick;


    strm_ptr = fopen(filename, "rb");
    if (strm_ptr == NULL) {
        printf("[Error] %s file not found\n", filename);
        return;
    }


    fp2 = fopen("output1", "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;

    tick = GetTickCount();

    //////////////////////////////////////
    /////     FrameExtractorInit     /////
    //////////////////////////////////////
    pCTX = FrameExtractorInit(FRAMEX_IN_TYPE_FILE, delimiter, 4, 1);


    ///////////////////////////////////////
    /////     FrameExtractorFirst     /////
    ///////////////////////////////////////
    ret = FrameExtractorFirst(pCTX, strm_ptr);

    num_frame = 0;
    do {
        //////////////////////////////////////
        /////     FrameExtractorNext     /////
        //////////////////////////////////////
        ret = FrameExtractorNext(pCTX, strm_ptr, outbuf, outbuf_size, &num_filled);
        while (ret == FRAMEX_CONTINUE) {
            tmpbuf = (unsigned char *) malloc(outbuf_size + DELTA_INCREASE);
            memcpy(tmpbuf, outbuf, outbuf_size);
            outbuf_size += DELTA_INCREASE;

            free(outbuf);
            outbuf = tmpbuf;
            tmpbuf = NULL;
            ret = FrameExtractorNext(pCTX, strm_ptr, outbuf, outbuf_size, &num_filled);
        }

        if (ret != FRAMEX_OK) {
//            strm_ptr->p_cur = strm_ptr->p_start;
            break;
        }

        // 茄 frame狼 弥措 辨捞甫 螟沥茄促.
        if (max_size < num_filled)
            max_size = num_filled;

//    printf("\n[%003d] = %d\n", num_frame, num_filled);


/*
        fprintf(fp2, "\tmpeg4_%d[] = {", num_frame);
        for (z=0; z<num_filled; z++) {
            if (z % 25 == 24) {
                fprintf(fp2, "\n\t             ");
            }
            fprintf(fp2, "0x%02X, ", outbuf[z]);
        }

        fprintf(fp2, "};\n");
*/

        fwrite(outbuf, 1, num_filled, fp2);

        num_frame++;
        if (num_frame == 1000)
            break;
    } while(1);

    switch (ret) {
    case FRAMEX_ERR_EOS:
        printf("End of Stream. (maxsize=%d)", max_size);
        break;

    case FRAMEX_ERR_NOTFOUND:
        printf("No such frame delimiter.");
        break;

    case FRAMEX_ERR_BUFSIZE_TOO_SMALL:
        printf("Buffer size is too small.");
        break;

    }

    tick = GetTickCount() - tick;
    printf("\nTime = %d\n", tick);

    ret = FrameExtractorPeek(pCTX, strm_ptr, outbuf+10, 8, &num_filled);
    ret = FrameExtractorPeek(pCTX, strm_ptr, outbuf, 8, &num_filled);

    printf("\n### Number of frames = %d\n", num_frame);


    ///////////////////////////////////////
    /////     FrameExtractorFinal     /////
    ///////////////////////////////////////
    FrameExtractorFinal(pCTX);

    free(outbuf);

    fclose(fp2);
}



void mpeg4()
{
    LPCTSTR  filename = TEXT("ghost_rider-320x240.m4v");


    int    num_frames_convert;

    int    i, ret;
    int    num_filled, max_size = 0;
    FILE  *fp;

    FRAMEX_CTX *pCTX;
    unsigned char *outbuf;
    int            outbuf_size;

    MPEG4_CONFIG_DATA   mpeg4_conf;
    unsigned int        coding_type;
    unsigned char      *delimiter = delimiter_mpg4;


    num_frames_convert = 100;



    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;


    //////////////////////////////////////
    /////     FrameExtractorInit     /////
    //////////////////////////////////////
    pCTX = FrameExtractorInit(FRAMEX_IN_TYPE_FILE, delimiter, 3, 1);


    ///////////////////////////////////////
    /////     FrameExtractorFirst     /////
    ///////////////////////////////////////
    ret = FrameExtractorFirst(pCTX, fp);


    num_filled = ExtractConfigStreamMpeg4(pCTX, fp, outbuf, outbuf_size, &mpeg4_conf);

    printf("\nWidth  = [%d]\nHeight = [%d]\n", mpeg4_conf.width, mpeg4_conf.height);
    printf("\n{%02d}Num = %d", 0, num_filled);

    for (i=1; i<=num_frames_convert; i++) {
        num_filled = NextFrameMpeg4(pCTX, fp, outbuf, outbuf_size, &coding_type);
        if (num_filled == 0)
            break;


//        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);

    fclose(fp);
}




void h263()
{
    LPCTSTR  filename = TEXT("car16.263");

    int   num_frames_convert;

    int   i, ret;
    int   num_filled, max_size = 0;
    FILE *fp, *fp2;

    FRAMEX_CTX *pCTX;
    unsigned char *outbuf;
    int            outbuf_size;

    H263_CONFIG_DATA    h263_conf;
    unsigned int        coding_type;
    unsigned char      *delimiter = delimiter_h263;


    num_frames_convert = 100;



    fp = fopen(filename, "rb");
    if (fp == NULL) {
        printf("[Error] %s file not found\n", filename);
        return;
    }

    fp2 = fopen("out.h", "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_FILE, delimiter, 3, 1);


    ///////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -