// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Stand alone media player application used for testing the media library. #include "media/player/player_wtl.h" #include "base/at_exit.h" #include "base/command_line.h" #include "media/base/pipeline_impl.h" #include "media/filters/audio_renderer_impl.h" #include "media/filters/ffmpeg_audio_decoder.h" #include "media/filters/ffmpeg_demuxer.h" #include "media/filters/ffmpeg_video_decoder.h" #include "media/filters/file_data_source.h" #include "media/player/mainfrm.h" // See player_wtl.h to enable timing code by turning on TESTING macro. namespace switches { const wchar_t* const kExit = L"exit"; } // namespace switches CAppModule g_module; int Run(wchar_t* win_cmd_line, int cmd_show) { base::AtExitManager exit_manager; // Windows version of Init uses OS to fetch command line. CommandLine::Init(0, NULL); const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); std::vector filenames(cmd_line->GetLooseValues()); CMessageLoop the_loop; g_module.AddMessageLoop(&the_loop); CMainFrame wnd_main; if (wnd_main.CreateEx() == NULL) { DCHECK(false) << "Main window creation failed!"; return 0; } wnd_main.ShowWindow(cmd_show); if (!filenames.empty()) { const wchar_t* url = filenames[0].c_str(); wnd_main.MovieOpenFile(url); } if (cmd_line->HasSwitch(switches::kExit)) { wnd_main.OnOptionsExit(0, 0, 0); } int result = the_loop.Run(); media::Movie::get()->Close(); g_module.RemoveMessageLoop(); return result; } int WINAPI _tWinMain(HINSTANCE instance, HINSTANCE /*previous_instance*/, wchar_t* cmd_line, int cmd_show) { #ifdef TESTING double player_time_start = GetTime(); #endif INITCOMMONCONTROLSEX iccx; iccx.dwSize = sizeof(iccx); iccx.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES; if (!::InitCommonControlsEx(&iccx)) { DCHECK(false) << "Failed to initialize common controls"; return 1; } if (FAILED(g_module.Init(NULL, instance))) { DCHECK(false) << "Failed to initialize application module"; return 1; } int result = Run(cmd_line, cmd_show); g_module.Term(); #ifdef TESTING double player_time_end = GetTime(); char outputbuf[512]; _snprintf_s(outputbuf, sizeof(outputbuf), "player time %5.2f ms\n", player_time_end - player_time_start); OutputDebugStringA(outputbuf); printf("%s", outputbuf); #endif return result; }