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

📄 main.c

📁 SAMSUNG S3C6410 CPU BSP for winmobile6
💻 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 + -