?? mmimp3_mt.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 + -