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

📄 utils.c

📁 the mpeg2/4 aac decoder
💻 C
字号:
/*** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com**  ** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License as published by** the Free Software Foundation; either version 2 of the License, or** (at your option) any later version.** ** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the** GNU General Public License for more details.** ** You should have received a copy of the GNU General Public License** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.**** Any non-GPL usage of this software or parts of this software is strictly** forbidden.**** Commercial non-GPL licensing of this software is possible.** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.**** $Id: utils.c,v 1.8 2004/09/03 19:38:32 menno Exp $**/#define WIN32_LEAN_AND_MEAN#include <windows.h>//#include <mp4.h>#include <mp4ff.h>#include <neaacdec.h>#include "utils.h"int StringComp(char const *str1, char const *str2, unsigned long len){    signed int c1 = 0, c2 = 0;    while (len--)    {        c1 = tolower(*str1++);        c2 = tolower(*str2++);        if (c1 == 0 || c1 != c2)            break;    }    return c1 - c2;}int GetAACTrack(mp4ff_t *infile){    /* find AAC track */    int i, rc;    int numTracks = mp4ff_total_tracks(infile);    for (i = 0; i < numTracks; i++)    {        unsigned char *buff = NULL;        int buff_size = 0;        mp4AudioSpecificConfig mp4ASC;        mp4ff_get_decoder_config(infile, i, &buff, &buff_size);        if (buff)        {            rc = NeAACDecAudioSpecificConfig(buff, buff_size, &mp4ASC);            free(buff);            if (rc < 0)                continue;            return i;        }    }    /* can't decode this */    return -1;}#if 0int GetAudioTrack(MP4FileHandle infile){    /* find AAC track */    int i;	int numTracks = MP4GetNumberOfTracks(infile, NULL, 0);	for (i = 0; i < numTracks; i++)    {        MP4TrackId trackId = MP4FindTrackId(infile, i, NULL, 0);        const char* trackType = MP4GetTrackType(infile, trackId);        if (!strcmp(trackType, MP4_AUDIO_TRACK_TYPE))        {            return trackId;        }    }    /* can't decode this */    return -1;}int GetVideoTrack(MP4FileHandle infile){    /* find AAC track */    int i;	int numTracks = MP4GetNumberOfTracks(infile, NULL, 0);	for (i = 0; i < numTracks; i++)    {        MP4TrackId trackId = MP4FindTrackId(infile, i, NULL, 0);        const char* trackType = MP4GetTrackType(infile, trackId);        if (!strcmp(trackType, MP4_VIDEO_TRACK_TYPE))        {            return trackId;        }    }    /* can't decode this */    return -1;}#endifLPTSTR PathFindFileName(LPCTSTR pPath){    LPCTSTR pT;    for (pT = pPath; *pPath; pPath = CharNext(pPath)) {        if ((pPath[0] == TEXT('\\') || pPath[0] == TEXT(':')) && pPath[1] && (pPath[1] != TEXT('\\')))            pT = pPath + 1;    }    return (LPTSTR)pT;   // const -> non const}char *convert3in4to3in3(void *sample_buffer, int samples){    int i;    long *sample_buffer24 = (long*)sample_buffer;    char *data = malloc(samples*3*sizeof(char));    for (i = 0; i < samples; i++)    {        data[i*3] = sample_buffer24[i] & 0xFF;        data[i*3+1] = (sample_buffer24[i] >> 8) & 0xFF;        data[i*3+2] = (sample_buffer24[i] >> 16) & 0xFF;    }    return data;}

⌨️ 快捷键说明

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