18f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania/* 28f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * Copyright (C) 2009 The Android Open Source Project 38f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * 48f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * Licensed under the Apache License, Version 2.0 (the "License"); 58f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * you may not use this file except in compliance with the License. 68f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * You may obtain a copy of the License at 78f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * 88f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * http://www.apache.org/licenses/LICENSE-2.0 98f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * 108f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * Unless required by applicable law or agreed to in writing, software 118f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * distributed under the License is distributed on an "AS IS" BASIS, 128f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * See the License for the specific language governing permissions and 148f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania * limitations under the License. 158f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania */ 168f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 178f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania//#define LOG_NDEBUG 0 188f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania#define LOG_TAG "TestPlayerStub" 198f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania#include "utils/Log.h" 208f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 218f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania#include <string.h> 228f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 238994837f27e783a10f5cc038a7ae7595aabffdb6niko#include <binder/Parcel.h> 248994837f27e783a10f5cc038a7ae7595aabffdb6niko#include <media/MediaPlayerInterface.h> 258994837f27e783a10f5cc038a7ae7595aabffdb6niko#include <utils/Errors.h> 268f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 278994837f27e783a10f5cc038a7ae7595aabffdb6nikousing android::INVALID_OPERATION; 28e3c01832fc741e9908f047d86cd40db1ea5d78c8Andreas Huberusing android::Surface; 29cc562a3576a6a8096626387472e05e8bee03352aGlenn Kastenusing android::ISurfaceTexture; 308f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniausing android::MediaPlayerBase; 318f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniausing android::OK; 328f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniausing android::Parcel; 338994837f27e783a10f5cc038a7ae7595aabffdb6nikousing android::SortedVector; 348f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniausing android::TEST_PLAYER; 358f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniausing android::UNKNOWN_ERROR; 368f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniausing android::player_type; 378f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniausing android::sp; 388f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniausing android::status_t; 39256430093679e1d62b54fb0c852126e54d162f6fAndreas Huberusing android::String8; 40256430093679e1d62b54fb0c852126e54d162f6fAndreas Huberusing android::KeyedVector; 418f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 428f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania// This file contains a test player that is loaded via the 438f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania// TestPlayerStub class. The player contains various implementation 448f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania// of the invoke method that java tests can use. 458f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 468f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catanianamespace { 478f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniaconst char *kPing = "ping"; 488f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 498f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniaclass Player: public MediaPlayerBase 508f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania{ 518f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania public: 528f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania enum TestType {TEST_UNKNOWN, PING}; 538f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania Player() {} 548f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual ~Player() {} 558f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 568f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t initCheck() {return OK;} 578f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual bool hardwareOutput() {return true;} 588f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 59256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber virtual status_t setDataSource( 60256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber const char *url, 61256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber const KeyedVector<String8, String8> *) { 6271f2cf116aab893e224056c38ab146bd1538dd3eSteve Block ALOGV("setDataSource %s", url); 638f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania mTest = TEST_UNKNOWN; 648f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania if (strncmp(url, kPing, strlen(kPing)) == 0) { 658f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania mTest = PING; 668f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania } 678f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania return OK; 688f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania } 698f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 708f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t setDataSource(int fd, int64_t offset, int64_t length) {return OK;} 71cc562a3576a6a8096626387472e05e8bee03352aGlenn Kasten virtual status_t setVideoSurfaceTexture( 72cc562a3576a6a8096626387472e05e8bee03352aGlenn Kasten const sp<ISurfaceTexture>& surfaceTexture) {return OK;} 738f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t prepare() {return OK;} 748f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t prepareAsync() {return OK;} 758f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t start() {return OK;} 768f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t stop() {return OK;} 778f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t pause() {return OK;} 788f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual bool isPlaying() {return true;} 798f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t seekTo(int msec) {return OK;} 808f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t getCurrentPosition(int *msec) {return OK;} 818f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t getDuration(int *msec) {return OK;} 828f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t reset() {return OK;} 838f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t setLooping(int loop) {return OK;} 848f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual player_type playerType() {return TEST_PLAYER;} 858f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania virtual status_t invoke(const Parcel& request, Parcel *reply); 86d01ec6eab019e46398975202e9e4a198a603ad99Gloria Wang virtual status_t setParameter(int key, const Parcel &request) {return OK;} 87d01ec6eab019e46398975202e9e4a198a603ad99Gloria Wang virtual status_t getParameter(int key, Parcel *reply) {return OK;} 88d01ec6eab019e46398975202e9e4a198a603ad99Gloria Wang 898994837f27e783a10f5cc038a7ae7595aabffdb6niko 908f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania private: 918f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania // Take a request, copy it to the reply. 928f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania void ping(const Parcel& request, Parcel *reply); 938f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 948f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania status_t mStatus; 958f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania TestType mTest; 968f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania}; 978f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 988f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniastatus_t Player::invoke(const Parcel& request, Parcel *reply) 998f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania{ 1008f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania switch (mTest) { 1018f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania case PING: 1028f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania ping(request, reply); 1038f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania break; 1048f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania default: mStatus = UNKNOWN_ERROR; 1058f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania } 1068f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania return mStatus; 1078f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania} 1088f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 1098f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniavoid Player::ping(const Parcel& request, Parcel *reply) 1108f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania{ 1118f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania const size_t len = request.dataAvail(); 1128f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 1138f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania reply->setData(static_cast<const uint8_t*>(request.readInplace(len)), len); 1148f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania mStatus = OK; 1158f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania} 1168f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 1178f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania} 1188f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 1198f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniaextern "C" android::MediaPlayerBase* newPlayer() 1208f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania{ 1215baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("New invoke test player"); 1228f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania return new Player(); 1238f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania} 1248f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania 1258f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Cataniaextern "C" android::status_t deletePlayer(android::MediaPlayerBase *player) 1268f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania{ 1275baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("Delete invoke test player"); 1288f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania delete player; 1298f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania return OK; 1308f5fcab05f1d6f644a9c30f012b8ff302f24a118Nicolas Catania} 131