📄 aud_daf_parser.c
字号:
}
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 + -