Exemplo n.º 1
0
/*****************************************************************************
 * 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;
}
Exemplo n.º 2
0
/*****************************************************************************
* FUNCTION
*     daf_seek
* DESCRIPTION
*     
* IMPACT 
*     
* PARAMETERS
*     aud_info_struct *info_p
*     kal_uint32* offset
* RETURNS
*     kal_bool
* GLOBALS AFFECTED
*     
*****************************************************************************/
kal_bool daf_seek( audio_input_stream_struct *input_stream, kal_uint32* offset )
{
	kal_int32 v2_tag_size;
	
	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;
}
Exemplo n.º 3
0
/*****************************************************************************
 * FUNCTION
 *  daf_parse_data_info
 * DESCRIPTION
 *  
 * PARAMETERS
 *  info_p              [?]     
 *  input_stream        [?]     
 *  id3_tag             [?]     
 * RETURNS
 *  void
 *****************************************************************************/
void daf_parse_data_info(aud_info_struct *info_p, audio_input_stream_struct *input_stream, id3_tag_struct *id3_tag)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int32 data_size;
    kal_uint32 offset;
    kal_bool v2_result = KAL_FALSE;
    kal_bool v1_result = KAL_FALSE;
    kal_bool daf_parse_result;
    daf_data_info_struct daf_data_info;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* zero all info_p */
    memset(info_p, 0, sizeof(aud_info_struct));

    /* init id3 tag data structure */
    id3_tag_init(id3_tag);

    audio_input_stream_seek(input_stream, 0);
    /*
     * check id3v2 magic word -- "ID3"
     * and parse & save data to frames
     */
    v2_result = id3_tag_parse_v2_tag(input_stream, id3_tag);

    /*
     * parse daf frame to get duration, bitrate, samplerate, channel_num
     */
    if (v2_result)
    {
        /* skip id3v2 tag */
        offset = id3_tag->v2_size + 10;
        if (id3_tag->v2_footer)
        {
            offset += 10;
        }
    }
    else
    {
        offset = 0;
    }

    audio_input_stream_seek(input_stream, offset);
    daf_parse_result = daf_parse(input_stream, &offset, &daf_data_info);

    /* 
     * parse id3v1 tag
     */
    if ((data_size = audio_input_stream_get_data_size(input_stream)) >= 128)
    {
        /* move to last 128 bytes before file end for checking id3v1 tag */
        audio_input_stream_seek(input_stream, data_size - 128);

        /*
         * check id3v1 magic word -- "TAG"
         * and parse & save data to frames
         */
        v1_result = id3_tag_parse_v1_tag(input_stream, id3_tag);
    }
    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);
    }
}
Exemplo n.º 4
0
/*****************************************************************************
* FUNCTION
*     daf_parse_data_info
* DESCRIPTION
*     
* IMPACT 
*     
* PARAMETERS
*     aud_info_struct *info_p
*     audio_input_stream_struct* input_stream
*     id3_tag_struct* id3_tag
* RETURNS
*     void
* GLOBALS AFFECTED
*     
*****************************************************************************/
void daf_parse_data_info( aud_info_struct *info_p, audio_input_stream_struct* input_stream, id3_tag_struct* lid3_tag )
{
	kal_int32 data_size;
	kal_uint32 offset;
	kal_bool v2_result = KAL_FALSE;
	kal_bool v1_result = KAL_FALSE;
	kal_bool daf_parse_result;
	daf_data_info_struct daf_data_info;
	
	// init id3 tag data structure
	id3_tag_init( lid3_tag );
	
	audio_input_stream_seek( input_stream, 0 );
	/*
	 * check id3v2 magic word -- "ID3"
	 * and parse & save data to frames
	 */
	v2_result = id3_tag_parse_v2_tag( input_stream, lid3_tag );
	mmi_trace(1,"chenhe,daf_parse_data_info,v2_result is %d",v2_result);
	/*
	 * parse daf frame to get duration, bitrate, samplerate, channel_num
	 */
	if( v2_result )
	{
		// skip id3v2 tag
		offset = lid3_tag->v2_size + 10;
		if( lid3_tag->v2_footer )
			offset += 10;
	}
	else
		offset = 0;
	
	audio_input_stream_seek( input_stream, offset );
	daf_parse_result = daf_parse( input_stream, &offset, &daf_data_info );
	
	/* 
	 * parse id3v1 tag
	 */
	if( (data_size = audio_input_stream_get_data_size( input_stream )) >= 128 )
	{
		// move to last 128 bytes before file end for checking id3v1 tag
		audio_input_stream_seek( input_stream, data_size - 128 );
		
		/*
		 * check id3v1 magic word -- "TAG"
		 * and parse & save data to frames
		 */
		v1_result = id3_tag_parse_v1_tag( input_stream, lid3_tag );
	}
	else
		v1_result = KAL_FALSE;
	mmi_trace(1,"chenhe,daf_parse_data_info,v1_result is %d",v1_result);

	// copy title to info_p
	if( lid3_tag->frames[ID3_FRAME_TITLE].text != NULL )
		kal_wstrncpy( (kal_wchar*)info_p->title, (const kal_wchar*)lid3_tag->frames[ID3_FRAME_TITLE].text, MAX_ID3_TITLE_LEN );
	
	// copy artist to info_p
	if( lid3_tag->frames[ID3_FRAME_ARTIST].text != NULL )
		kal_wstrncpy( (kal_wchar*)info_p->artist, (const kal_wchar*)lid3_tag->frames[ID3_FRAME_ARTIST].text, MAX_ID3_ARTIST_LEN );
	
	// copy album to info_p
	if( lid3_tag->frames[ID3_FRAME_ALBUM].text != NULL )
		kal_wstrncpy( (kal_wchar*)info_p->album, (const kal_wchar*)lid3_tag->frames[ID3_FRAME_ALBUM].text, MAX_ID3_ALBUM_LEN );
	
	// copy genre to info_p
	if( lid3_tag->frames[ID3_FRAME_GENRE].text != NULL )
		kal_wstrncpy( (kal_wchar*)info_p->genre, (const kal_wchar*)lid3_tag->frames[ID3_FRAME_GENRE].text, MAX_ID3_GENRE_LEN );
	
	// copy year to info_p
	if( lid3_tag->frames[ID3_FRAME_YEAR].text != NULL )
		kal_wstrncpy( (kal_wchar*)info_p->year, (const kal_wchar*)lid3_tag->frames[ID3_FRAME_YEAR].text, MAX_ID3_YEAR_LEN );
	mmi_trace(1,"chenhe,daf_parse_data_info,daf_parse_result is %d",daf_parse_result);
	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 );
}