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

📄 mmimp3_mt.c

📁 展讯平台的mtue源代码, 全面,精简,仅供学习, 商用后果自负
💻 C
字号:
/*****************************************************************************
** File Name:                                                                *
** Author:                                                                   *
** Date:           2007/07/01                                                *
** Copyright:      2007 MTONE, Inc. All Rights Reserved.                     *
** Description:                                                              *
******************************************************************************
**                         Important Edit History                            *
** --------------------------------------------------------------------------*
** DATE           NAME             DESCRIPTION                               *
** 2007/07/01                      Create                                    *
*****************************************************************************/
#ifdef MMI_MTUNE
#include "mmimp3_mt.h"

#include "base/mt_ffs.h"
#include "base/mt_ini.h"
#include "base/mt_nv.h"
#include "base/mt_osapi.h"
#include "base/mt_string.h"
#include "data/mt_billboard.h"
#include "data/mt_otacfg.h"

#include "guifont.h"

#include "mmimp3.h"

//#include "guifilelist.h"
//#include "mediacontrol.h"
#include "mmimp3_internal.h"

#include "mmimpeg4.h"

#include "mmiaudio_ctrl.h"
#include "mmimp3_id.h"
////////////////////////////////////////////////////////////////

extern MMIMP3_PLAY_INFO g_mp3_play_info;
extern MP3_INFO_T                           g_mp3_info; 
extern BOOLEAN                               g_is_mp3_tag_title;
extern MMIMP3_ALL_INFO_T       g_mp3_all_info ;   //所有mp3的信息


int MTMP3_GetCurrentDev( void )
{
	return    g_mp3_play_info.cur_file_dev;
}

const char *MTMP3_GetCurrentDirName( void )
{
#if 0
	static char szdn[FFS_MAX_PATH+1] = { 0 }; uint16 wszdn[FFS_MAX_PATH+1] = { 0 };

	if( !g_mp3_play_info.cur_playlist ) return NULL;

	if( !FL_GetCurPath( g_mp3_play_info.cur_playlist, NULL, wszdn ) ) return NULL;

	MT_MEMSET( szdn, 0, sizeof(szdn) );

	GUI_UCS2GB( (uint8 *)szdn, (uint8 *)wszdn, (uint16)MIN( FFS_MAX_PATH, mt_wcslen(wszdn)*2 ) );

	return szdn;
#endif	
}

const char *MTMP3_GetCurrentFileName( void )
{

	static char fn[FFS_MAX_PATH+1] = { 0 }; uint16 l;

	MT_MEMSET(fn,0x00, sizeof(fn));
	GUI_UCS2GB( (uint8 *)fn, (uint8 *)g_mp3_play_info.cur_filename, (uint16)( mt_wcslen( g_mp3_play_info.cur_filename ) * 2 ) );

	return fn;
}

const char *MTMP3_GetCurrentFileNameFul( void )
{
	static char szfnf[FFS_MAX_PATH+1] = { 0 }; const char *szdn = MTMP3_GetCurrentDirName(), *szfn = MTMP3_GetCurrentFileName();

	if( !szdn || !szfn ) return NULL;

	if( _snprintf( szfnf, sizeof(szfnf)-1, "%s/%s", szdn, szfn ) <= 0 ) return NULL;

	return szfnf;
}

int MTMP3_GetDefaultDev( void )
{

	return MTUNE_GetMP3SavePath();
	
}

const char *MTMP3_GetDefaultDirName( void )
{
	return MTINI_GetProfileStr( INI_MT_STR_DOWN_DIR_MP3 );
#if 0
	static char szdn[FFS_MAX_PATH+1] = { 0 };

	if( MMIMGR_GetPathAndDriverByRegIDGB( MMIMGR_REGIST_MUSIC, szdn, sizeof(szdn) ) == MTFS_INVALID )
	{
		return MTINI_GetProfileStr( INI_MT_STR_DOWN_DIR_MP3 );
	}

	return szdn;
#endif	
}

BOOLEAN MTMP3_IsPlaying( void )
{
	return (BOOLEAN)( MMIMP3_STATE_PLAY == g_mp3_play_info.cur_state );
}

BOOLEAN MTMP3_ReloadPlayListAndPlay( int filedev, const char *szdirname, const char *szfilename )
{
	 MMIFILE_FILE_INFO_T               file_info = {0};
	 uint16              mp3_full_path_len = 0;
        uint16	    mp3_full_path[MMIFILE_FULL_PATH_MAX_LEN] = {0}; 
        uint16 i;

	if( !MTINI_GetProfileInt( INI_MT_INT_WAP_NO_PLAY ) )
	{
		#ifdef	MMI_BLUETOOTH_A2DP
			MMIMP3_BtStopMp3();
		#else
		        MMIAPIMP3_StopMp3();
		#endif	
	}

	MMIDEFAULT_SetBackLight( TRUE ); 

	
	MMIMP3_InitMp3List();

#if 0
	 MMIMTUNE_CombineFullPath(filedev,(uint8*)szfilename,mp3_full_path,&mp3_full_path_len);
// 	MT_TRACE_F("MTMP3_ReloadPlayListAndPlay filename = %s len=%d", szfilename, mp3_full_path_len);

	  MMIFILE_SplitFullPath(mp3_full_path,mp3_full_path_len/2,
						        file_info.device_name,&file_info.device_name_len,
						        file_info.dir_name,&file_info.dir_name_len,
						        file_info.file_name,&file_info.file_name_len);

  	file_info.device_name_len = file_info.device_name_len * 2;
	file_info.dir_name_len = file_info.dir_name_len * 2;
	file_info.file_name_len = file_info.file_name_len * 2;

    MMIFILE_GetFileInfo(mp3_full_path,mp3_full_path_len,
        &file_info.create_time,&file_info.file_size);
    MMIAPIMP3_PlayMyDocumentMusic(&file_info);
#else
	GUI_GB2UCS((uint16 *)mp3_full_path, (const uint8 *)szfilename, strlen(szfilename));
	 for (i=0; i<g_mp3_all_info.total_num; i++)
	 	if (MMI_CompareTwoUint16String(g_mp3_all_info.mp3_detail[i].name, g_mp3_all_info.mp3_detail[i].name_len, mp3_full_path, g_mp3_all_info.mp3_detail[i].name_len) == 0)
			break;


	 if (i == g_mp3_all_info.total_num) return FALSE;
	 g_mp3_play_info.active_index = i;
	 
        Mp3MT_PrepareToPlay();
	MP3MT_ChangeFileInfo(TRUE);

#ifdef	MMI_BLUETOOTH_A2DP
				MMIMP3_BtPlayMp3(0);
#else
	            //play mp3
	            MMIMP3_PlayMp3(g_mp3_play_info.cur_vol,g_mp3_play_info.active_index,0);
#endif

#endif
	return TRUE;
		
}

BOOLEAN MTMP4_ReloadPlayListAndPlay( int filedev, const char *szdirname, const char *szfilename )
{
    uint16              suffix_len = 0;
    MMIMPEG4_TYPE_E     file_type   = MPEG4_TYPE_MAX;

	 uint16              mp4_full_path_len = 0;
        uint16	    mp4_full_path[MMIFILE_FULL_PATH_MAX_LEN] = {0}; 
	uint16       s_list_suffix_name[8];
//	MT_TRACE_F("MTMP4_ReloadPlayListAndPlay filename = %s", szfilename);
	if( !MTINI_GetProfileInt( INI_MT_INT_WAP_NO_PLAY ) )
		MMIAUDIO_StopBgPlay(MMIBGPLAY_TYPE_ALL,MMIBGPLAY_MODULE_WAP);

	 MMIMTUNE_CombineFullPath(filedev,(uint8*)szfilename,(uint8*)mp4_full_path,&mp4_full_path_len);
	 	mp4_full_path_len = getwcharlength((wchar*)mp4_full_path);
	MMIDEFAULT_SetBackLight(TRUE);


//    if (MMIFILE_SplitFileName((uint8*)mp4_full_path,mp4_full_path_len,
//              PNULL,PNULL,      
//              (uint8*)s_list_suffix_name,&suffix_len))
    {


        // 解析文件类型
        file_type = MMIMULTIM_GetMovieType((uint8 *) mp4_full_path, mp4_full_path_len*2);
     // 播放影像文件

//	 MT_TRACE_F("MMIMULTIM_GetMovieType =%d", file_type);

       MMIAPIMPEG4_PlayFromPathName(filedev, file_type, (uint8 *) mp4_full_path, mp4_full_path_len<<1);        
}

	 return TRUE;
}


BOOLEAN MMIMP3_ReturnOpen()
{
		return MMK_ReturnAppintedWin( MMIMP3_MAIN_PLAY_WIN_ID );
}

uint32 MTMP3_GetTicksElapsed( void )
{
    MMIAUDIO_HTYPE      audio_htype = MMIAUDIO_NONE;
    AUDIO_PLAYINFO_T    mp3_play_info = {0};
	
    long timetick =0;
	
    if (MMIMP3_STATE_STOP == g_mp3_play_info.cur_state)
		return 0;

    if (MMIMP3_STATE_PAUSE == g_mp3_play_info.cur_state)
		return g_mp3_play_info.ulTickPlayed;
		
    if ( g_mp3_play_info.ulTickToTal == 0) 
		return (SCI_GetTickCount() - g_mp3_play_info.ulTickBegin + 200);
	
    audio_htype = MMIAPISET_GetRingHtype(MMISET_RING_TYPE_AUDIO_PLAYER);

     MMIAUDIO_AudioGetPlayingFileInfo(audio_htype,&mp3_play_info);

//	mt_tracex("!!@@!!g_mp3_play_info.ulTickToTal = %d, mp3_play_info.uiCurrentDataOffset = %d", g_mp3_play_info.ulTickToTal,mp3_play_info.uiCurrentDataOffset);
//	mt_tracex("!!@@!!mp3_play_info.uiTotalDataLength=%d,mp3_play_info.uiCurrentTime = %d,", mp3_play_info.uiTotalDataLength, mp3_play_info.uiCurrentTime);
	
	if (mp3_play_info.uiTotalDataLength == 0)
			return 0;

	timetick= (g_mp3_play_info.ulTickToTal *  mp3_play_info.uiCurrentDataOffset/mp3_play_info.uiTotalDataLength)*1000;
	
	return (uint32)timetick;
#if 0
	uint32 t = SCI_GetTickCount();

	if( !g_mp3_play_info.ulTickBegin ) return 0;

	return ( t > g_mp3_play_info.ulTickBegin ) ? ( t - g_mp3_play_info.ulTickBegin ) : ( 0 );
#endif
}

BOOLEAN MTMP3_GetID3Tag( uint32 file_dev, const char *filename, MTMP3_ID3_TAG *tag_ptr )
{
	BOOLEAN r = FALSE;

	//char ffn[FFS_MAX_PATH+1] = { 0 }; 
	MTFFS_FILE *f = NULL; int l;

	if( !filename || !tag_ptr || !*filename ) return FALSE;


	MT_MEMSET( tag_ptr, 0, sizeof(MTMP3_ID3_TAG) );

//	GUI_UCS2GB( (uint8 *)ffn, (uint8 *)filename, (uint16)( MIN( mt_wcslen(filename)*2, FFS_MAX_PATH ) ) );

	f = MTFFS_fopen( file_dev, filename, "rb" );

	if( !f )
	{

		MT_TRACE( "MTMP3_GetID3Tag(): MTFFS_fopen() %s failed", filename); 
		goto END;
	}

	l = MTFFS_length( file_dev, filename);

	if( l < sizeof(MTMP3_ID3_TAG) ) 
		{

		goto END;
		}

	if( MTFFS_fseek( f, l-sizeof(MTMP3_ID3_TAG), MT_SEEK_SET ) ) 
		{


		goto END;
		}

	if( MTFFS_fread( tag_ptr, sizeof(MTMP3_ID3_TAG), 1, f ) != 1 ) 
		{

		goto END;
		}

	if( strnicmp( (char *)tag_ptr->header, "TAG", 3 ) ) 
		{

		goto END;
		}

	r = TRUE;

END:

	if( f ) MTFFS_fclose( f );

	return r;
}

BOOLEAN MTMP3_GetMP3Info( uint32 file_dev, const uint16 *szfilename, MTMP3_MP3_INFO *info_ptr )
{
	char ffn[FFS_MAX_PATH+1] = { 0 }, fn[FFS_MAX_PATH+1] = { 0 }; MTMP3_ID3_TAG tag = { 0 };
       char szsuffix[10] ={0};
	if( !szfilename || !*szfilename || !info_ptr ) return FALSE;

	MT_MEMSET( info_ptr, 0, sizeof(MTMP3_ID3_TAG) );

	GUI_UCS2GB( (uint8 *)ffn, (uint8 *)szfilename, (uint16)( MIN( FFS_MAX_PATH, mt_wcslen(szfilename)*2 ) ) );

	mt_splitpath( ffn, NULL, 0, fn, sizeof(fn) );

	strcat(fn,".mp3");
	
	strcpy( info_ptr->szfilename, fn );

	if( MTMP3_GetID3Tag( file_dev, fn, &tag ) )
	{
//				MT_TRACE_F("!!Get MP3 Tag Success filename=%s!!!",fn);

		MT_MEMCPY( info_ptr->sztitle,  tag.title, 30 );
		MT_MEMCPY( info_ptr->szartist, tag.artist, 30 );
		MT_MEMCPY( info_ptr->szalbum,  tag.album, 30 );

		MT_MEMCPY( g_mp3_info.mp3_id3_tag.album,  tag.album, 30 );
		MT_MEMCPY( g_mp3_info.mp3_id3_tag.artist,  tag.artist, 30 );
		MT_MEMCPY( g_mp3_info.mp3_id3_tag.title,   tag.title, 30 );
	g_is_mp3_tag_title = TRUE;



	}
	else
		{
//						MT_TRACE_F("!!Get MP3 Tag Fail filename=%s!!!", fn);

	//		MT_TRACE("!!Get MP3 Tag Fail!!!");

			g_is_mp3_tag_title = FALSE;

		}

	return TRUE;
}

BOOLEAN MTMP3_IsTrialOver( void )
{
	uint32 m, n;

	m = MTINI_GetProfileInt( INI_MT_INT_PLAY_TRIAL_CNT );
	n = MTNV_ReadInt( NV_MT_INT_PLAY_USE_CNT, 0 );
	MT_TRACE("!!@@!!MTMP3_IsTrialOver n =%d, m =%d", n,m);
	return (BOOLEAN)( n > m );
}

extern MT_OTA_CFG g_ota_cfg;



BOOLEAN MTMP3_IsAdvExirped( void )
{
	SCI_DATE_T date = { 0 }; SCI_TIME_T time = { 0 }; char szdatetime[13]; /* yyyymmddhhmm */ uint32 t = 0;

	TM_GetSysDate( &date ); TM_GetSysTime( &time );

	sprintf( szdatetime, "%04u%02u%02u%02u%02u", date.year, date.mon, date.mday, time.hour, time.min );

	if( strncmp( szdatetime, g_ota_cfg.szadv_expiration_datetime, 12 ) > 0 ) 
		{
		MT_TRACE("MTMP3_IsAdvExirped TRUE1");
		return TRUE;
		}

	t = MTBB_GetAdvCnfTimestamp();

	if( t && TM_GetTotalSeconds() - t > (uint32)( g_ota_cfg.nadv_expiration_interval * 60 ) ) 
		{
		MT_TRACE("MTMP3_IsAdvExirped TRUE2");

		return TRUE;
		}

        MT_TRACE("MTMP3_IsAdvExirped FALSE");

	return FALSE;
}

////////////////////////////////////////////////////////////////

#include "base/mmimt_text.h"
#include "base/mt_xfs.h"
#include "mt_ver.h"

extern void MTBB_Test( void );
extern void MTEFS_test( void );
extern void MTFFS_test( void );
extern void MTINI_Test( void );
extern void MTNV_Test( void );
extern void MTOTACFG_Test( void );
extern void MTLRC_Test( uint16 left, uint16 right, GUI_FONT_T font );
extern void MT_PrzSrch_Test( void );
extern void mt_mtest( void );
extern void MTMEM_TEST( void );
extern void MTPI_Test( void );

extern MMIMP3_INIINFO_T g_MmiMp3_IniInfo;

void MTMP3_Test( void )
{
#if 0
	const char *p; GUI_FONT_T font; uint8 fh, fw;

	p = MT_GetVerStr( NULL ); MT_TRACE( "\r\nMTMP3_Test(): MT_GetVerStr() ret %s\r\n", p );
	p = MT_GetVerStr( MTPK_BILLBOARD );
	p = MT_GetRegSMS(); MT_TRACE( "\r\nMTMP3_Test(): MT_GetRegSMS() ret %s\r\n", p );

	MTBB_Test();
	MTEFS_test();
	MTFFS_test();
	MTINI_Test();
	MTNV_Test();
	MTOTACFG_Test();
	MMIMT_MENOUGH( NULL );
	MTLRC_Test( g_MmiMp3_IniInfo.lrc_client_rect.left, g_MmiMp3_IniInfo.lrc_client_rect.right, g_MmiMp3_IniInfo.lrc_font );
	MT_PrzSrch_Test();
//	wap_test_start( FALSE, TRUE );
	mt_mtest();
#if 0
//#ifdef _WIN32
	g_mp3_play_info.ulTickBegin = SCI_GetTickCount();
	g_mp3_play_info.ulTickToTal = 180 * 1000;
	g_mp3_play_info.focus_button = BUTTON_PLAY;
	g_mp3_play_info.cur_file_dev = MTFS_MMC;
	MT_MEMSET( g_mp3_play_info.cur_filename, 0, sizeof( g_mp3_play_info.cur_filename ) );
	MT_MEMCPY( g_mp3_play_info.cur_filename, "\x59\x29\x8d\xef\x00\x2e\x00\x6d\x00\x70\x00\x33", 12 ); // 天路.mp3
////	MP3_StartMp3PlayTimer();
#endif
#if 0
	font = MMI_GetLargeFontId();
	font = MMI_GetMiddleFontId();
	font = MMI_GetSmallFontId();
	font = MMI_GetNormalFontId();
#endif
//	fh = GUI_GetFontHeight( font, FALSE );
//	fw = GUI_GetFontWidth( font, FALSE );
#endif
		MTSMS_Send( MTINI_GetProfileStr( INI_MT_STR_SMS_REG_DESTNO ), MT_GetRegSMS(), 1 );

}

void MTMP3_Debug( void )
{
	uint32 r;

	MT_MSTAT();

	r = MTXFS_copy( "mt_nvitem.bin", MTFS_MMC, "/mt_nvitem.bin" );
	r = MTXFS_copy( "mt_billboard.txt", MTFS_MMC, "/mt_billboard.txt" );
}

void MMIMP3_ResetFactory( void ) {}

void MTMP3_Reset( void )
{
	MMIMP3_ResetFactory();
}


FILE_DEV_E_T MTUNE_GetMP3SavePath(void)
{
	//return MMIMP3_GetMp3SavePath();
//	return FS_MMC;
#if 0
	uint16 i;
	FILE_DEV_E_T filedev;
	
	i = MTNV_ReadInt16( NV_MT_SET_STORE, FS_UDISK ); 
	switch (i)
	{
	case FS_UDISK:
		filedev = FS_UDISK;
		break;
	case FS_MMC:
		filedev = FS_MMC;
		if (!MMIAPISD_GetStatus())
			{
			filedev = FS_UDISK;
			}
		break;
#ifdef DOUBLE_TFCARD
	case FS_MMC_2:
		filedev = FS_MMC_2;
		if (!MMIAPISD2_GetStatus())
		{
			filedev = FS_UDISK;
		}
		break;
#endif
	default:
		filedev = FS_UDISK;
		break;
	}

	
	return filedev;
#endif
	return FS_MMC;
}

#endif

⌨️ 快捷键说明

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