Esempio n. 1
0
/*****************************************************************************
 * 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, DRM_PERMISSION_PLAY)) < 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)
    {
    #ifdef AU_DECODE
        case MED_TYPE_AU:
            get_aud_info_func = AU_GetContentDescInfo;
            break;
    #endif /* AU_DECODE */
    #ifdef AIFF_DECODE
        case MED_TYPE_AIFF:
            get_aud_info_func = AIFF_GetContentDescInfo;
            break;
    #endif /* AIFF_DECODE */
        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;
        case MED_TYPE_M4A:
            get_aud_info_func = M4A_GetContentDescInfo;
            break;
    #endif /* AAC_DECODE */ 
    #ifdef WMA_DECODE
        case MED_TYPE_WMA:
            get_aud_info_func = WMA_GetContentDescInfo;
            break;
    #endif /* WMA_DECODE */ 
    #if defined(MED_PURE_AUDIO)
        case MED_TYPE_MP4:
        case MED_TYPE_3GP:
            get_aud_info_func = M4A_GetContentDescInfo;
            break;
    #endif /* defined(MED_PURE_AUDIO) */ 
    #ifdef DAF_DECODE
        case MED_TYPE_DAF:
    #ifdef MUSICAM_DECODE
        case MED_TYPE_MUSICAM:
    #endif
            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;
}
Esempio n. 2
0
kal_bool get_aud_meta_data_file(kal_wchar *filename, aud_info_struct *aud_info_p)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint32 size;
    FS_HANDLE file;
    audio_input_stream_struct *input_stream;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    

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

    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);
        }
        if (id3_tag.frames[ID3_FRAME_COPYRIGHT].text != NULL)
        {
            kal_wstrncpy(
                (kal_wchar*) aud_info_p->copyright,
                (const kal_wchar*)id3_tag.frames[ID3_FRAME_COPYRIGHT].text,
                MAX_ID3_COPYRIGHT_LEN);
        }
    }
    DRM_close_file(file);

    audio_input_stream_free(input_stream);

    return KAL_TRUE;
}
Esempio n. 3
0
/*****************************************************************************
* FUNCTION
*     get_aud_info
* DESCRIPTION
*     
* IMPACT 
*     
* PARAMETERS
*     kal_wchar* filename
*     aud_info_struct* aud_info_p
* RETURNS
*     kal_bool
* GLOBALS AFFECTED
*     
*****************************************************************************/
kal_bool get_aud_info( kal_wchar* filename, aud_info_struct* aud_info_p )
{
	kal_int16 format;
	kal_uint32 size;
	FS_HANDLE file;
#ifdef __AUD_NEW_INTERFACE__
	STFSAL fsal_handle;
	audInfoStruct* aud_info;
#endif // __AUD_NEW_INTERFACE__ 
	audio_input_stream_struct* input_stream;
	mmi_trace(1,"chenhe,get_aud_info");
	if( (file = DRM_open_file( (const UINT8 *)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 );

	memset(aud_info_p, 0, sizeof(aud_info_struct) );
	daf_set_data_info( aud_info_p, 0, 0, size, 0, 0 );
		mmi_trace(1,"chenhe,get_aud_info,format is %d,size is %p",format,size);

	if( format == MED_TYPE_DAF )
		daf_parse_data_info( aud_info_p, input_stream, &id3_tag );
	else
	{
#ifdef AAC_DECODE
		if( format == MED_TYPE_AAC )
		{
			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 );
			}
		}
#endif // AAC_DECODE
	}
	DRM_close_file( file );

#ifdef __AUD_NEW_INTERFACE__
	if( format == MED_TYPE_AAC || format == MED_TYPE_WMA )
	{
		aud_info = (audInfoStruct*) &id3_tag; // reuse id3_tag memory for aud_info
		if( FSAL_Open( &fsal_handle, filename, FSAL_READ ) == FSAL_OK )
		{
			media_get_info_func_ptr getInfoFunc;
			switch( format )
			{
#ifdef AAC_DECODE
			case MED_TYPE_AAC:
				getInfoFunc = AAC_GetContentDescInfo;
				break;
#endif // AAC_DECODE
#ifdef WMA_DECODE
			case MED_TYPE_WMA:
				getInfoFunc = WMA_GetContentDescInfo;
				break;
#endif // WMA_DECODE
			default:
				ASSERT(0);
				break;
			}
			if( getInfoFunc( &fsal_handle, aud_info ) == 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 );
		}
	}
#endif // __AUD_NEW_INTERFACE__

	audio_input_stream_free( input_stream );
	
	return KAL_TRUE;
}