Esempio n. 1
0
/*****************************************************************************
 * FUNCTION
 *  aud_stretch_check_file_format_req_hdlr
 * DESCRIPTION
 *  This function is to check format for audio file
 * PARAMETERS
 *  ilm_ptr     [?]     
 * RETURNS
 *  void
 *****************************************************************************/
void aud_stretch_check_file_format_req_hdlr(ilm_struct *ilm_ptr)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int16 format;
    kal_bool is_support;
    STFSAL ext_file;
    FSAL_Status fsal_ret;
    media_stretch_check_file_format_req_struct *msg_p;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    msg_p = (media_stretch_check_file_format_req_struct*) ilm_ptr->local_para_ptr;

    /* Get file audio type from extension */
    format = med_get_media_type(msg_p->file_path);

    if(format == MED_TYPE_MP4 || format == MED_TYPE_3GP)
    {
        kal_uint8 result;

        /* Get video's audio type */
        result = aud_stretch_is_aduio_in_video_PP_support(msg_p->file_path, NULL, 0, 0);

        aud_app_set_result(result);
    }
    else
    {
        /* get file handle */
        fsal_ret = FSAL_Open(&ext_file, (void*)msg_p->file_path, FSAL_READ);

        if (fsal_ret == FSAL_OK)
        {
            /* Check if the file can play with time stretch on */
            is_support = AudioPP_TS_IsSupport((Media_Format) format, &ext_file);

            FSAL_Close(&ext_file);

            if (is_support)
            {
                aud_app_set_result(MED_RES_OK);
            }
            else
            {
                aud_app_set_result(MED_RES_UNSUPPORTED_SPEED);
            }
        }
        else if (fsal_ret == FSAL_OPEN_ERROR)
        {
            aud_app_set_result(MED_RES_OPEN_FILE_FAIL);
        }
        else
        {
            aud_app_set_result(MED_RES_FAIL);
        }
    }
    EFFECT_SET_EVENT(TS_EVT_CHECK);
}
Esempio n. 2
0
/*****************************************************************************
 * FUNCTION
 *  aud_trim_open_req_hdlr
 * DESCRIPTION
 *  This function is used to open a trimming handler.
 * PARAMETERS
 *
 * RETURNS
 *  void
 *****************************************************************************/
void aud_trim_open_req_hdlr(ilm_struct *ilm_ptr)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint32                  file_len = 0;
    FSAL_Status                 fsal_result;
    kal_uint8*                  fsal_buf_p = NULL;
    media_open_func_ptr         open_fct = NULL;
    kal_int32                   result = MED_RES_FAIL;
    l4aud_trim_open_req_struct* msg_p = (l4aud_trim_open_req_struct*) ilm_ptr->local_para_ptr;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    ASSERT(msg_p->file_name_in && msg_p->file_name_out && msg_p->handle_p);
    
    /* Check if trimming handler is already opened. Currently, we only support one instance. */
    if (g_is_trim_opened)
    {
        result = MED_RES_BUSY;
        goto aud_trim_open_failed;
    }

    /* Initialize context */
    g_is_trim_opened = KAL_TRUE;
    memset(&g_trim_ctx, 0, sizeof(aud_trim_context_t));
    g_trim_ctx.file_output = -1;
    g_trim_ctx.src_mod_id = ilm_ptr->src_mod_id;

    /* Select a MHdl open function per media format */
    g_trim_ctx.format = med_get_media_type(msg_p->file_name_in);

    switch (g_trim_ctx.format)
    {
    #ifdef DAF_DECODE
        case MED_TYPE_DAF:
    #endif /* DAF_DECODE */
            open_fct = DAF_Open;
            break;
        default:
            /* Unsupport format */
            ASSERT(0);
    }

    if (open_fct)
    {
        /* Create a FSAL handler */
        if ((fsal_result = FSAL_Open(&g_trim_ctx.fsal_handle, msg_p->file_name_in, FSAL_READ_SHARED)) != FSAL_OK)
        {
            result = MED_RES_OPEN_FILE_FAIL;
            goto aud_trim_open_failed;
        }

        g_trim_ctx.is_fsal_opened = KAL_TRUE;
        
        fsal_buf_p = (kal_uint8*) get_ctrl_buffer(sizeof(kal_uint8) * AUD_PROC_BUF_SIZE);
        FSAL_SetBuffer(&g_trim_ctx.fsal_handle, AUD_PROC_BUF_SIZE, fsal_buf_p);

        /* Open a MHdl handler */
        g_trim_ctx.mhdl_handle_p = open_fct(_aud_trim_event_callback_fct, &g_trim_ctx.fsal_handle, NULL);
        _AUD_TRIM_TRACE(g_trim_ctx.mhdl_handle_p, g_trim_ctx.format, fsal_buf_p);

        if (g_trim_ctx.mhdl_handle_p == NULL)
        {
            result = MED_RES_BAD_FORMAT;
            goto aud_trim_open_failed;
        }

        /* Create output file handle */
        g_trim_ctx.file_output = FS_Open(msg_p->file_name_out, FS_READ_WRITE | FS_OPEN_SHARED | FS_NOBUSY_CHECK_MODE);
    
        if (g_trim_ctx.file_output >= 0) /* File already exists */
        {
            /* Check if the size of file is 0 because MMI may create the file to be trimmed to in advance */
            FS_GetFileSize(g_trim_ctx.file_output, &file_len);
            
            if (file_len != 0)
            {
                /* Seek to the beginning of the file to overwrite all the data */
                FS_Seek(g_trim_ctx.file_output, 0, FS_FILE_BEGIN);
            }
        }
        else /* File does not exist */
        {
            /* Create a new file */
            g_trim_ctx.file_output = FS_Open(msg_p->file_name_out, FS_CREATE | FS_READ_WRITE | FS_OPEN_SHARED | FS_NOBUSY_CHECK_MODE);
        }

        _AUD_TRIM_TRACE(g_trim_ctx.file_output, file_len, -1);

        if (g_trim_ctx.file_output < 0)
        {
            result = MED_RES_OPEN_FILE_FAIL;
            goto aud_trim_open_failed;
        }
    }

    /* Open successful */
    *msg_p->handle_p = (kal_uint32)g_trim_ctx.mhdl_handle_p;
    AUD_TRIM_RETURN(MED_RES_OK);
    return;

aud_trim_open_failed:
    /* Open failed */
    _aud_trim_close();
    *msg_p->handle_p = (kal_uint32)0;
    AUD_TRIM_RETURN(result);
}
Esempio n. 3
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. 4
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;
}