238 lines
5.8 KiB
C
Executable File
238 lines
5.8 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: sample_win32.c 548 2006-01-08 22:41:57Z picard $
|
|
*
|
|
* The Core Pocket Media Player
|
|
* Copyright (c) 2004-2005 Gabor Kovacs
|
|
*
|
|
****************************************************************************/
|
|
|
|
#include "../common/common.h"
|
|
#include "../interface/win.h"
|
|
#include "../interface/benchresult.h"
|
|
#include "dumpoutput.h"
|
|
|
|
const tchar_t URL[] = T("c:\\sample.avi");
|
|
//const tchar_t URL[] = T("F:\\samples\\h264.ref\\HCMP1_HHI_A.264");
|
|
//#define LOADALL FOURCC('F','M','T','_')
|
|
//#define TIMELIMIT TICKSPERSEC*5
|
|
#define BENCHMARK
|
|
//#define FULLSCREEN
|
|
|
|
static bool_t Play;
|
|
|
|
static void EnumDir(const tchar_t* Path,const tchar_t* Exts)
|
|
{
|
|
streamdir DirItem;
|
|
stream* Stream = GetStream(Path,1);
|
|
if (Stream)
|
|
{
|
|
int Result = Stream->EnumDir(Stream,Path,Exts,1,&DirItem);
|
|
|
|
while (Result == ERR_NONE)
|
|
{
|
|
tchar_t FullPath[MAXPATH];
|
|
AbsPath(FullPath,TSIZEOF(FullPath),DirItem.FileName,Path);
|
|
|
|
if (DirItem.Size < 0)
|
|
EnumDir(FullPath,Exts);
|
|
else
|
|
if (DirItem.Type == FTYPE_AUDIO || DirItem.Type == FTYPE_VIDEO)
|
|
{
|
|
int n;
|
|
node* Player = Context()->Player;
|
|
Player->Get(Player,PLAYER_LIST_COUNT,&n,sizeof(n));
|
|
Player->Set(Player,PLAYER_LIST_URL+n,FullPath,sizeof(FullPath));
|
|
}
|
|
|
|
Result = Stream->EnumDir(Stream,NULL,NULL,0,&DirItem);
|
|
}
|
|
|
|
NodeDelete((node*)Stream);
|
|
}
|
|
}
|
|
|
|
int SilentError(void* p,int Param,int Param2)
|
|
{
|
|
DebugMessage((const tchar_t*)Param2);
|
|
return ERR_NONE;
|
|
}
|
|
|
|
int PlayerNotify(node* Player,int Param,int Param2)
|
|
{
|
|
if (Param == PLAYER_BENCHMARK)
|
|
{
|
|
node* p;
|
|
bool_t Bool = 0;
|
|
Player->Set(Player,PLAYER_FULLSCREEN,&Bool,sizeof(Bool));
|
|
|
|
p = NodeCreate(BENCHRESULT_ID);
|
|
if (p) ((win*)p)->Popup((win*)p,NULL);
|
|
NodeDelete(p);
|
|
}
|
|
|
|
if (Param == PLAYER_PLAY)
|
|
Play = Param2;
|
|
|
|
if (Param == PLAYER_PERCENT)
|
|
{
|
|
#ifdef TIMELIMIT
|
|
tick_t Pos;
|
|
if (Player->Get(Player,PLAYER_POSITION,&Pos,sizeof(Pos))==ERR_NONE && Pos>TIMELIMIT)
|
|
{
|
|
int a,b;
|
|
Player->Get(Player,PLAYER_LIST_CURRENT,&a,sizeof(a));
|
|
Player->Get(Player,PLAYER_LIST_COUNT,&b,sizeof(b));
|
|
if (a==b-1)
|
|
Play = 0;
|
|
else
|
|
Player->Set(Player,PLAYER_NEXT,NULL,0);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
return ERR_NONE;
|
|
}
|
|
|
|
void Main()
|
|
{
|
|
int Int;
|
|
notify Notify;
|
|
bool_t Bool;
|
|
node* Player = Context()->Player;
|
|
|
|
DumpOutput_Init();
|
|
|
|
Int = 0;//NULLAUDIO_ID;
|
|
Player->Set(Player,PLAYER_AOUTPUTID,&Int,sizeof(Int));
|
|
//Int = DUMPVIDEO_ID;
|
|
//Player->Set(Player,PLAYER_VOUTPUTID,&Int,sizeof(Int));
|
|
|
|
Notify.Func = PlayerNotify;
|
|
Notify.This = Player;
|
|
Player->Set(Player,PLAYER_NOTIFY,&Notify,sizeof(Notify));
|
|
|
|
// empty saved playlist
|
|
Int = 0;
|
|
Player->Set(Player,PLAYER_LIST_COUNT,&Int,sizeof(Int));
|
|
|
|
// turn off repeat
|
|
Bool = 0;
|
|
Player->Set(Player,PLAYER_REPEAT,&Bool,sizeof(Bool));
|
|
|
|
Context_Wnd((void*)1); //fake window handle
|
|
|
|
#if defined(TARGET_WIN32) && !defined(TARGET_WINCE) && !defined(FULLSCREEN)
|
|
{
|
|
rect Rect;
|
|
Rect.x = 600;
|
|
Rect.y = 40;
|
|
Rect.Width = 320;
|
|
Rect.Height = 240;
|
|
Player->Set(Player,PLAYER_SKIN_VIEWPORT,&Rect,sizeof(Rect));
|
|
}
|
|
#else
|
|
Bool = 1;
|
|
Player->Set(Player,PLAYER_FULLSCREEN,&Bool,sizeof(Bool));
|
|
#endif
|
|
|
|
#ifdef LOADALL
|
|
{
|
|
int ExtsLen = 1024;
|
|
tchar_t* Exts = malloc(ExtsLen*sizeof(tchar_t));
|
|
if (Exts)
|
|
{
|
|
int* i;
|
|
array List;
|
|
|
|
Exts[0]=0;
|
|
NodeEnumClass(&List,LOADALL);
|
|
for (i=ARRAYBEGIN(List,int);i!=ARRAYEND(List,int);++i)
|
|
{
|
|
const tchar_t* s = LangStr(*i,NODE_EXTS);
|
|
if (s[0])
|
|
{
|
|
if (Exts[0]) tcscat_s(Exts,ExtsLen,T(";"));
|
|
tcscat_s(Exts,ExtsLen,s);
|
|
}
|
|
}
|
|
ArrayClear(&List);
|
|
EnumDir(T("d:\\samples"),Exts);
|
|
free(Exts);
|
|
}
|
|
Context()->Error.Func = SilentError;
|
|
}
|
|
#else
|
|
Player->Set(Player,PLAYER_LIST_URL+0,URL,sizeof(URL));
|
|
#endif
|
|
|
|
Int = 0;
|
|
Player->Set(Player,PLAYER_LIST_CURRIDX,&Int,sizeof(Int));
|
|
|
|
((player*)Player)->Paint(Player,NULL,0,0);
|
|
|
|
#ifdef BENCHMARK
|
|
Bool = 1;
|
|
Context()->Advanced->Set(Context()->Advanced,ADVANCED_BENCHFROMPOS,&Bool,sizeof(Bool));
|
|
|
|
Int = 0;
|
|
Player->Set(Player,PLAYER_BENCHMARK,&Int,sizeof(Int));
|
|
#else
|
|
Bool = 1;
|
|
Player->Set(Player,PLAYER_PLAY,&Bool,sizeof(Bool));
|
|
#endif
|
|
|
|
Play = 1;
|
|
while (Play)
|
|
{
|
|
#ifndef MULTITHREAD
|
|
if (((player*)Player)->Process(Player) == ERR_BUFFER_FULL)
|
|
ThreadSleep(GetTimeFreq()/250);
|
|
#else
|
|
ThreadSleep(GetTimeFreq()/10);
|
|
#endif
|
|
}
|
|
|
|
Context_Wnd(NULL);
|
|
DumpOutput_Done();
|
|
}
|
|
|
|
#include <windows.h>
|
|
|
|
#if !defined(TARGET_WINCE) && defined(UNICODE)
|
|
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hParent,LPSTR CmdA,int CmdShow)
|
|
{
|
|
WCHAR Cmd[MAXCMD];
|
|
mbstowcs(Cmd,CmdA,sizeof(Cmd)/sizeof(WCHAR)); //!!!
|
|
#else
|
|
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hParent,TCHAR* Cmd,int CmdShow)
|
|
{
|
|
#endif
|
|
|
|
#ifndef NDEBUG
|
|
DLLTest(); // just to help debugging plugins. comment out if not needed
|
|
//DLLTest2(); // just to help debugging plugins. comment out if not needed
|
|
#endif
|
|
|
|
if (Context_Init("sample","sample",3,Cmd,NULL))
|
|
{
|
|
Main();
|
|
Context_Done();
|
|
}
|
|
}
|
|
|