亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? main.c

?? embedded linux 下MP3的解碼程序
?? C
字號(hào):
//****************************************************************************
// 
// Faraday Technology Coporation 
// Copyright (C) Microsoft Corporation. All rights reserved.
//                                
//*--------------------------------------------------------------------------*
//* Name:main.c                                                              *
//* Description: MPEG-1/2 Audio Layer 3 Decoder example main                 *
//* Author: Shawn, Hsiao                                                     *
//* Date: 2006/06/06                                                         *
//* Version:1.3	                                                             *
//****************************************************************************

//============================================================================
//        Include FIle                                 
//============================================================================
#include 	"FMAD.h"				// FMAD header file
#include 	<stdio.h>
#include 	<stdlib.h>
#include 	<fcntl.h>
#include 	<errno.h>
#include 	<getopt.h>
#include	<linux/soundcard.h> 

//============================================================================
//        Global Variables
//============================================================================

struct MP3dec_info FMAD_info;

char input_buf[IN_SIZE];			// MP3 decoder input buffer
char output_buf[OUT_SIZE];		// MP3 decoder output buffer

volatile int output_mode = 0;	// 0: audio driver, 1: file

//============================================================================
//        Call-back functions
//============================================================================

//******************************************************************************
// 
// int OutputPCM(char *, int, int)
//  
//******************************************************************************
//      
// input: 
// parameter 1 -> output buffer pointer 
// parameter 2 -> output data size in bytes 
// parameter 3 -> output file ("0" means no file output)
// output: data size which is really output in bytes
//
// This call-back function is called when decoder decoded one frame data.
// For the case of MP3 decoder, the data in one frame is fixed to 9216 bytes
// (32-bits output sample) or 4608 bytes (16-bits output sample).
// It is suggested that when the function is called, the main program must 
// get all output samples at once. Otherwise, the decoder will keep calling
// until all output samples are got.
// The coorect size of output data, which is really got from output buffer, must be 
// given to make sure the decoder works normally.
//
//******************************************************************************

int OutputPCM(char *output_buf, int output_size, int output_file)
{
	return write(output_file, output_buf, output_size);
}

//******************************************************************************
// 
// int InputData(char *, int, int)
//  
//******************************************************************************
//      
// input: 
// parameter 1 -> input buffer pointer
// parameter 2 -> input size
// parameter 3 -> input file ("0" means no file input)
// output: data size which is really input in bytes
//
// This call-back function is called when decoder needs more data to input buffer.
// The decoder gives an expected data size and a pointer, which the data must be placed at.
// The coorect size of input data, which is really placed to input buffer, must be 
// given to make sure the decoder works normally.
//
//******************************************************************************

int InputData(char *input_buf, int input_size, int input_file)
{
	if (input_file != 0)
		return(read(input_file, input_buf, input_size));
	
	return 0;
}

//******************************************************************************
// 
// int DataSeek(int, int, int)
//  
//******************************************************************************
//      
// input: 
// parameter 1 -> input file ("0" means no file input)
// parameter 2 -> data seek size
// parameter 3 -> seek type 0: seek from start, 1: seek from current, 2: seek from end
// output: error message -> 0: ok, others: fail
//
// This function is called when the decoder want to seek to some specific point in 
// the bitstream or file.
//
//******************************************************************************

int DataSeek(int input_file, int size, int type)
{
	int seek_mode;
        
	switch (type)
	{
		case 0:
			seek_mode = SEEK_SET;
			break;
 		case 1:
			seek_mode = SEEK_CUR;
			break;
		case 2:
			seek_mode = SEEK_END;
			break;
		default:
			seek_mode = SEEK_SET;
			break;
	}
        
	return (lseek(input_file, size, seek_mode));        
}

//******************************************************************************
// 
// void DisplaySet_MP3dec(struct MP3dec_info *)
//  
//******************************************************************************
//      
// input: 
// parameter 1 -> MP3 decoder information pointer
// output: NA
//
// This function is called when the decoder can serve the display and set process.
// It can be defined 1) once per frame, or 2) once per input data.
// If the program does not need to display or set, this function must be sure as
// an empty function. Otherwise, it may does some unpredictable processing.
//
//******************************************************************************

int Set_Audio(struct MP3dec_info *mp_c)
{
	int freq = mp_c->sampling_frequency;
	int stereo;
	int out_file = mp_c->output_file;

	if (mp_c->mode == 0)stereo = 0;
	else stereo = 1;

	if (ioctl(out_file, SNDCTL_DSP_SPEED, &freq) < 0)
	{
		printf("sampling frequency fail\n\n");	
		return (0);
	}
	if (ioctl(out_file, SNDCTL_DSP_STEREO, &stereo) < 0)
	{
		printf("stereo fail\n\n");
		return (0);
	}

	return (1);
}

void DisplaySet_MP3dec(struct MP3dec_info *mp_c)
{
	int mod = mp_c->sampling_frequency * (mp_c->mode + 1);
	int count_all;
	int second_count;
	int minute_count;
	int main_count;
	char mode[6];
	int i;
	
	count_all = mp_c->count;			// get time information	
	main_count = count_all & 0xFFFFF;			// get basic count	
	second_count = (count_all >> 20) & 0x3F;		// get second
	minute_count = (count_all >> 26) & 0x3F;	// get minute
	
	if (!output_mode)
		Set_Audio(mp_c);
			
	if (main_count >= mod)
	{			
		/************** Display MPEG information *********************/	
		// display time in the form mm:ss (m:minute, s:second)		
		
		fprintf(stderr, "%02d:%02d, ", minute_count, second_count);

		// display MP3 decoder content
		// display layer, bit rate, sampling frequency
		fprintf(stderr, "Layer %d, %d kbps, %d Hz, ", mp_c->layer, mp_c->bit_rate, mp_c->sampling_frequency);
        	
		// display channel mode
    if (mp_c->mode == 0)
    {
			mode[0] = 'm'; mode[1] = 'o'; mode[2] = 'n'; mode[3] = 'o'; mode[4] = ' '; mode[5] = ' ';
		}
		else
		{
			mode[0] = 's'; mode[1] = 't'; mode[2] = 'e'; mode[3] = 'r'; mode[4] = 'e'; mode[5] = 'o';
		}
        	
		for (i = 0; i < 6 ; i ++)
			fprintf(stderr, "%c", mode[i]);
        		
		// display EQ mode			
		switch (mp_c->EQ)
		{
			case 1: fprintf(stderr, ", Treble ");
				break;
			case 2: fprintf(stderr, ", Bass   ");
				break;
			case 3: fprintf(stderr, ", Jazz");
				break;
			case 4: fprintf(stderr, ", Classic");		
				break;
			case 5: fprintf(stderr, ", Rock   ");
				break;
			default: fprintf(stderr, ", Normal ");
				break;
		}
		
		fprintf(stderr, "\r");
		/********** End of Display MP3 decoder information ******************/		
	}
}

//******************************************************************************
// 
// main
//                                
//******************************************************************************
//
// This is an example main function for Faraday MP3 Decoder on FA410.
//
//******************************************************************************
int main(int argc, char *argv[])
{
	char *in_file_name, *out_file_name;
	char *eq_mode_sel;
	int eq_sel = 0;
	int in_file, out_file;
	int err;      
	
	/**************** Display title ******************************/
	printf("\n====================================================");
	printf("\n\n      Faraday MPEG Audio Decoder (FMAD) V1.3\n\n");
	printf("====================================================\n");
	/**************** End of Display title ***********************/	

	// Ensure commands are valid
	if(4 != argc)
	{
		fprintf(stderr,"! Invalid command line.\r\n\r\n\tUsage : fmad <input file> <output file> <EQ>\r\n\r\n");
		exit(-1);
	}

	/************ Access input information ***********************/
	// Get input argument
	in_file_name = argv[1];
	out_file_name = argv[2];
	eq_mode_sel = argv[3];
	
	// Open input & output file 
	in_file = open(in_file_name,O_RDONLY);
	out_file = open(out_file_name, (O_WRONLY | O_CREAT | O_TRUNC), 0660);
	
	if (!strcmp(out_file_name, "/dev/dsp"))		output_mode = 0;                	else		output_mode = 1; 			

	// Get equalizer mode
	switch (*eq_mode_sel)
	{
		case '1': eq_sel = 1;
			  break;
		case '2': eq_sel = 2;
			  break;
		case '3': eq_sel = 3;
			  break;
		case '4': eq_sel = 4;
			  break;
		case '5': eq_sel = 5;
			  break;
		default: eq_sel = 0;
			 break;
	}
	
	/*** Initial MP3 decoder infomation & Data & Callback functions *******/
	// The initail processing is used to initialize IO and callback
	// functions including:
	// 1) initail MP3 decoder information
	// 2) set I/O file (if has one) and I/O buffer.
	// 3) set callback functions.
	err = init_MP3dec_info(&FMAD_info);
	
	if (err != 0)
	{
		fprintf(stderr, "\nInitialize MP3 decoder information error!!!\n");
		return (1);
	}
        
	err = init_Data(&FMAD_info, (int)in_file, (int)out_file, &input_buf[0], &output_buf[0]);
	
	if (err != 0)
	{
		fprintf(stderr, "\nInitialize IO error!!!\n");
		return (1);
	}
	
	err = init_CallbackFunction(&FMAD_info, &InputData, &OutputPCM, &DataSeek, &DisplaySet_MP3dec);
	
	if (err != 0)
	{
		fprintf(stderr, "\nInitialize Call-back functions error!!!\n");
		return (1);
	}
	
	/******************* Initial MP3 decoder **********************/
	// The initial processing handle three processing:
	// 1. Check ID3 tag. If there is one, skip it.
	// 2. Find the first valid header (frame) and ignore the data before it.
	// 3. Initial MP3 decoder.
	// If initializing is OK, return "0".
	err = init_Faraday_MP3dec(&FMAD_info);
	
	if (err != 0)
	{
		fprintf(stderr, "\nInitialize Faraday MP3 Decoder error!!!\n");
		return (1);
	}	
	
	//set EQ
	set_Faraday_EQ(eq_sel);

	// show welcome message
	fprintf(stderr, "Start MP3 decoder\n");
        
	/**************** MP3 decoder processing **********************/
	// The MP3 decoder proccessing includes three steps:
	// 1. Read data form file to input buffer.
	// 2. Decode data in input buffer.
	// 3. After one frame is decoded, write them to output file.
	err = do_Faraday_MP3dec(&FMAD_info);
	
	if (err != 0)
	{
		fprintf(stderr, "\nInput Data error!!!\n");
		return (1);
	} 
	
	close(in_file);        // close input file
	close(out_file);       // close output file
	
	return (0);
}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲啪啪综合av一区二区三区| 亚洲欧美激情小说另类| 91国产免费看| 国产成人在线影院| 日本不卡一二三| 一区二区三区四区激情| 国产欧美日韩三级| 久久久久国产精品麻豆| 精品国产成人在线影院 | 91超碰这里只有精品国产| 不卡影院免费观看| 成人久久18免费网站麻豆| 加勒比av一区二区| 狠狠色狠狠色合久久伊人| 日韩国产成人精品| 亚洲精品高清在线观看| 亚洲精品少妇30p| 亚洲欧美在线另类| 亚洲精品日产精品乱码不卡| 亚洲国产精品高清| 国产精品国产三级国产普通话蜜臀 | 日本欧美在线看| 午夜天堂影视香蕉久久| 午夜视频久久久久久| 亚洲国产成人av好男人在线观看| 日本伊人色综合网| 国产中文一区二区三区| 成人av中文字幕| 在线免费观看视频一区| 日韩三级中文字幕| 国产亚洲欧美日韩在线一区| 国产精品第13页| 午夜精品一区在线观看| 美女脱光内衣内裤视频久久影院| 国产精品影视在线观看| 一本久久a久久精品亚洲| 日韩一区二区在线观看视频 | 懂色一区二区三区免费观看| 91蜜桃婷婷狠狠久久综合9色| 欧美日韩激情在线| 国产免费成人在线视频| 亚洲综合区在线| 风间由美一区二区三区在线观看 | 亚洲永久免费视频| 国内精品不卡在线| 在线亚洲人成电影网站色www| 欧美不卡在线视频| 一区二区在线观看av| 国产精品911| 日韩免费观看2025年上映的电影| 高清国产一区二区三区| 欧美电影免费观看高清完整版在线| 亚洲免费av在线| 国产成人亚洲精品青草天美| 日韩欧美一区二区免费| 亚洲亚洲精品在线观看| gogo大胆日本视频一区| 久久综合五月天婷婷伊人| 五月综合激情网| 在线观看一区不卡| 亚洲人吸女人奶水| 99re热这里只有精品免费视频| 26uuu亚洲| 国产精品一区二区不卡| 久久婷婷一区二区三区| 美国欧美日韩国产在线播放| 91精选在线观看| 日韩黄色免费电影| 91精品国产一区二区三区| 五月婷婷久久丁香| 91精品国产美女浴室洗澡无遮挡| 午夜欧美在线一二页| 欧美在线综合视频| 日韩高清不卡一区二区| 日韩欧美亚洲一区二区| 激情综合色综合久久| 久久精品视频一区二区三区| 国产高清精品久久久久| 裸体一区二区三区| 一区二区在线观看免费视频播放| 91久久精品一区二区三区| 国产高清亚洲一区| 国产精品青草综合久久久久99| 色天天综合久久久久综合片| 亚洲天堂a在线| 日韩一区二区三区三四区视频在线观看| 欧美剧情电影在线观看完整版免费励志电影 | 日韩在线一区二区三区| 久久伊99综合婷婷久久伊| 成人avav影音| 香蕉乱码成人久久天堂爱免费| 欧美一卡在线观看| 色综合久久久久综合体桃花网| 伊人开心综合网| 欧美成人免费网站| 日本韩国欧美一区二区三区| 精品一区二区日韩| 亚洲免费观看高清完整版在线观看熊| 欧美日韩亚洲高清一区二区| 国产精品123| 免费一级欧美片在线观看| 亚洲女与黑人做爰| 国产精品素人一区二区| 69堂精品视频| 欧美日韩在线播放三区四区| 91在线观看一区二区| 国产激情一区二区三区| 精品一区二区综合| 日本特黄久久久高潮| 亚洲一区在线看| 亚洲欧美日本韩国| 亚洲天堂久久久久久久| 欧美激情在线一区二区| 国产亚洲精品aa| 2021国产精品久久精品| 欧美精品一区二区三区蜜臀| 欧美一区二区三区四区五区| 亚洲高清免费视频| 亚洲午夜电影在线| 亚洲另类在线视频| 亚洲欧洲一区二区在线播放| **网站欧美大片在线观看| 国产精品久久久久精k8| 国产精品成人网| 精品综合久久久久久8888| 国产毛片精品视频| 国产传媒欧美日韩成人| www.日韩精品| 欧美日韩久久久久久| 欧美一级片在线看| 久久先锋资源网| 国产精品视频观看| 亚洲在线视频一区| 日本午夜一本久久久综合| 精品一区二区三区在线观看| 国产伦理精品不卡| 91丝袜美腿高跟国产极品老师| 日本一区二区三区在线观看| 亚洲狼人国产精品| 秋霞电影一区二区| av一区二区三区| 欧美一级在线免费| 中文字幕第一区综合| 亚洲高清免费观看 | 久久91精品国产91久久小草| 91欧美激情一区二区三区成人| 欧美一区二区三区日韩| 国产亚洲精品7777| 久久久久久久久97黄色工厂| 亚洲五码中文字幕| 17c精品麻豆一区二区免费| 久久亚洲精品国产精品紫薇| 日韩一区二区在线播放| 日韩写真欧美这视频| 亚洲一区二区三区四区不卡| av激情亚洲男人天堂| 中文字幕一区二区三区在线播放| 成人美女视频在线观看18| 欧美—级在线免费片| 色综合一个色综合| 丝袜亚洲另类丝袜在线| 日韩欧美一二三四区| 国产v综合v亚洲欧| 一区二区在线观看免费| 日韩一区二区在线观看| 国产剧情av麻豆香蕉精品| 香蕉av福利精品导航| 成人高清视频在线观看| 国产日韩亚洲欧美综合| 国产成人8x视频一区二区| 国产三级精品三级| 成人动漫一区二区| 亚洲欧美日韩在线不卡| 欧美日韩在线电影| 男人的j进女人的j一区| 精品久久国产老人久久综合| 国产成人一级电影| 亚洲欧美综合网| 91超碰这里只有精品国产| 久久电影网电视剧免费观看| 国产日韩精品一区二区三区在线| 成人短视频下载| 日本午夜精品视频在线观看| 久久这里只有精品视频网| 99精品久久久久久| 日韩精品国产精品| 综合久久给合久久狠狠狠97色 | 欧美电影在哪看比较好| 国产精品自产自拍| 亚洲一区二区三区三| 国产欧美综合在线观看第十页| 91福利精品视频| 国产.欧美.日韩| 秋霞影院一区二区| 一区二区高清在线| 国产欧美一区二区精品久导航 | 欧美tickling网站挠脚心| 91蝌蚪porny| 国产成人免费视频| 麻豆精品一区二区av白丝在线|