Mercurial > audlegacy
diff Input/aac/src/mp4_utils.c @ 2:6efb9e514224 trunk
[svn] Import AAC stuff.
author | nenolod |
---|---|
date | Mon, 24 Oct 2005 10:44:27 -0700 |
parents | |
children | a3913b2d0acd |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Input/aac/src/mp4_utils.c Mon Oct 24 10:44:27 2005 -0700 @@ -0,0 +1,151 @@ +/* +** some function for MP4 file based on libmp4v2 from mpeg4ip project +*/ +#include <mp4.h> +#include <faad.h> + +const char *mp4AudioNames[]= + { + "MPEG-1 Audio Layers 1,2 or 3", + "MPEG-2 low biterate (MPEG-1 extension) - MP3", + "MPEG-2 AAC Main Profile", + "MPEG-2 AAC Low Complexity profile", + "MPEG-2 AAC SSR profile", + "MPEG-4 audio (MPEG-4 AAC)", + 0 + }; + +const u_int8_t mp4AudioTypes[] = + { + MP4_MPEG1_AUDIO_TYPE, // 0x6B + MP4_MPEG2_AUDIO_TYPE, // 0x69 + MP4_MPEG2_AAC_MAIN_AUDIO_TYPE, // 0x66 + MP4_MPEG2_AAC_LC_AUDIO_TYPE, // 0x67 + MP4_MPEG2_AAC_SSR_AUDIO_TYPE, // 0x68 + MP4_MPEG4_AUDIO_TYPE, // 0x40 + 0 + }; + +/* MPEG-4 Audio types from 14496-3 Table 1.5.1 (from mp4.h)*/ +const char *mpeg4AudioNames[]= + { + "!!!!MPEG-4 Audio track Invalid !!!!!!!", + "MPEG-4 AAC Main profile", + "MPEG-4 AAC Low Complexity profile", + "MPEG-4 AAC SSR profile", + "MPEG-4 AAC Long Term Prediction profile", + "MPEG-4 AAC Scalable", + "MPEG-4 CELP", + "MPEG-4 HVXC", + "MPEG-4 Text To Speech", + "MPEG-4 Main Synthetic profile", + "MPEG-4 Wavetable Synthesis profile", + "MPEG-4 MIDI Profile", + "MPEG-4 Algorithmic Synthesis and Audio FX profile" + }; + +int getAACTrack(MP4FileHandle file) +{ + int numTracks = MP4GetNumberOfTracks(file, NULL, 0); + int i=0; + + for(i=0;i<numTracks;i++){ + MP4TrackId trackID = MP4FindTrackId(file, i, NULL, 0); + const char *trackType = MP4GetTrackType(file, trackID); + if(!strcmp(trackType, MP4_AUDIO_TRACK_TYPE)){//we found audio track ! + int j=0; + u_int8_t audiotype = MP4GetTrackAudioType(file, trackID); + while(mp4AudioTypes[j]){ // what kind of audio is ? + if(mp4AudioTypes[j] == audiotype){ + if(mp4AudioTypes[j] == MP4_MPEG4_AUDIO_TYPE){//MPEG4 audio ok + audiotype = MP4GetTrackAudioMpeg4Type(file, trackID); + printf("%d-%s\n", audiotype, mpeg4AudioNames[audiotype]); + return (trackID); + } + else{ + printf("%s\n", mp4AudioNames[j]); + if (mp4AudioTypes[j]== MP4_MPEG2_AAC_LC_AUDIO_TYPE || + mp4AudioTypes[j]== MP4_MPEG2_AAC_MAIN_AUDIO_TYPE || + mp4AudioTypes[j]== MP4_MPEG2_AAC_SSR_AUDIO_TYPE) + return(trackID); + return(-1); + } + } + j++; + } + } + } + return(-1); +} + +int getAudioTrack(MP4FileHandle file) +{ + int numTracks = MP4GetNumberOfTracks(file, NULL,0); + int i=0; + + for(i=0;i<numTracks;i++){ + MP4TrackId trackID = MP4FindTrackId(file, i, NULL, 0); + const char *trackType = MP4GetTrackType(file, trackID); + if(!strcmp(trackType, MP4_AUDIO_TRACK_TYPE)){ + return(trackID); + } + } + return(-1); +} + +int getVideoTrack(MP4FileHandle file) +{ + int numTracks = MP4GetNumberOfTracks(file, NULL, 0); + int i=0; + + for(i=0;i<numTracks; i++){ + MP4TrackId trackID = MP4FindTrackId(file, i, NULL, 0); + const char *trackType = MP4GetTrackType(file, trackID); + if(!strcmp(trackType, MP4_VIDEO_TRACK_TYPE)){ + return (trackID); + } + } + return(-1); +} + +void getMP4info(char* file) +{ + MP4FileHandle mp4file; + MP4Duration trackDuration; + int numTracks; + int i=0; + + if(!(mp4file = MP4Read(file,0))) + return; + //MP4Dump(mp4file, 0, 0); + numTracks = MP4GetNumberOfTracks(mp4file, NULL, 0); + g_print("there are %d track(s)\n", numTracks); + for(i=0;i<numTracks;i++){ + MP4TrackId trackID = MP4FindTrackId(mp4file, i, NULL, 0); + const char *trackType = MP4GetTrackType(mp4file, trackID); + printf("Track %d, %s", trackID, trackType); + if(!strcmp(trackType, MP4_AUDIO_TRACK_TYPE)){//we found audio track ! + int j=0; + u_int8_t audiotype = MP4GetTrackAudioType(mp4file, trackID); + while(mp4AudioTypes[j]){ // what kind of audio is ? + if(mp4AudioTypes[j] == audiotype){ + if(mp4AudioTypes[j] == MP4_MPEG4_AUDIO_TYPE){ + audiotype = MP4GetTrackAudioMpeg4Type(mp4file, trackID); + g_print(" %s", mpeg4AudioNames[audiotype]); + } + else{ + printf(" %s", mp4AudioNames[j]); + } + g_print(" duration :%d", + MP4ConvertFromTrackDuration(mp4file, trackID, + MP4GetTrackDuration(mp4file, + trackID), + MP4_MSECS_TIME_SCALE)); + } + j++; + } + } + printf("\n"); + } + MP4Close(mp4file); +}