⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jmmscomposeutils.c

📁 MTK_MMI的部分源代码,从code中大致了解到MMI的执行流程
💻 C
📖 第 1 页 / 共 5 页
字号:
 *  hMsg                [IN]        
 *  pCallbackArg        [?]         [?]
 *  pCBStruct           [?]         [?]
 *  error               [IN]        
 * RETURNS
 *  
 *****************************************************************************/
JC_RETCODE mmi_jmms_error_ind_cb(MSG_HANDLE hMsg, void *pCallbackArg, void *pCBStruct, ErrorCode error)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    JC_RETCODE ret_code = JC_OK;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /*DIlip 30 aug 2006 commented to handel Is media already exist error indicator call back*/
/*   g_jmms_context->is_add_media_warning = 0;*/
    PRINT_INFORMATION_2((MMI_TRACE_INFO, "mmi_jmms_error_ind_cb %d", error));
    switch (error)
    {
        case E_WARNING_CREATION_MODE:
            g_jmms_context->is_add_media_warning = 1;
            break;
        case E_WARNING_DRM_FORWARD_RESTRICTED:
            ret_code = JC_ERR_MSG_DRM_FORWARD_RESTRICTED;
            break;
    }
    return ret_code;
}


/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_compose_add_media
 * DESCRIPTION
 *  fn to add media.
 * PARAMETERS
 *  path_p              [?]         [?]
 *  type                [IN]        
 *  is_attachment       [IN]        
 *  page_index          [IN]        
 *  a(?)                [IN/OUT]        Nil(?)
 *  b(?)                [IN]            Nil(?)
 * RETURNS
 *  void
 *****************************************************************************/
JMMS_COMP_ERRCODE mmi_jmms_compose_add_media(void *path_p, U8 type, U8 is_attachment, U8 page_index)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MEDIA_INFO *media_info_p;
    S8 *file_name_p;
    U32 file_size = 0;

    /* FS_HANDLE  file_handle; */
    JC_RETCODE ret_code = JC_OK;
    JMMS_COMP_ERRCODE err_code;
    U32 media_id;
    JDD_FILE file_handle;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "Inside mmi_jmms_compose_add_media"));
    media_info_p = (MEDIA_INFO*) jdd_MemAlloc(sizeof(MEDIA_INFO), sizeof(U8));
    if (media_info_p == NULL)
    {
        ret_code = JC_ERR_MEMORY_ALLOCATION;
        goto ERROR_HANDLE;
    }

    if (g_jmms_context->jmms_fs_handle == NULL)
    {
        if (jdd_FSInitialize(&g_jmms_context->jmms_fs_handle) != JC_OK)
        {
            ret_code = JC_ERR_FILE_SYS_INIT;
            goto ERROR_HANDLE;
        }
    }

    file_name_p = mmi_fmgr_extract_file_name((S8*) path_p);

    file_handle = jdd_FSOpen(g_jmms_context->jmms_fs_handle, (U16*) path_p, E_OPEN_READ_MODE);

    if (file_handle == NULL)
    {
        ret_code = JC_ERR_FILE_OPEN;
        goto ERROR_HANDLE;
    }

    jdd_FSGetSize(file_handle, &file_size);

    jdd_FSClose(file_handle);

    media_info_p->pMimeInfo = (MEDIA_MIME_INFO*) jdd_MemAlloc(sizeof(MEDIA_MIME_INFO), sizeof(U8));
    if (media_info_p->pMimeInfo == NULL)
    {
        ret_code = JC_ERR_MEMORY_ALLOCATION;
        goto ERROR_HANDLE;
    }

    media_info_p->eMediaType = type;

    if (is_attachment == E_FALSE && (type == E_MEDIA_IMAGE || type == E_MEDIA_VIDEO))
    {
        U8 size;

        size = strlen(STRING_IMAGE);
        media_info_p->PresentationInfo.pRegionName = (JC_CHAR*) jdd_MemAlloc(sizeof(JC_CHAR), size + 1);
        if (media_info_p->PresentationInfo.pRegionName == NULL)
        {
            ret_code = JC_ERR_MEMORY_ALLOCATION;
            goto ERROR_HANDLE;
        }
        AnsiiToUnicodeString((PS8)(media_info_p->PresentationInfo.pRegionName), (PS8) (STRING_IMAGE) );
    }

    media_info_p->pMimeInfo->ContentData.bIsStream = E_TRUE;
    media_info_p->pMimeInfo->ContentData.eCopyMemory = E_FALSE;
    media_info_p->pMimeInfo->ContentData.pBuffer = NULL;
    media_info_p->pMimeInfo->ContentData.uiCurSize = 0;
    media_info_p->pMimeInfo->ContentData.uiTotalSize = file_size;
    media_info_p->pMimeInfo->ContentData.cbReadCallback = mmi_jmms_read_callback;
    media_info_p->pMimeInfo->ContentData.cbWriteCallback = NULL;
    media_info_p->pMimeInfo->ContentData.uiStartOffset = 0;
    media_info_p->pMimeInfo->ContentData.pFileName =
        (JC_CHAR*) jdd_MemAlloc((jc_tcslen((JC_CHAR*) path_p) + 1), sizeof(JC_CHAR));

    if (media_info_p->pMimeInfo->ContentData.pFileName == NULL)
    {
        ret_code = JC_ERR_MEMORY_ALLOCATION;
        goto ERROR_HANDLE;
    }
    jc_tcscpy((UI_character_type*) media_info_p->pMimeInfo->ContentData.pFileName, (UI_character_type*) path_p);
    media_info_p->pMimeInfo->ContentData.pStream = media_info_p->pMimeInfo->ContentData.pFileName;

    media_info_p->pMimeInfo->MimeHeaders.bIsAttachment = is_attachment;

    if ((GetUCS2Flag((S8*) file_name_p) == FALSE )&& (IsExtendedCharPresent((S8*) file_name_p)== FALSE))
    {
        media_info_p->pMimeInfo->MimeHeaders.pObjectName =
            (JC_CHAR*) jdd_MemAlloc((jc_tcslen((JC_CHAR*) file_name_p) + 1), sizeof(JC_CHAR));

        if (media_info_p->pMimeInfo->MimeHeaders.pObjectName == NULL)
        {
            ret_code = JC_ERR_MEMORY_ALLOCATION;
            goto ERROR_HANDLE;
        }

        jc_tcscpy((JC_CHAR*) media_info_p->pMimeInfo->MimeHeaders.pObjectName, (JC_CHAR*) file_name_p);
    }
    else
    {
        ret_code = mmi_jmms_convert_chinese_english_filename(
                    (JC_CHAR **) & (media_info_p->pMimeInfo->MimeHeaders.pObjectName),
                    (JC_CHAR*) file_name_p);
        if (ret_code != JC_OK)
        {
            goto ERROR_HANDLE;
        }
    }

#ifdef __DRM_SUPPORT__
    if(jMMS_is_sep_delivery_content(path_p))/* && (mmi_jmms_compose_settings_creation_mode() == E_CREATION_MODE_RESTRICTED))*/
    {
        media_info_p->pMimeInfo->MimeHeaders.pContentType = jdi_UtilsStrdup("application/vnd.oma.drm.content");
    }
    else
    {
#endif /* __DRM_SUPPORT__ */ 
        media_info_p->pMimeInfo->MimeHeaders.pContentType =
        (JC_INT8*) mmi_mms_get_mms_content_type_file((UI_character_type*) file_name_p);
#ifdef __DRM_SUPPORT__
    }
#endif
    if (media_info_p->pMimeInfo->MimeHeaders.pContentType == NULL)
    {
        ret_code = JC_ERR_MEMORY_ALLOCATION;
        goto ERROR_HANDLE;
    }

    /* add media */
    ret_code = mmi_jmms_jdi_add_media(g_jmms_context->msg_handle, media_info_p, page_index, &media_id);
    if(ret_code != JC_OK)
    {
        goto ERROR_HANDLE;
    }
#ifdef __DRM_SUPPORT__
    if(is_add_media_as_drm)
    {
        ret_code = jdi_MsgSetMediaDRMType (g_jmms_context->msg_handle, page_index, 
									media_id, E_DRM_FWD_LOCK, 
									media_info_p->pMimeInfo->MimeHeaders.bIsAttachment);
        mmi_jmms_jdi_msg_register_callback(g_jmms_context->msg_handle,
                                    E_CB_DRM_COMPOSE,
                                    (void*)jMMS_drm_compose_handler);


        is_add_media_as_drm = MMI_FALSE;
    }
    else
    {
        ret_code = jdi_MsgSetMediaDRMType (g_jmms_context->msg_handle, page_index, 
									media_id, E_DRM_NONE, 
									media_info_p->pMimeInfo->MimeHeaders.bIsAttachment);
    }
#endif
  ERROR_HANDLE:
    err_code = mmi_jmms_compose_handle_error(ret_code, 0);

    switch (err_code)
    {
        case JMMS_COMP_OK:
        case JMMS_COMP_POPUP_OK:
        {
            if (is_attachment == E_FALSE)
            {
                U32 start_time = 0;
 				U32 duration = 0, audio_duration = 0;
                U32 max = 999;

            #ifdef __MMI_VIDEO_PLAYER__
                U64 video_duration = 0;
            #endif 

                switch (type)
                {
                    case E_MEDIA_IMAGE:
                    {
                        g_jmms_context->compose_context->curr_slide_info.image_ID = media_id;
                        g_jmms_context->compose_context->curr_slide_info.img_info.pFileName =
                            (U8*) media_info_p->pMimeInfo->ContentData.pFileName;
                        break;
                    }
                    case E_MEDIA_AUDIO:
                        g_jmms_context->compose_context->curr_slide_info.audio_ID = media_id;
						mdi_audio_get_duration((S8*) path_p, &audio_duration);
						duration = audio_duration / 1000;
						duration = (duration >= max)? max : ((audio_duration % 1000) > 0)?(duration + 1) : duration;
						err_code = mmi_jmms_set_media_time(
								start_time,
								duration,
								g_jmms_context->compose_context->curr_slide_info.audio_ID,
								g_jmms_context->compose_context->curr_page_index);
                        break;
                    case E_MEDIA_VIDEO:
                        g_jmms_context->compose_context->curr_slide_info.video_ID = media_id;
                        g_jmms_context->compose_context->curr_slide_info.img_info.pFileName =
                            (U8*) media_info_p->pMimeInfo->ContentData.pFileName;
#ifdef __MMI_VIDEO_PLAYER__
						video_duration = mmi_jdd_videoapp_get_video_file_duration_info((S8*) path_p);
						duration = (U32)( video_duration / 1000);
						duration = (duration >= max)? max : ((video_duration % 1000) > 0)?(duration + 1) : duration;
						err_code = mmi_jmms_set_media_time(
								start_time,
								duration,
								g_jmms_context->compose_context->curr_slide_info.video_ID,
								g_jmms_context->compose_context->curr_page_index);
#endif
                        break;
                }
            }
            else
            {
                g_jmms_context->num_attachments++;
            }
        }
            break;
        case JMMS_COMP_FAIL:
        case JMMS_COMP_OUT_MEMORY:  /* deallocate memory for new slide and out of mmeory case. */
        {
            if (media_info_p != NULL)
            {
                if (media_info_p->pMimeInfo != NULL)
                {
                    if (media_info_p->pMimeInfo->ContentData.pFileName != NULL)
                    {
                        jdd_MemFree(media_info_p->pMimeInfo->ContentData.pFileName);
                    }

                    if (media_info_p->pMimeInfo->MimeHeaders.pContentType != NULL)
                    {
                        jdd_MemFree(media_info_p->pMimeInfo->MimeHeaders.pContentType);
                    }
                    if (media_info_p->pMimeInfo->MimeHeaders.pObjectName != NULL)
                    {
                        jdd_MemFree(media_info_p->pMimeInfo->MimeHeaders.pObjectName);
                    }

                    jdd_MemFree(media_info_p->pMimeInfo);
                }
                if (media_info_p->PresentationInfo.pRegionName != NULL)
                {
                    jdd_MemFree(media_info_p->PresentationInfo.pRegionName);
                }
                jdd_MemFree(media_info_p);
                media_info_p = NULL;
            }

        }
            err_code = JMMS_COMP_FAIL;
            break;
        case JMMS_COMP_NEW_SLIDE:
        {
            JMMS_COMP_ERRCODE temp_err_code;

            if (media_info_p != NULL)
            {
                if (media_info_p->pMimeInfo != NULL)
                {
                    if (media_info_p->pMimeInfo->ContentData.pFileName != NULL)
                    {
                        jdd_MemFree(media_info_p->pMimeInfo->ContentData.pFileName);
                    }

                    if (media_info_p->pMimeInfo->MimeHeaders.pContentType != NULL)
                    {
                        jdd_MemFree(media_info_p->pMimeInfo->MimeHeaders.pContentType);
                    }
                    if (media_info_p->pMimeInfo->MimeHeaders.pObjectName != NULL)
                    {
                        jdd_MemFree(media_info_p->pMimeInfo->MimeHeaders.pObjectName);
                    }

                    jdd_MemFree(media_info_p->pMimeInfo);
                }
                if (media_info_p->PresentationInfo.pRegionName != NULL)
                {
                    jdd_MemFree(media_info_p->PresentationInfo.pRegionName);
                }
                jdd_MemFree(media_info_p);
                media_info_p = NULL;
            }

            temp_err_code = mmi_jmms_compose_insert_slide();
            if (temp_err_code == JMMS_COMP_OK)
            {
                HistoryReplace(SCR_ID_JMMS_EDIT_CONTENT, SCR_ID_JMMS_EDIT_CONTENT, mmi_jmms_entry_edit_content_screen); /* to delete guibuffer details as entering new slide. */
                temp_err_code = mmi_jmms_compose_add_media(path_p, type, is_attachment, (U8) (page_index + 1));
            }
            if (temp_err_code != JMMS_COMP_OK)
            {
                err_code = temp_err_code;
            }
            else
            {
                err_code = JMMS_COMP_POPUP_OK;
            }
        }
            break;
    }

    mmi_jmms_set_region_list();

    if (g_jmms_context->jmms_fs_handle != NULL)
    {
        jdd_FSDeinitialize(g_jmms_context->jmms_fs_handle);
        g_jmms_context->jmms_fs_handle = NULL;
    }
    if (media_info_p != NULL)
    {
        jdd_MemFree(media_info_p);
        media_info_p = NULL;
    }
    return err_code;

}


/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_compose_add_media_template
 * DESCRIPTION
 *  fn to add media.
 * PARAMETERS
 *  buffer              [?]         [?]
 *  content_type        [?]         [?]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -