/*---------------------------------------------------------------------------* Project: THP Simple Player demo File: main.c Copyright (C) 2002-2007 Nintendo. All Rights Reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Log: main.c,v $ Revision 1.3 2008/05/30 12:00:21 aka Added switch of stereo <-> mono. Revision 1.2 2006/10/11 02:51:31 aka Revised HOLLYWOOD_REV. Revision 1.1 2006/02/03 10:01:13 aka Imported from Dolphin tree. 4 2003/11/25 11:24 Dante Japanese to English translation of comments and text strings 3 2002/05/14 9:18a Suzuki Support multi audio track 2 2002/02/28 6:38p Akagi enabled to use with MusyX/AX by Suzuki-san (IRD). 1 2002/01/16 10:54a Akagi Initial revision made by Suzuki-san (IRD). $NoKeywords: $ *---------------------------------------------------------------------------*/ #include #include #include #include #include "THPSimple.h" #include "axseq.h" MEMHeapHandle __ExpHeap; void main(void) { u32 size, x, y, count; s32 frame, start, vol, audioTrack, smode; u16 buttonDown, button; u8 *buffer; GXRenderModeObj *rmode; THPVideoInfo videoInfo; THPAudioInfo audioInfo; void *arenaMem2Lo; void *arenaMem2Hi; DEMOInit(&GXNtsc480Int); arenaMem2Lo = OSGetMEM2ArenaLo(); arenaMem2Hi = OSGetMEM2ArenaHi(); __ExpHeap = MEMCreateExpHeap(arenaMem2Lo, (u32)arenaMem2Hi - (u32) arenaMem2Lo); AIInit(NULL); AXSeqSetup(); THPSimpleInit(THP_MODE_WITH_AX); GXSetDispCopyGamma(GX_GM_1_0); // Open THP file if (THPSimpleOpen("thpdemo/fish_mlt.thp") == FALSE) { OSHalt("THPSimpleOpen fail"); } THPSimpleGetVideoInfo(&videoInfo); THPSimpleGetAudioInfo(&audioInfo); rmode = DEMOGetRenderModeObj(); x = (rmode->fbWidth - videoInfo.xSize) / 2; y = (rmode->efbHeight - videoInfo.ySize) / 2; // Set aside work area size = THPSimpleCalcNeedMemory(); buffer = MEMAllocFromExpHeapEx(__ExpHeap, size, 32); if (!buffer) { OSHalt("Can't allocate the memory\n"); } THPSimpleSetBuffer(buffer); OSReport("\n#######################################\n"); OSReport("Push A button : restart the movie, select audio track at random\n"); OSReport("Push B button : play/stop midi file using AX\n"); OSReport("Push Start button : application end\n"); OSReport("Pad up : volume up\n"); OSReport("Pad down : volume down\n"); OSReport("#######################################\n"); RESTART: // Preload for playback if (THPSimplePreLoad(THP_PLAY_LOOP) == FALSE) { OSHalt("THPSimplePreLoad fail"); } audioTrack = (s32)(OSGetTick() % audioInfo.sndNumTracks); start = 1; count = VIGetRetraceCount(); while(1) { DEMOPadRead(); buttonDown = DEMOPadGetButtonDown(PAD_CHAN0); button = DEMOPadGetButton(PAD_CHAN0); DEMOBeforeRender(); // Decode 1 frame of THP data if (THPSimpleDecode(audioTrack) == THP_VIDEO_DECODE_FAIL) { OSHalt("Failed to decode video data"); } // Draw decoded THP video data frame = THPSimpleDrawCurrentFrame(rmode, x, y, videoInfo.xSize, videoInfo.ySize); while (VIGetRetraceCount() < count + 1) { VIWaitForRetrace(); } DEMODoneRender(); count = VIGetRetraceCount(); if (start) { // Allow audio output THPSimpleAudioStart(); start = 0; } if (buttonDown & PAD_BUTTON_A) { // Stop playback and then restart THPSimpleAudioStop(); THPSimpleLoadStop(); goto RESTART; } if (buttonDown & PAD_BUTTON_START) { // Stop playback and exit from main loop THPSimpleAudioStop(); THPSimpleLoadStop(); THPSimpleClose(); MEMFreeToExpHeap(__ExpHeap, buffer); break; } if (buttonDown & PAD_BUTTON_B) { if (GetSeqState()) { SeqStop(); } else { SeqPlay(); } } if (button & PAD_BUTTON_UP) { vol = THPSimpleGetVolume() + 1; if (vol > 127) { vol = 127; } THPSimpleSetVolume(vol, 0); } if (button & PAD_BUTTON_DOWN) { vol = THPSimpleGetVolume() - 1; if (vol < 0) { vol = 0; } THPSimpleSetVolume(vol, 0); } if (buttonDown & PAD_TRIGGER_Z) { smode = THPSimpleGetSoundMode(); if (smode == THP_SOUND_MODE_MONO) { THPSimpleSetSoundMode(THP_SOUND_MODE_STEREO); OSReport("Change sound mode : mono -> stereo.\n"); } else if (smode == THP_SOUND_MODE_STEREO) { THPSimpleSetSoundMode(THP_SOUND_MODE_MONO); OSReport("Change sound mode : stereo -> mono.\n"); } else { OSReport("Change sound mode : ???.\n"); } } } THPSimpleQuit(); VIWaitForRetrace(); OSHalt("application end\n"); return; }