/** \fn create_edAudioExternal */ ADM_edAudioTrackExternal *create_edAudioExternal(const char *name) { #define EXTERNAL_PROBE_SIZE (1024*1024) // Identify file type uint8_t buffer[EXTERNAL_PROBE_SIZE]; FILE *f=ADM_fopen(name,"rb"); if(!f) { ADM_warning("Cannot open %s\n",name); return NULL; } fread(buffer,1,EXTERNAL_PROBE_SIZE,f); fclose(f); WAVHeader hdr; uint32_t offset; if(false==ADM_identifyAudioStream(EXTERNAL_PROBE_SIZE,buffer,hdr,offset)) { ADM_warning("Cannot identify external audio track\n"); return NULL; } // Try to create an access for the file... switch(hdr.encoding) { case WAV_PCM: case WAV_AC3: case WAV_MP3: break; default: ADM_warning("Unsupported external audio tracks \n"); return NULL; break; } ADM_info("Found external audio track, encoding =%d offset=%d\n",(int)hdr.encoding,(int)offset); // create access ADM_audioAccessFile *access=new ADM_audioAccessFile(name,offset); // create ADM_edAudioTrack ADM_edAudioTrackExternal *external=new ADM_edAudioTrackExternal(name, &hdr,access); if(!external->create()) { delete external; external=NULL; ADM_warning("Failed to create external track from %s\n",name); return NULL; } // done! return external; }
/** \fn create_edAudioExternal */ ADM_edAudioTrackExternal *create_edAudioExternal(const char *name) { #define EXTERNAL_PROBE_SIZE (1024*1024) // Identify file type uint8_t buffer[EXTERNAL_PROBE_SIZE]; FILE *f=ADM_fopen(name,"rb"); if(!f) { ADM_warning("Cannot open %s\n",name); return NULL; } fread(buffer,1,EXTERNAL_PROBE_SIZE,f); fclose(f); WAVHeader hdr; uint32_t offset; if(false==ADM_identifyAudioStream(EXTERNAL_PROBE_SIZE,buffer,hdr,offset)) { ADM_warning("Cannot identify external audio track\n"); return NULL; } // Try to create an access for the file... ADM_audioAccess *access=NULL; switch(hdr.encoding) { case WAV_AAC: access=new ADM_audioAccessFileAACADTS(name,offset); break; case WAV_PCM: case WAV_AC3: case WAV_MP2: case WAV_MP3: ADM_info("Found external audio track, encoding =%d offset=%d\n",(int)hdr.encoding,(int)offset); // create access access=new ADM_audioAccessFile(name,offset); break; default: ADM_warning("Unsupported external audio tracks \n"); return NULL; break; } if(!access) { ADM_warning("Cannot initialize access for audio track"); return NULL; } // create ADM_edAudioTrack ADM_edAudioTrackExternal *external=new ADM_edAudioTrackExternal(name, &hdr,access); uint32_t extraDataLen=0; uint8_t *extraData=NULL; access->getExtraData(&extraDataLen,&extraData); ADM_info("Trying to create external audio track with %d bytes of extraData %d\n",extraDataLen); if(!external->create(extraDataLen,extraData)) { delete external; external=NULL; ADM_warning("Failed to create external track from %s\n",name); return NULL; } // done! return external; }