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

📄 aud_daf_parser.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 3 页
字号:
    }
    else
    {
        v1_result = KAL_FALSE;
    }

    /* copy title to info_p */
    if (id3_tag->frames[ID3_FRAME_TITLE].text != NULL)
    {
        kal_wstrncpy(
            (kal_wchar*) info_p->title,
            (const kal_wchar*)id3_tag->frames[ID3_FRAME_TITLE].text,
            MAX_ID3_TITLE_LEN);
    }

    /* copy artist to info_p */
    if (id3_tag->frames[ID3_FRAME_ARTIST].text != NULL)
    {
        kal_wstrncpy(
            (kal_wchar*) info_p->artist,
            (const kal_wchar*)id3_tag->frames[ID3_FRAME_ARTIST].text,
            MAX_ID3_ARTIST_LEN);
    }

    /* copy album to info_p */
    if (id3_tag->frames[ID3_FRAME_ALBUM].text != NULL)
    {
        kal_wstrncpy(
            (kal_wchar*) info_p->album,
            (const kal_wchar*)id3_tag->frames[ID3_FRAME_ALBUM].text,
            MAX_ID3_ALBUM_LEN);
    }

    /* copy genre to info_p */
    if (id3_tag->frames[ID3_FRAME_GENRE].text != NULL)
    {
        kal_wstrncpy(
            (kal_wchar*) info_p->genre,
            (const kal_wchar*)id3_tag->frames[ID3_FRAME_GENRE].text,
            MAX_ID3_GENRE_LEN);
    }

    /* copy year to info_p */
    if (id3_tag->frames[ID3_FRAME_YEAR].text != NULL)
    {
        kal_wstrncpy(
            (kal_wchar*) info_p->year,
            (const kal_wchar*)id3_tag->frames[ID3_FRAME_YEAR].text,
            MAX_ID3_YEAR_LEN);
    }

    if (daf_parse_result)
    {
        daf_set_data_info(
            info_p,
            daf_data_info.channel_num,
            daf_data_info.duration,
            data_size,
            daf_data_info.bitrate,
            daf_data_info.samplerate);
    }
}


/*****************************************************************************
 * FUNCTION
 *  daf_seek
 * DESCRIPTION
 *  
 * PARAMETERS
 *  input_stream        [?]     
 *  offset              [?]     
 *  aud_info_struct *info_p(?)
 * RETURNS
 *  kal_bool
 *****************************************************************************/
kal_bool daf_seek(audio_input_stream_struct *input_stream, kal_uint32 *offset)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int32 v2_tag_size;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (*offset == 0)
    {
        /* skip id3v2 tag */
        if (audio_input_stream_read(input_stream, 10) != 10)
        {
            return KAL_FALSE;
        }
        if ((v2_tag_size = id3_tag_parse_v2_tag_size(input_stream->ptr)) > 0)
        {
            *offset = v2_tag_size;
        }
    }
    audio_input_stream_seek(input_stream, (kal_int32) * offset);
    if (!daf_parse(input_stream, offset, NULL))
    {
        return KAL_FALSE;
    }
    audio_input_stream_seek(input_stream, (kal_int32) * offset);
    return KAL_TRUE;
}
#endif /* MED_PARSE_DAF */ 


/*****************************************************************************
 * FUNCTION
 *  daf_set_data_info
 * DESCRIPTION
 *  
 * PARAMETERS
 *  info_p          [?]         
 *  channel_num     [IN]        
 *  duration        [IN]        
 *  size            [IN]        
 *  bitrate         [IN]        
 *  samplerate      [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void daf_set_data_info(
        aud_info_struct *info_p,
        kal_uint32 channel_num,
        kal_uint32 duration,
        kal_uint32 size,
        kal_uint32 bitrate,
        kal_uint32 samplerate)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_wchar temp[30];
    kal_uint32 bitrate_fraction, samplerate_fraction;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* channel num */
    info_p->channel_num = channel_num;
    /* quality */
    if (bitrate > 0 || samplerate > 0)
    {
        if (bitrate > 0)
        {
            bitrate_fraction = bitrate / 100;
            bitrate_fraction = bitrate_fraction - (bitrate_fraction / 10) * 10;
            kal_wsprintf((kal_wchar*) info_p->quality, "%d.%dkbps", bitrate / 1000, bitrate_fraction);
            if (samplerate > 0)
            {
                kal_wstrcat((kal_wchar*) info_p->quality, (kal_wchar*) L" / ");
            }
        }
        if (samplerate > 0)
        {
            samplerate_fraction = samplerate / 100;
            samplerate_fraction = samplerate_fraction - (samplerate_fraction / 10) * 10;
            kal_wsprintf((kal_wchar*) temp, "%d.%dkHz", samplerate / 1000, samplerate_fraction);
            kal_wstrcat((kal_wchar*) info_p->quality, temp);
        }
    }
    /* size */
    if (size >= 1024)
    {
        kal_wsprintf((kal_wchar*) info_p->size, "%d.%dKB", size / 1024, (size % 1024) / 103);
    }
    else
    {
        kal_wsprintf((kal_wchar*) info_p->size, "%dB", size);
    }
    /* time */
    if (duration > 0)
    {
        duration /= 1000;
        kal_wsprintf((kal_wchar*) info_p->duration, "%02d:%02d", (int)(duration / 60), (int)(duration % 60));
    }
}


/*****************************************************************************
 * FUNCTION
 *  get_aud_info
 * DESCRIPTION
 *  
 * PARAMETERS
 *  filename        [?]     
 *  aud_info_p      [?]     
 * RETURNS
 *  kal_bool
 *****************************************************************************/
kal_bool get_aud_info(kal_wchar *filename, aud_info_struct *aud_info_p)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int16 format;
    kal_uint32 size;
    FS_HANDLE file;
    STFSAL fsal_handle;
    audInfoStruct *aud_info;
    kal_uint32 channel_num;
    audio_input_stream_struct *input_stream;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    Media_Status(*get_aud_info_func) (STFSAL * pstFSAL, audInfoStruct * contentInfo, void *param) = NULL;

    if ((file = DRM_open_file(filename, FS_READ_ONLY | FS_OPEN_NO_DIR, 0)) < 0)
    {
        return KAL_FALSE;
    }

    format = med_get_media_type(filename);

    input_stream = audio_file_input_stream_alloc(file);
    size = audio_input_stream_get_data_size(input_stream);

    /* get id3 tags info */
    memset(aud_info_p, 0, sizeof(aud_info_struct));
    daf_set_data_info(aud_info_p, 0, 0, size, 0, 0);
    if (id3_tag_parse(input_stream, &id3_tag))
    {
        /* copy title to info_p */
        if (id3_tag.frames[ID3_FRAME_TITLE].text != NULL)
        {
            kal_wstrncpy(
                (kal_wchar*) aud_info_p->title,
                (const kal_wchar*)id3_tag.frames[ID3_FRAME_TITLE].text,
                MAX_ID3_TITLE_LEN);
        }

        /* copy artist to info_p */
        if (id3_tag.frames[ID3_FRAME_ARTIST].text != NULL)
        {
            kal_wstrncpy(
                (kal_wchar*) aud_info_p->artist,
                (const kal_wchar*)id3_tag.frames[ID3_FRAME_ARTIST].text,
                MAX_ID3_ARTIST_LEN);
        }

        /* copy album to info_p */
        if (id3_tag.frames[ID3_FRAME_ALBUM].text != NULL)
        {
            kal_wstrncpy(
                (kal_wchar*) aud_info_p->album,
                (const kal_wchar*)id3_tag.frames[ID3_FRAME_ALBUM].text,
                MAX_ID3_ALBUM_LEN);
        }

        /* copy genre to info_p */
        if (id3_tag.frames[ID3_FRAME_GENRE].text != NULL)
        {
            kal_wstrncpy(
                (kal_wchar*) aud_info_p->genre,
                (const kal_wchar*)id3_tag.frames[ID3_FRAME_GENRE].text,
                MAX_ID3_GENRE_LEN);
        }

        /* copy year to info_p */
        if (id3_tag.frames[ID3_FRAME_YEAR].text != NULL)
        {
            kal_wstrncpy(
                (kal_wchar*) aud_info_p->year,
                (const kal_wchar*)id3_tag.frames[ID3_FRAME_YEAR].text,
                MAX_ID3_YEAR_LEN);
        }
    }
    DRM_close_file(file);

    switch (format)
    {
        case MED_TYPE_AU:
            get_aud_info_func = AU_GetContentDescInfo;
            break;
        case MED_TYPE_AIFF:
            get_aud_info_func = AIFF_GetContentDescInfo;
            break;
        case MED_TYPE_WAV:
            get_aud_info_func = WAV_GetContentDescInfo;
            break;
    #ifdef AMR_DECODE
        case MED_TYPE_AMR:
        case MED_TYPE_AMR_WB:
            get_aud_info_func = AMR_GetContentDescInfo;
            break;
    #endif /* AMR_DECODE */ 
    #ifdef AAC_DECODE
        case MED_TYPE_AAC:
            get_aud_info_func = AAC_GetContentDescInfo;
            break;
    #endif /* AAC_DECODE */ 
    #ifdef WMA_DECODE
        case MED_TYPE_WMA:
            get_aud_info_func = WMA_GetContentDescInfo;
            break;
    #endif /* WMA_DECODE */ 
    #if defined(MP4_CODEC) && defined(AAC_DECODE)
        case MED_TYPE_M4A:
            get_aud_info_func = M4A_GetContentDescInfo;
            break;
    #endif /* defined(MP4_CODEC) && defined(AAC_DECODE) */ 
    #ifdef DAF_DECODE
        case MED_TYPE_DAF:
            get_aud_info_func = DAF_GetContentDescInfo;
            break;
    #endif /* DAF_DECODE */ 
        case MED_TYPE_PCM_8K:
        case MED_TYPE_PCM_16K:
            get_aud_info_func = PCM_GetContentDescInfo;
            break;
        case MED_TYPE_GSM_EFR:
            get_aud_info_func = VM_GetContentDescInfo;
            break;
    }

    if (get_aud_info_func != NULL)
    {
        aud_info = (audInfoStruct*) & id3_tag;  /* reuse id3_tag memory for aud_info */
        if (FSAL_Open(&fsal_handle, filename, FSAL_READ) == FSAL_OK)
        {
            if (get_aud_info_func(&fsal_handle, aud_info, (void*)format) == MEDIA_SUCCESS)
            {
            #ifdef WMA_DECODE
                if (format == MED_TYPE_WMA)
                {
                    kal_wstrncpy(
                        (kal_wchar*) aud_info_p->title,
                        (const kal_wchar*)aud_info->title,
                        MAX_ID3_TITLE_LEN);
                    kal_wstrncpy(
                        (kal_wchar*) aud_info_p->artist,
                        (const kal_wchar*)aud_info->artist,
                        MAX_ID3_ARTIST_LEN);
                    kal_wstrncpy(
                        (kal_wchar*) aud_info_p->album,
                        (const kal_wchar*)aud_info->album,
                        MAX_ID3_ALBUM_LEN);
                }
            #endif /* WMA_DECODE */ 
                channel_num = (aud_info->stereo ? 2 : 1);
                daf_set_data_info(
                    aud_info_p,
                    channel_num,
                    aud_info->time,
                    size,
                    aud_info->bitRate,
                    aud_info->sampleRate);
            }
            FSAL_Close(&fsal_handle);
        }
    }

    audio_input_stream_free(input_stream);

    return KAL_TRUE;
}

#endif /* __RICH_AUDIO_PROFILE__ */ 

#endif /* MED_NOT_PRESENT */ 

⌨️ 快捷键说明

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