286 lines
11 KiB
C
Executable File
286 lines
11 KiB
C
Executable File
/*****************************************************************************
|
|
*
|
|
* This program is free software ; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
* $Id: advanced.c 615 2006-01-26 16:57:51Z picard $
|
|
*
|
|
* The Core Pocket Media Player
|
|
* Copyright (c) 2004-2005 Gabor Kovacs
|
|
*
|
|
****************************************************************************/
|
|
|
|
#include "common.h"
|
|
|
|
typedef struct advanced
|
|
{
|
|
node Node;
|
|
bool_t OldShell;
|
|
bool_t SlowVideo;
|
|
bool_t ColorLookup;
|
|
bool_t NoBackLight;
|
|
bool_t HomeScreen;
|
|
bool_t NoWMMX;
|
|
bool_t IDCTSwap;
|
|
bool_t VR41XX;
|
|
bool_t KeyFollowDir;
|
|
bool_t MemoryOverride;
|
|
bool_t BenchFromPos;
|
|
bool_t AviFrameRate;
|
|
bool_t Priority;
|
|
bool_t SystemVolume;
|
|
bool_t WidcommAudio;
|
|
bool_t WidcommDLL;
|
|
tick_t DropTolerance;
|
|
tick_t SkipTolerance;
|
|
tick_t AVOffset;
|
|
bool_t NoBatteryWarning;
|
|
bool_t NoEventChecking;
|
|
bool_t CardPlugins;
|
|
bool_t WaveoutPriority;
|
|
bool_t NoDeblocking;
|
|
bool_t BlinkLED;
|
|
|
|
} advanced;
|
|
|
|
static const datatable Params[] =
|
|
{
|
|
{ ADVANCED_NOBACKLIGHT, TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
{ ADVANCED_HOMESCREEN, TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
#if defined(TARGET_WINCE)
|
|
{ ADVANCED_OLDSHELL, TYPE_BOOL, DF_SETUP|DF_RESTART|DF_CHECKLIST },
|
|
#endif
|
|
#if defined(ARM)
|
|
{ ADVANCED_NOWMMX, TYPE_BOOL, DF_SETUP|DF_CHECKLIST|DF_RESTART },
|
|
#endif
|
|
#if !defined(SH3) && !defined(MIPS)
|
|
{ ADVANCED_SLOW_VIDEO, TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
#endif
|
|
#if defined(ARM) || defined(_M_IX86)
|
|
{ ADVANCED_IDCTSWAP, TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
#endif
|
|
#if !defined(SH3)
|
|
{ ADVANCED_COLOR_LOOKUP,TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
#endif
|
|
{ ADVANCED_KEYFOLLOWDIR,TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
#if defined(TARGET_PALMOS)
|
|
{ ADVANCED_MEMORYOVERRIDE, TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
#endif
|
|
{ ADVANCED_PRIORITY, TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
#if !defined(SH3) && !defined(TARGET_PALMOS)
|
|
{ ADVANCED_SYSTEMVOLUME, TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
#endif
|
|
#if defined(MIPS)
|
|
{ ADVANCED_VR41XX,TYPE_BOOL, DF_SETUP|DF_CHECKLIST|DF_RESTART },
|
|
#endif
|
|
{ ADVANCED_BENCHFROMPOS,TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
{ ADVANCED_AVIFRAMERATE,TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
#if defined(TARGET_WINCE)
|
|
{ ADVANCED_WIDCOMMAUDIO,TYPE_BOOL, DF_SETUP|DF_CHECKLIST|DF_RESTART },
|
|
#endif
|
|
#if defined(TARGET_WINCE) || defined(TARGET_WIN32)
|
|
// { ADVANCED_WAVEOUTPRIORITY, TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
#endif
|
|
#if defined(TARGET_PALMOS)
|
|
{ ADVANCED_NOBATTERYWARNING,TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
{ ADVANCED_NOEVENTCHECKING,TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
{ ADVANCED_CARDPLUGINS,TYPE_BOOL, DF_SETUP|DF_CHECKLIST|DF_NOSAVE|DF_RESTART },
|
|
{ ADVANCED_BLINKLED,TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
#endif
|
|
{ ADVANCED_NODEBLOCKING,TYPE_BOOL, DF_SETUP|DF_CHECKLIST },
|
|
|
|
{ ADVANCED_AVOFFSET, TYPE_TICK, DF_SETUP|DF_MINMAX|DF_MSEC|DF_GAP|DF_NEG|DF_RESYNC, -2*TICKSPERSEC, 2*TICKSPERSEC },
|
|
{ ADVANCED_DROPTOL, TYPE_TICK, DF_SETUP|DF_MINMAX|DF_MSEC, 0, TICKSPERSEC },
|
|
{ ADVANCED_SKIPTOL, TYPE_TICK, DF_SETUP|DF_MINMAX|DF_MSEC, 0, 5*TICKSPERSEC },
|
|
|
|
{ ADVANCED_WIDCOMMDLL, TYPE_BOOL, DF_SETUP|DF_HIDDEN },
|
|
|
|
DATATABLE_END(ADVANCED_ID)
|
|
};
|
|
|
|
static int Enum(advanced* p, int* No, datadef* Param)
|
|
{
|
|
int Result = NodeEnumTable(No,Param,Params);
|
|
if (Result == ERR_NONE)
|
|
{
|
|
#if defined(TARGET_WINCE)
|
|
if (Param->No == ADVANCED_WIDCOMMAUDIO && !p->WidcommDLL)
|
|
Param->Flags |= DF_HIDDEN;
|
|
if (Param->No == ADVANCED_OLDSHELL && (
|
|
(QueryPlatform(PLATFORM_CAPS) & CAPS_OLDSHELL) ||
|
|
QueryPlatform(PLATFORM_TYPENO) == TYPE_SMARTPHONE ||
|
|
(QueryPlatform(PLATFORM_TYPENO) == TYPE_POCKETPC && QueryPlatform(PLATFORM_VER) >= 421)))
|
|
Param->Flags |= DF_HIDDEN;
|
|
#endif
|
|
#if defined(TARGET_PALMOS)
|
|
if (Param->No == ADVANCED_MEMORYOVERRIDE && !MemGetInfo(NULL))
|
|
Param->Flags |= DF_HIDDEN;
|
|
#endif
|
|
if (Param->No == ADVANCED_NOWMMX && !(QueryPlatform(PLATFORM_CAPS) & CAPS_ARM_WMMX))
|
|
Param->Flags |= DF_HIDDEN;
|
|
if (Param->No == ADVANCED_HOMESCREEN && QueryPlatform(PLATFORM_TYPENO) != TYPE_SMARTPHONE)
|
|
Param->Flags |= DF_HIDDEN;
|
|
if (Param->No == ADVANCED_VR41XX && !(QueryPlatform(PLATFORM_CAPS) != CAPS_MIPS_VR41XX))
|
|
Param->Flags |= DF_HIDDEN;
|
|
}
|
|
return Result;
|
|
}
|
|
|
|
static int Get(advanced* p, int No, void* Data, int Size)
|
|
{
|
|
int Result = ERR_INVALID_PARAM;
|
|
switch (No)
|
|
{
|
|
case ADVANCED_OLDSHELL: GETVALUE(p->OldShell,bool_t); break;
|
|
case ADVANCED_HOMESCREEN: GETVALUE(p->HomeScreen,bool_t); break;
|
|
case ADVANCED_NOBACKLIGHT: GETVALUE(p->NoBackLight,bool_t); break;
|
|
case ADVANCED_VR41XX: GETVALUE(p->VR41XX,bool_t); break;
|
|
case ADVANCED_IDCTSWAP: GETVALUE(p->IDCTSwap,bool_t); break;
|
|
case ADVANCED_NOWMMX: GETVALUE(p->NoWMMX,bool_t); break;
|
|
case ADVANCED_NODEBLOCKING: GETVALUE(p->NoDeblocking,bool_t); break;
|
|
case ADVANCED_BLINKLED: GETVALUE(p->BlinkLED,bool_t); break;
|
|
case ADVANCED_PRIORITY: GETVALUE(p->Priority,bool_t); break;
|
|
case ADVANCED_SYSTEMVOLUME: GETVALUE(p->SystemVolume,bool_t); break;
|
|
case ADVANCED_SLOW_VIDEO: GETVALUE(p->SlowVideo,bool_t); break;
|
|
case ADVANCED_COLOR_LOOKUP: GETVALUE(p->ColorLookup,bool_t); break;
|
|
case ADVANCED_DROPTOL: GETVALUE(p->DropTolerance,tick_t); break;
|
|
case ADVANCED_SKIPTOL: GETVALUE(p->SkipTolerance,tick_t); break;
|
|
case ADVANCED_AVOFFSET: GETVALUE(p->AVOffset,tick_t); break;
|
|
case ADVANCED_BENCHFROMPOS: GETVALUE(p->BenchFromPos,bool_t); break;
|
|
case ADVANCED_AVIFRAMERATE: GETVALUE(p->AviFrameRate,bool_t); break;
|
|
case ADVANCED_WIDCOMMAUDIO: GETVALUE(p->WidcommAudio,bool_t); break;
|
|
case ADVANCED_WIDCOMMDLL: GETVALUE(p->WidcommDLL,bool_t); break;
|
|
case ADVANCED_KEYFOLLOWDIR: GETVALUE(p->KeyFollowDir,bool_t); break;
|
|
case ADVANCED_WAVEOUTPRIORITY: GETVALUE(p->WaveoutPriority,bool_t); break;
|
|
case ADVANCED_MEMORYOVERRIDE: GETVALUE(p->MemoryOverride,bool_t); break;
|
|
case ADVANCED_NOBATTERYWARNING: GETVALUE(p->NoBatteryWarning,bool_t); break;
|
|
case ADVANCED_NOEVENTCHECKING: GETVALUE(p->NoEventChecking,bool_t); break;
|
|
case ADVANCED_CARDPLUGINS: GETVALUE(p->CardPlugins,bool_t); break;
|
|
}
|
|
return Result;
|
|
}
|
|
|
|
static int Set(advanced* p, int No, const void* Data, int Size)
|
|
{
|
|
int Result = ERR_INVALID_PARAM;
|
|
|
|
switch (No)
|
|
{
|
|
case ADVANCED_OLDSHELL: SETVALUE(p->OldShell,bool_t,ERR_NONE); break;
|
|
case ADVANCED_HOMESCREEN: SETVALUE(p->HomeScreen,bool_t,ERR_NONE); break;
|
|
case ADVANCED_NOBACKLIGHT: SETVALUE(p->NoBackLight,bool_t,ERR_NONE); break;
|
|
case ADVANCED_VR41XX: SETVALUE(p->VR41XX,bool_t,ERR_NONE); break;
|
|
case ADVANCED_IDCTSWAP: SETVALUECMP(p->IDCTSwap,bool_t,NodeSettingsChanged(),EqBool); break;
|
|
case ADVANCED_NOWMMX: SETVALUE(p->NoWMMX,bool_t,ERR_NONE); break;
|
|
case ADVANCED_BLINKLED: SETVALUE(p->BlinkLED,bool_t,ERR_NONE); break;
|
|
case ADVANCED_NODEBLOCKING: SETVALUECMP(p->NoDeblocking,bool_t,NodeSettingsChanged(),EqBool); break;
|
|
case ADVANCED_PRIORITY: SETVALUECMP(p->Priority,bool_t,NodeSettingsChanged(),EqBool); break;
|
|
case ADVANCED_SYSTEMVOLUME: SETVALUECMP(p->SystemVolume,bool_t,NodeSettingsChanged(),EqBool); break;
|
|
case ADVANCED_SLOW_VIDEO: SETVALUECMP(p->SlowVideo,bool_t,NodeSettingsChanged(),EqBool); break;
|
|
case ADVANCED_COLOR_LOOKUP: SETVALUECMP(p->ColorLookup,bool_t,NodeSettingsChanged(),EqBool); break;
|
|
case ADVANCED_DROPTOL: SETVALUECMP(p->DropTolerance,tick_t,NodeSettingsChanged(),EqInt); break;
|
|
case ADVANCED_SKIPTOL: SETVALUECMP(p->SkipTolerance,tick_t,NodeSettingsChanged(),EqInt); break;
|
|
case ADVANCED_AVOFFSET: SETVALUECMP(p->AVOffset,tick_t,NodeSettingsChanged(),EqInt); break;
|
|
case ADVANCED_BENCHFROMPOS: SETVALUE(p->BenchFromPos,bool_t,ERR_NONE); break;
|
|
case ADVANCED_AVIFRAMERATE: SETVALUECMP(p->AviFrameRate,bool_t,NodeSettingsChanged(),EqBool); break;
|
|
case ADVANCED_WIDCOMMAUDIO: SETVALUE(p->WidcommAudio,bool_t,ERR_NONE); break;
|
|
case ADVANCED_KEYFOLLOWDIR: SETVALUE(p->KeyFollowDir,bool_t,ERR_NONE); break;
|
|
case ADVANCED_WAVEOUTPRIORITY: SETVALUECMP(p->WaveoutPriority,bool_t,NodeSettingsChanged(),EqBool); break;
|
|
case ADVANCED_MEMORYOVERRIDE: SETVALUECOND(p->MemoryOverride,bool_t,ERR_NONE,MemGetInfo(NULL)); break;
|
|
case ADVANCED_NOBATTERYWARNING: SETVALUE(p->NoBatteryWarning,bool_t,ERR_NONE); break;
|
|
case ADVANCED_NOEVENTCHECKING: SETVALUECMP(p->NoEventChecking,bool_t,NodeSettingsChanged(),EqBool); break;
|
|
case ADVANCED_CARDPLUGINS: SETVALUE(p->CardPlugins,bool_t,ERR_NONE); break;
|
|
case ADVANCED_WIDCOMMDLL:
|
|
assert(Size==sizeof(bool_t));
|
|
if (p->WidcommDLL && !*(bool_t*)Data)
|
|
p->WidcommAudio = 1;
|
|
break;
|
|
}
|
|
return Result;
|
|
}
|
|
|
|
bool_t QueryAdvanced(int Param)
|
|
{
|
|
node* Advanced = Context()->Advanced;
|
|
bool_t Value=0;
|
|
if (Advanced)
|
|
Advanced->Get(Advanced,Param,&Value,sizeof(Value));
|
|
return Value;
|
|
}
|
|
|
|
static int Create(advanced* p)
|
|
{
|
|
int Caps = QueryPlatform(PLATFORM_CAPS);
|
|
video Desktop;
|
|
QueryDesktop(&Desktop);
|
|
|
|
p->Node.Enum = (nodeenum)Enum,
|
|
p->Node.Get = (nodeget)Get,
|
|
p->Node.Set = (nodeset)Set,
|
|
p->SlowVideo = 0;
|
|
#if defined(TARGET_WINCE)
|
|
p->SystemVolume = QueryPlatform(PLATFORM_VER) < 421;
|
|
#else
|
|
p->SystemVolume = 0;
|
|
#endif
|
|
p->BenchFromPos = 0;
|
|
p->VR41XX = 1;
|
|
p->MemoryOverride = 0;
|
|
p->KeyFollowDir = HaveDPad();
|
|
p->ColorLookup = !(Caps & CAPS_MIPS_VR41XX) && !(Caps & CAPS_ARM_XSCALE);
|
|
p->OldShell = (Caps & CAPS_OLDSHELL) != 0;
|
|
p->DropTolerance = (TICKSPERSEC*55)/1000;
|
|
p->SkipTolerance = (TICKSPERSEC*700)/1000;
|
|
p->AVOffset = 0;
|
|
p->BlinkLED = 1;
|
|
|
|
#if defined(TARGET_PALMOS)
|
|
// causes major problems on Sony TJ35, like screen not turning off with audio, or hold/power button not working...
|
|
//p->NoEventChecking = (QueryPlatform(PLATFORM_CAPS) & CAPS_SONY)!=0;
|
|
#endif
|
|
|
|
#if defined(TARGET_WINCE)
|
|
{
|
|
tchar_t FileName[MAXPATH];
|
|
GetSystemPath(FileName,TSIZEOF(FileName),T("BtCeAvIf.dll"));
|
|
p->WidcommAudio = p->WidcommDLL = FileExits(FileName);
|
|
}
|
|
#endif
|
|
|
|
return ERR_NONE;
|
|
}
|
|
|
|
static const nodedef Advanced =
|
|
{
|
|
sizeof(advanced)|CF_GLOBAL|CF_SETTINGS,
|
|
ADVANCED_ID,
|
|
NODE_CLASS,
|
|
PRI_MAXIMUM+50,
|
|
(nodecreate)Create,
|
|
NULL,
|
|
};
|
|
|
|
void Advanced_Init()
|
|
{
|
|
NodeRegisterClass(&Advanced);
|
|
Context()->Advanced = NodeEnumObject(NULL,ADVANCED_ID);
|
|
}
|
|
|
|
void Advanced_Done()
|
|
{
|
|
Context()->Advanced = NULL;
|
|
NodeUnRegisterClass(ADVANCED_ID);
|
|
}
|
|
|