/***************************************************************************** * 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; }
/***************************************************************************** * 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) }
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; }
/***************************************************************************** * 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; }
/***************************************************************************** * 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; }
/***************************************************************************** * 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; }