/**
    \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;
}