Ejemplo n.º 1
0
/*****************************************************************************
 * FUNCTION
 *  gdi_image_decoder_stop_all
 * DESCRIPTION
 *  
 * PARAMETERS
 *  void
 * RETURNS
 *  
 *****************************************************************************/
GDI_RESULT gdi_image_decoder_stop_all(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    GDI_ENTER_CRITICAL_SECTION(gdi_image_decoder_stop_all)
    S16 next_idx;

    /* check if anything in decoder */
    if (gdi_image_decoder_item_first_idx == -1)
    {
        GDI_RETURN(GDI_SUCCEED);
    }

    /* stop current running decoder */
    switch (gdi_image_decoder_item_list[gdi_image_decoder_item_first_idx].img_type)
    {
        case GDI_IMAGE_TYPE_JPG_FILE:
            media_img_stop(MOD_MMI);
            break;

        default:
            GDI_ASSERT(0);
    }

    /* close file */
    /* DRM_REPLACE */
    /* FS_Close(gdi_image_decoder_item_list[gdi_image_decoder_item_first_idx].file_handle); */
    DRM_close_file(gdi_image_decoder_item_list[gdi_image_decoder_item_first_idx].file_handle);

    next_idx = gdi_image_decoder_item_first_idx;

    while (next_idx != -1)
    {
        /* close all opened file */
        if (gdi_image_decoder_item_list[next_idx].file_handle >= 0)
        {
            /* DRM_REPLACE */
            /* FS_Close(gdi_image_decoder_item_list[next_idx].file_handle); */
            DRM_close_file(gdi_image_decoder_item_list[next_idx].file_handle);
            gdi_image_decoder_item_list[next_idx].file_handle = -1;
            /* gdi_image_decoder_item_list[next_idx].file_size        = 0; */
        }

        gdi_image_decoder_item_list[next_idx].is_used = FALSE;
        next_idx = gdi_image_decoder_item_list[next_idx].next_idx;
    }

    gdi_image_decoder_item_first_idx = -1;
    gdi_image_decoder_item_last_idx = -1;

    GDI_RETURN(GDI_SUCCEED);

    GDI_EXIT_CRITICAL_SECTION(gdi_image_decoder_stop_all)
}
/*****************************************************************************
 * FUNCTION
 *  mmi_fmsr_start_record
 * DESCRIPTION
 *  Start to record FM radio
 * PARAMETERS
 *  filename        [IN]        The record file name
 *  format          [IN]        The record file format
 *  quality         [IN]        The record file quality
 * RETURNS
 *  void
 *****************************************************************************/
BOOL mmi_fmsr_start_record(UI_string_type filename, U8 format, U8 quality)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U8 file_format;
    mdi_result result;

#ifdef __DRM_SUPPORT__
    {
        FS_HANDLE handle;
        BOOL is_permitted = FALSE;

        /*----------------------------------------------------------------*/
        /* Code Body                                                      */
        /*----------------------------------------------------------------*/
        if ((handle = DRM_open_file((PU16) filename, FS_READ_ONLY, DRM_PERMISSION_NONE)) >= FS_NO_ERROR)
        {
            if (DRM_get_object_method(handle, NULL) == DRM_METHOD_NONE)
            {
                is_permitted = TRUE;
            }
            DRM_close_file(handle);
        }
        else if (handle < -1)   /* file open error. but not DRM related problem */
        {
            is_permitted = TRUE;
        }

        if (!is_permitted)
        {
            mmi_fmsr_record_error_hdlr(DRM_NOT_PERMIT_TO_APPEND);
            return FALSE;
        }
    }
#endif /* __DRM_SUPPORT__ */ 

#ifdef __MMI_BACKGROUND_CALL__
    if (srv_ucm_is_background_call())
    {
        return FALSE;
    }
#endif /* __MMI_BACKGROUND_CALL__ */ 

    switch (format)
    {
    #if !defined(__FMRADIO_I2S_SUPPORT__) || defined(__I2S_AMR_RECORD__)
        case FMSR_FORMAT_AMR:
            file_format = MEDIA_AMR;
            break;
    #endif 
    #if !defined(__FMRADIO_I2S_SUPPORT__) || defined(__I2S_WAV_RECORD__)
        case FMSR_FORMAT_WAV:
            file_format = MEDIA_WAV_DVI_ADPCM;
            break;
    #endif 
    #if !defined(__FMRADIO_I2S_SUPPORT__) || defined(__I2S_AWB_RECORD__)
    #if defined(AMRWB_ENCODE) && defined(AMRWB_DECODE)
        case FMSR_FORMAT_AWB:
            file_format = MEDIA_AMR_WB;
            break;
#endif 
    #endif /* defined(AMRWB_ENCODE) && defined(AMRWB_DECODE) */ 
    #if defined(__I2S_DAF_RECORD__)
        case FMSR_FORMAT_DAF:
            file_format = MDI_FORMAT_DAF;
            break;
    #endif 
        default:
            file_format = MEDIA_AMR;
            break;

    }

    result = mdi_fmr_start_record(filename, file_format, quality);

    if (result == MDI_AUDIO_SUCCESS)
    {
        g_fmsr_cntx.rec.is_start_duration = TRUE;
        g_fmsr_cntx.rec.state = FMSR_STATE_RECORD;
        return TRUE;
    }
    /* Record request fail, need to stop FM radio playing */
    else if (g_fmsr_cntx.rec.state == FMSR_STATE_READY)
    {
        /* Do not show message in the FM radio stop callback. */
        g_fmsr_cntx.rec.is_show_msg = FALSE;
        mmi_fmsr_power_off();
    }

    /* Show error message for the error cause */
    g_fmsr_cntx.rec.is_show_msg = TRUE;
    mmi_fmsr_record_error_hdlr(result);
    return FALSE;

}
Ejemplo n.º 3
0
/*****************************************************************************
 * FUNCTION
 *  gdi_image_decoder_decode_finish_hdlr
 * DESCRIPTION
 *  
 * PARAMETERS
 *  msgPtr      [?]     
 * RETURNS
 *  void
 *****************************************************************************/
void gdi_image_decoder_decode_finish_hdlr(void *msgPtr)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U8 *dest_buf_ptr;
    U8 *src_buf_ptr;

    S32 index;
    S32 dest_width;
    S32 dest_height;
    S32 dest_offset_x;
    S32 dest_offset_y;
    S32 dest_pitch;
    S32 src_pitch;
    S32 layer_offset_x, layer_offset_y;
    BOOL is_blt;
    gdi_rect_struct dest_clip;
    gdi_handle handle;
    S32 fs_ret;
    gdi_handle old_layer_handle;
    gdi_handle old_lcd_handle;
    U8 src_cf;

    media_img_decode_finish_ind_struct *para_ptr = (media_img_decode_finish_ind_struct*) msgPtr;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* no item. this will occure if driver already send out message to GDI, meanwhile user call
       decoder_stop to remove this decoder item. so this index will be -1 */
    if (gdi_image_decoder_item_first_idx == -1)
    {
        return;
    }

    /* jpeg_local_para_struct *para_ptr = (jpeg_local_para_struct*)msgPtr; */

    /* ignore this message if it is not in the list */
    if (para_ptr->seq_num != gdi_image_decoder_item_list[gdi_image_decoder_item_first_idx].seq_num)
    {
        return;
    }

    /* check if hw is powered on */
    /* ASSERT(gdi_image_jpeg_is_hw_init == TRUE); */

    /* close file handle */
    /* DRM_REPLACE */
    /* fs_ret = FS_Close(gdi_image_decoder_item_list[gdi_image_decoder_item_first_idx].file_handle); */
    fs_ret = DRM_close_file(gdi_image_decoder_item_list[gdi_image_decoder_item_first_idx].file_handle);
    ASSERT(fs_ret >= 0);

    handle = gdi_image_decoder_item_list[gdi_image_decoder_item_first_idx].seq_num;

    /* if decode succeed */
    if (para_ptr->result == MED_RES_OK)
    {
        /* set variables */
        index = gdi_image_decoder_item_first_idx;

        dest_width = gdi_image_decoder_item_list[index].dest_width;
        dest_height = gdi_image_decoder_item_list[index].dest_height;

        dest_offset_x = gdi_image_decoder_item_list[index].dest_offset_x;
        dest_offset_y = gdi_image_decoder_item_list[index].dest_offset_y;
        dest_clip.x1 = gdi_image_decoder_item_list[index].clipx1;
        dest_clip.y1 = gdi_image_decoder_item_list[index].clipy1;
        dest_clip.x2 = gdi_image_decoder_item_list[index].clipx2;
        dest_clip.y2 = gdi_image_decoder_item_list[index].clipy2;
        dest_pitch = gdi_act_layer->width;

        is_blt = gdi_image_decoder_item_list[index].is_blt;

        /* get actual resized image, with stuffing pixels */
        src_pitch = para_ptr->image_width;

        /* if not totally out of clip region */
        if (!((dest_offset_x > dest_clip.x2) ||
              (dest_offset_y > dest_clip.y2) ||
              (dest_offset_x + dest_width < dest_clip.x1) || (dest_offset_y + dest_height < dest_clip.y1)))
        {

            gdi_lcd_get_active(&old_lcd_handle);
            gdi_lcd_set_active(gdi_image_decoder_item_list[index].lcd_handle);

            gdi_layer_get_active(&old_layer_handle);
            gdi_layer_set_active(gdi_image_decoder_item_list[index].layer_handle);

            gdi_layer_get_buffer_ptr(&dest_buf_ptr);
            src_buf_ptr = (U8*) gdi_work_buffer;

    #ifdef GDI_USING_2D_ENGINE_V2
            if (gdi_act_layer->vcf == GDI_COLOR_FORMAT_32)
            {
                src_cf = GDI_COLOR_FORMAT_24;
            }
            else
            {
                src_cf = gdi_act_layer->vcf;
            }
       		gdi_bitblt_internal((U8*)gdi_work_buffer, dest_width, 
	    		0, 0, 
		    	dest_width, dest_height,
			    src_cf,
			    gdi_act_layer->buf_ptr, gdi_act_layer->width,
			    dest_offset_x, dest_offset_y,
			    dest_clip.x1, dest_clip.y1, dest_clip.x2, dest_clip.y2,
			    gdi_act_layer->vcf, gdi_act_layer->layer_size,
			    FALSE,
			    FALSE, 0,
			    FALSE, 0,
			    FALSE, 0,
			    GDI_TRANSFORM_NONE,
			    GDI_TRANSFORM_DIRECTION_LT);
            if (gdi_act_layer_info->source_key_enable)
            {
                gdi_act_replace_src_key(
                    gdi_act_layer->buf_ptr,
                    gdi_act_layer->width,
                    dest_offset_x,
                    dest_offset_y,
                    dest_clip.x1,
                    dest_clip.y1,
                    dest_clip.x2,
                    dest_clip.y2,
                    gdi_act_layer_info->source_key,
                    dest_width,
                    dest_height);
            }

    #else
            gdi_2d_memory_blt(
                src_buf_ptr,    /* src_ptr */
                src_pitch,      /* src_pitch */
                0,              /* src_offset_x */
                0,              /* src_offset_y */
                dest_width,     /* src_width */
                dest_height,    /* src_height */
                dest_buf_ptr,   /* dest_ptr */
                dest_pitch,     /* dest_pitch */
                dest_offset_x,  /* dest_offset_x */
                dest_offset_y,  /* dest_offset_y */
                dest_clip);     /* dest_clip */
    #endif

            gdi_layer_get_position(&layer_offset_x, &layer_offset_y);

            layer_offset_x += dest_offset_x;
            layer_offset_y += dest_offset_y;

            if (is_blt)
            {
                gdi_layer_blt_previous(
                    layer_offset_x,
                    layer_offset_y,
                    layer_offset_x + dest_width,
                    layer_offset_y + dest_height);
            }

            gdi_layer_set_active(old_layer_handle);
            gdi_lcd_set_active(old_lcd_handle);
        }

        if (gdi_image_decoder_result_callback != NULL)
        {
            gdi_image_decoder_result_callback(GDI_SUCCEED, handle);
        }
    }
    else
    {
        if (gdi_image_decoder_result_callback != NULL)
        {
            gdi_image_decoder_result_callback(GDI_FAILED, handle);
        }
    }

    gdi_image_decoder_item_list[gdi_image_decoder_item_first_idx].is_used = FALSE;
    gdi_image_decoder_item_first_idx = gdi_image_decoder_item_list[gdi_image_decoder_item_first_idx].next_idx;

    if (gdi_image_decoder_item_first_idx != -1)
    {
        gdi_image_decoder_decode_from_list();
    }

}
Ejemplo n.º 4
0
/*****************************************************************************
 * FUNCTION
 *  gdi_image_decoder_stop
 * DESCRIPTION
 *  
 * PARAMETERS
 *  handle      [IN]        
 * RETURNS
 *  
 *****************************************************************************/
GDI_RESULT gdi_image_decoder_stop(gdi_handle handle)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    GDI_ENTER_CRITICAL_SECTION(gdi_image_decoder_stop)
    S16 this_idx;
    S16 prev_idx = -1;

    this_idx = gdi_image_decoder_item_first_idx;

    while (this_idx != -1)
    {
        if (handle == gdi_image_decoder_item_list[this_idx].seq_num)
        {
            /* stop jpeg decoderr driver */

            if (this_idx == gdi_image_decoder_item_first_idx)
            {
                /* is the one that currently decoding - stop it */

                /* handle each decoder's stop function */
                switch (gdi_image_decoder_item_list[this_idx].img_type)
                {
                    case GDI_IMAGE_TYPE_JPG_FILE:
                        media_img_stop(MOD_MMI);
                        break;

                    default:
                        GDI_ASSERT(0);
                }

                /* close file */
                /* DRM_REPLACE */
                /* FS_Close(gdi_image_decoder_item_list[this_idx].file_handle); */
                DRM_close_file(gdi_image_decoder_item_list[this_idx].file_handle);

                gdi_image_decoder_item_list[this_idx].is_used = FALSE;
                gdi_image_decoder_item_first_idx = gdi_image_decoder_item_list[this_idx].next_idx;

                if (gdi_image_decoder_item_first_idx != -1)
                {
                    gdi_image_decoder_decode_from_list();
                }
            }
            else
            {
                /* not first one */
                /* DRM_REPLACE */
                /* FS_Close(gdi_image_decoder_item_list[this_idx].file_handle); */
                DRM_close_file(gdi_image_decoder_item_list[this_idx].file_handle);

                /* file is successfully read into buffer, clear file handle */
                gdi_image_decoder_item_list[this_idx].file_handle = -1;
                /* gdi_image_decoder_item_list[this_idx].file_size              = 0; */

                gdi_image_decoder_item_list[this_idx].is_used = FALSE;
                gdi_image_decoder_item_list[prev_idx].next_idx = gdi_image_decoder_item_list[this_idx].next_idx;
            }

            GDI_RETURN(GDI_SUCCEED);
        }

        prev_idx = this_idx;
        this_idx = gdi_image_decoder_item_list[this_idx].next_idx;
    }

    GDI_RETURN(GDI_IMAGE_DECODER_ERR_WRONG_HANDLE);

    GDI_EXIT_CRITICAL_SECTION(gdi_image_decoder_stop)
}
Ejemplo n.º 5
0
/*****************************************************************************
 * FUNCTION
 *  gdi_image_decoder_decode_file_with_output_clipping
 * DESCRIPTION
 *  
 * PARAMETERS
 *  offset_x            [IN]        
 *  offset_y            [IN]        
 *  width               [IN]        
 *  height              [IN]        
 *  output_clipx1       [IN]        
 *  output_clipy1       [IN]        
 *  output_clipx2       [IN]        
 *  output_clipy2       [IN]        
 *  is_blt              [IN]        
 *  image_name          [?]         
 *  handle_ptr          [?]         
 * RETURNS
 *  
 *****************************************************************************/
GDI_RESULT gdi_image_decoder_decode_file_with_output_clipping(
            S32 offset_x,
            S32 offset_y,
            S32 width,
            S32 height,
            S32 output_clipx1,
            S32 output_clipy1,
            S32 output_clipx2,
            S32 output_clipy2,
            BOOL is_blt,
            S8 *image_name,
            gdi_handle *handle_ptr)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    GDI_ENTER_CRITICAL_SECTION(gdi_image_decoder_decode_file)
    S16 valid_idx;
    S16 this_idx;
    U32 file_size;
    BOOL has_entry = FALSE;
    FS_HANDLE file_handle;
    U16 image_type;

    if (handle_ptr != NULL)
    {
        *handle_ptr = GDI_ERROR_HANDLE;
    }

     
    if (width == 0 || height == 0)
    {
        GDI_RETURN(GDI_SUCCEED);
    }
    /* check if it is a decodable file format */
    image_type = gdi_image_get_type_from_file(image_name);

    if (image_type != GDI_IMAGE_TYPE_JPG_FILE)  /* currently, we only support jpeg file */
    {
        GDI_RETURN(GDI_IMAGE_DECODER_ERR_INVALID_IMG_TYPE);
    }

    /* find a valid entry to record this jpeg decoder */
    for (valid_idx = 0; valid_idx < GDI_IMAGE_DECODER_ITEM_COUNT; valid_idx++)
    {
        if (gdi_image_decoder_item_list[valid_idx].is_used == FALSE)
        {
            has_entry = TRUE;
            break;
        }
    }

    if (has_entry == FALSE)
    {
        /* cant find entry to save jpeg decoder data */
        GDI_RETURN(GDI_IMAGE_DECODER_ERR_NO_ITEM_ENTRY);
    }

    /* open file */
    file_handle = DRM_open_file((U16*) image_name, FS_READ_ONLY, 0);

    if (file_handle >= 0)
    {
        /* check if size can fit into file buffer */
        /* DRM_REPLACE */
        /* FS_GetFileSize(file_handle, (kal_uint32*)&file_size); */
        DRM_file_size(file_handle, (kal_uint32*) & file_size);

        /* check if dest size larger than intermediate frame buffer */
        if (gdi_image_decoder_frame_buf_size < (U32) ((width + 16) * (height + 16)))    /* +16 for jpeg's stuffing */
        {
            /* DRM_REPLACE */
            /* FS_Close(file_handle); */
            DRM_close_file(file_handle);
            GDI_RETURN(GDI_IMAGE_DECODER_ERR_FRAME_BUF_NOT_ENOUGH);
        }

        if (gdi_image_decoder_item_first_idx == -1)
        {
            /* first in the list, re-assign first index */
            gdi_image_decoder_item_first_idx = valid_idx;
        }
        else
        {
            this_idx = gdi_image_decoder_item_first_idx;

            /* loop to find next */
            while (this_idx != -1)
            {
                if (gdi_image_decoder_item_list[this_idx].next_idx == -1)
                {
                    gdi_image_decoder_item_list[this_idx].next_idx = valid_idx;
                    break;
                }

                this_idx = gdi_image_decoder_item_list[this_idx].next_idx;
            }
        }

        /* find a valid seq number */
        if (gdi_image_decoder_item_seq_num_idx < GDI_IMAGE_DECODER_ITEM_SEQ_NUM_LIMIT - 1)
        {
            gdi_image_decoder_item_seq_num_idx++;
        }
        else
        {
            gdi_image_decoder_item_seq_num_idx = 1;
        }

        gdi_image_decoder_item_list[valid_idx].is_used = TRUE;
        gdi_image_decoder_item_list[valid_idx].file_handle = file_handle;
        gdi_image_decoder_item_list[valid_idx].is_blt = is_blt;
        gdi_image_decoder_item_list[valid_idx].img_type = image_type;
        gdi_image_decoder_item_list[valid_idx].dest_offset_x = offset_x;
        gdi_image_decoder_item_list[valid_idx].dest_offset_y = offset_y;
        gdi_image_decoder_item_list[valid_idx].dest_width = (U16) width;
        gdi_image_decoder_item_list[valid_idx].dest_height = (U16) height;
        gdi_image_decoder_item_list[valid_idx].next_idx = -1;
        gdi_image_decoder_item_list[valid_idx].seq_num = gdi_image_decoder_item_seq_num_idx;
        gdi_image_decoder_item_list[valid_idx].layer_handle = (gdi_handle) gdi_act_layer;
        gdi_image_decoder_item_list[valid_idx].lcd_handle = GDI_LCD->act_handle;
        gdi_image_decoder_item_list[valid_idx].clipx1 = gdi_act_layer->clipx1;
        gdi_image_decoder_item_list[valid_idx].clipy1 = gdi_act_layer->clipy1;
        gdi_image_decoder_item_list[valid_idx].clipx2 = gdi_act_layer->clipx2;
        gdi_image_decoder_item_list[valid_idx].clipy2 = gdi_act_layer->clipy2;
        gdi_image_decoder_item_list[valid_idx].output_clipx1 = output_clipx1;
        gdi_image_decoder_item_list[valid_idx].output_clipy1 = output_clipy1;
        gdi_image_decoder_item_list[valid_idx].output_clipx2 = output_clipx2;
        gdi_image_decoder_item_list[valid_idx].output_clipy2 = output_clipy2;

        if (gdi_image_decoder_item_list[gdi_image_decoder_item_first_idx].next_idx == -1)
        {
            /* only one jpeg wait to decoder, call this function, if already has another jpeg is decoding,
               the following function will be called when the previous jpeg is decoderd */
            gdi_image_decoder_decode_from_list();
        }

        /* succeed create a jpeg decoder entry , return it's sequential no as handle */
        if (handle_ptr != NULL)
        {
            *handle_ptr = gdi_image_decoder_item_seq_num_idx;
        }

        GDI_RETURN(GDI_SUCCEED);
    }
    else
    {
        /* open File error */
        GDI_RETURN(GDI_IMAGE_DECODER_ERR_OPEN_FILE_FAILED);
    }
    GDI_EXIT_CRITICAL_SECTION(gdi_image_decoder_decode_file)
}
Ejemplo n.º 6
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;
}
Ejemplo n.º 7
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;
}
Ejemplo n.º 8
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;
}
Ejemplo n.º 9
0
/*****************************************************************************
 * FUNCTION
 *  mmi_rmgr_populate_drm_info_aux
 * DESCRIPTION
 *  
 * PARAMETERS
 *  rights          [?]         
 *  permission      [IN]        
 *  data            [?]         
 * RETURNS
 *  
 *****************************************************************************/
kal_bool mmi_rmgr_populate_drm_info_aux(kal_wchar *path, kal_uint8 app_perm, kal_uint8 *data, kal_int32 ref)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    FS_HANDLE input = FS_ERROR_RESERVED;
    kal_int32 start = 0, end = 0, cons_ret = DRM_RESULT_NON_DRM;
    kal_bool ret = KAL_FALSE, flag = KAL_TRUE;
    kal_uint8 permission;
    drm_method_enum method;
        
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* permission's incorrect, but ok here*/
    if (app_perm == DRM_PERMISSION_ALL)
         permission = DRM_PERMISSION_PLAY;
    else
        permission = app_perm;
    
    if(ref < 0)
    {
        input = DRM_open_file(path, FS_READ_ONLY, permission);

        if (input < FS_NO_ERROR)
            return ret;
        
        method = DRM_get_object_method(input, NULL);    
    }
    else
    {
        method = DRM_get_object_method_by_ref(ref);
    }
    
    if (method != DRM_METHOD_NONE)
    {
        if (ref < 0)
        {
            mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_RIGHT));
            mmi_ucs2cat((PS8) data, (PS8) L"\n");
            mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_PROTECTED));
            mmi_ucs2cat((PS8) data, (PS8) L"\n");
        }
    }
    else
    {
        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_RIGHT));
        mmi_ucs2cat((PS8) data, (PS8) L"\n");
        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_UNPROTECTED));
        mmi_ucs2cat((PS8) data, (PS8) L"\n");

        if (ref < 0)
        {
            DRM_close_file(input);
        }
        else
        {
            DRM_free_ro_detail();
        }
        return ret;
    }

#ifdef __DRM_V02__
    if (ref < 0)
    {
        kal_wchar *sepa = kal_wstrrchr(path, (kal_int32) '\\');
    
        if (DRM_is_archive(input, NULL) && sepa && kal_wstrncmp(sepa - 4, L".odf\\", 5) != 0)
        {
            /* Multi Part ODF */
            mmi_ucs2cat((PS8) data, (PS8) L" ");
            mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_MULTI_PART));
            mmi_ucs2cat((PS8) data, (PS8) L"\n");
            return ret;
        }
    }
#endif    
    
    if (method == DRM_METHOD_FORWARD_LOCK)
    {
        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_SUMMARY));
        mmi_ucs2cat((PS8) data, (PS8) L"\n");
        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_UNLIMITED));
        mmi_ucs2cat((PS8) data, (PS8) L"\n");
        
        if (ref < 0)
        {
            DRM_close_file(input);
        }
        else
        {
            DRM_free_ro_detail();
        }
        return ret;
    }

   
    do
    {
        if (permission & (DRM_PERMISSION_PLAY | DRM_PERMISSION_DISPLAY | DRM_PERMISSION_EXECUTE | DRM_PERMISSION_PRINT | DRM_PERMISSION_EXPORT))
        {
            drm_constraint_struct cons;
            if (ref < 0)
            {
                if (app_perm == DRM_PERMISSION_ALL && permission != DRM_PERMISSION_PLAY)
                {
                    input = DRM_open_file(path, FS_READ_ONLY, permission);

                    if (input < FS_NO_ERROR)
                        return KAL_FALSE;
                }
                
                cons_ret = DRM_get_constraint(input, NULL, permission, &cons);
            }
            else
            {
                cons_ret = DRM_get_constraint_by_ref(ref, permission, &cons);
            }
            
            if (cons_ret >= DRM_RESULT_OK && cons.status == DRM_STATUS_RIGHTS_PRESENT)
            {
                
                if (flag)
                {
                    mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_SUMMARY));
                    mmi_ucs2cat((PS8) data, (PS8) L"\n");
                    flag = KAL_FALSE;
                }

                switch(permission)
                {
                    case DRM_PERMISSION_PLAY:
                        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_DRM_PLAY));
                        mmi_ucs2cat((PS8) data, (PS8) L"\n");
                        break;
                    case DRM_PERMISSION_DISPLAY:
                        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_DRM_DISPLAY));
                        mmi_ucs2cat((PS8) data, (PS8) L"\n");
                        break;
                    case DRM_PERMISSION_EXECUTE:
                        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_DRM_EXECUTE));
                        mmi_ucs2cat((PS8) data, (PS8) L"\n");
                        break;
                    case DRM_PERMISSION_PRINT:
                        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_DRM_PRINT));
                        mmi_ucs2cat((PS8) data, (PS8) L"\n");
                        break;
                    case DRM_PERMISSION_EXPORT:
                        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_DRM_EXPORT));
                        mmi_ucs2cat((PS8) data, (PS8) L"\n");
                        break;
                    default:
                        break;
                }

                if (((method & DRM_METHOD_COMBINED_DELIVERY) ||
                     (method & DRM_METHOD_SEPARATE_DELIVERY) || 
                     (method & DRM_METHOD_V2)) &&
                    (cons.status != DRM_STATUS_NO_RIGHTS))
                {
                
                    MYTIME t;
                    S8 buffer[20];
                    drm_constraint_struct *constraint;
                
                    constraint = &cons;
                    
                    if (constraint->type != DRM_CONSTRAINT_NONE)
                    {
                        if (constraint->type & DRM_CONSTRAINT_COUNT)
                        {
                            mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_COUNT));
                            sprintf((char*)buffer, "\n%d/%d", constraint->used_count, constraint->total_count);
                            mmi_asc_to_ucs2((PS8) & data[mmi_ucs2strlen((PS8) data) << 1], (PS8) buffer);
                            mmi_ucs2cat((PS8) data, (PS8) L"\n");
                        }

                #ifdef __DRM_V02__
                        if (constraint->type & DRM_CONSTRAINT_ACCUMULATED)
                        {
                            mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_ACCUMULATED));
                            sprintf((char*)buffer, "\n%d ", constraint->accum_dur);
                            mmi_asc_to_ucs2((PS8) & data[mmi_ucs2strlen((PS8) data) << 1], (PS8) buffer);
                            mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_SEC));
                            mmi_ucs2cat((PS8) data, (PS8) L"\n");
                        }
                    
                        if (constraint->type & DRM_CONSTRAINT_TIMEDCOUNT)
                        {
                            mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_TIMEDCOUNT));
                            mmi_ucs2cat((PS8) data, (PS8) L"\n");
                            sprintf((char*)buffer, "%d ", constraint->timed_count);
                            mmi_asc_to_ucs2((PS8) & data[mmi_ucs2strlen((PS8) data) << 1], (PS8) buffer);
                            mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_TIMEDCOUNT_TIME));
                            sprintf((char*)buffer, "%d ", constraint->period);
                            mmi_asc_to_ucs2((PS8) & data[mmi_ucs2strlen((PS8) data) << 1], (PS8) buffer);
                            mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_SEC));
                            mmi_ucs2cat((PS8) data, (PS8) L"\n");
                        }
                #endif /* __DRM_V02__ */

                        if (constraint->type & DRM_CONSTRAINT_DATETIME)
                        {
                            if ((constraint->type & DRM_CONSTRAINT_INTERVAL) && constraint->start_intv != 0)
                            {
                                 /* date time contains interval -> show interval*/
                                 if (constraint->start_time <= constraint->start_intv &&
                                      constraint->end_time >= constraint->end_intv)
                                 {
                                          start = constraint->start_intv;
                                          end = constraint->end_intv;
                                 }
                                 /* interval contains date time -> show date time*/
                                 else if (constraint->start_intv <= constraint->start_time &&
                                      constraint->end_intv >= constraint->end_time)
                                 {
                                          start = constraint->start_time;
                                          end = constraint->end_time;
                                 }
                                 /* date time overlaps interval -> show overlap*/
                                 else if (constraint->start_intv <= constraint->start_time &&
                                      constraint->end_intv <= constraint->end_time && 
                                      constraint->start_time <= constraint->end_intv)
                                 {
                                          start = constraint->start_time;
                                          end = constraint->end_intv;
                                 }
                                 /* interval overlaps date time -> show overlap*/
                                 else if (constraint->start_time <= constraint->start_intv &&
                                      constraint->end_time <= constraint->end_intv &&
                                      constraint->start_intv <= constraint->end_time)
                                 {
                                      start = constraint->start_intv;
                                    end = constraint->end_time;
                                 }
                                 else
                                 {
                                          start = constraint->start_intv;
                                          end = constraint->end_intv;
                                 }
                            }
                            else
                            {
                                start = constraint->start_time;
                                end = constraint->end_time;
                            }
                        }
                        else if (constraint->type & DRM_CONSTRAINT_INTERVAL)
                        {
                            if (constraint->interval <= 0)
                            {
                                start = -1;
                                end = -1;
                            }
                            else
                            {
                                start = constraint->start_intv;
                                end = constraint->end_intv;
                            }
                        }
                        
                        if (start > 0)
                        {
                            mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_START));
                            mmi_ucs2cat((PS8) data, (PS8) L"\n");
                            mmi_dt_utc_sec_2_mytime(start, &t, FALSE);
                            date_string(&t, (PU16) & data[mmi_ucs2strlen((PS8) data) << 1], DT_IDLE_SCREEN);
                            mmi_ucs2cat((PS8) data, (PS8) L" ");
                            time_string(&t, (PU16) & data[mmi_ucs2strlen((PS8) data) << 1], DT_IDLE_SCREEN);
                            mmi_ucs2cat((PS8) data, (PS8) L"\n");
                        }
                    
                        if (end > 0)
                        {
                            mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_END));
                            mmi_ucs2cat((PS8) data, (PS8) L"\n");
                            mmi_dt_utc_sec_2_mytime(end, &t, FALSE);
                            date_string(&t, (PU16) & data[mmi_ucs2strlen((PS8) data) << 1], DT_IDLE_SCREEN);
                            mmi_ucs2cat((PS8) data, (PS8) L" ");
                            time_string(&t, (PU16) & data[mmi_ucs2strlen((PS8) data) << 1], DT_IDLE_SCREEN);
                            mmi_ucs2cat((PS8) data, (PS8) L"\n");                    
                        }
                    }
                    else
                    {
                        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_DETAIL_UNLIMITED));
                        mmi_ucs2cat((PS8) data, (PS8) L"\n");
                    }

                }
                
            }

            if (ref < 0)
            {
                DRM_close_file(input);
            }

        }

        permission = permission<<1;
    }
    while(permission < DRM_PERMISSION_ALL && app_perm == DRM_PERMISSION_ALL);
    
    if (flag)
    {
        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_ID_RMGR_SUMMARY));
        mmi_ucs2cat((PS8) data, (PS8) L"\n");
        mmi_ucs2cat((PS8) data, (PS8) GetString(STR_GLOBAL_INVALID));
        mmi_ucs2cat((PS8) data, (PS8) L"\n");
    }

    return ret;
}