| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| //#define LOG_NDEBUG 0 |
| #define LOG_TAG "TestPlayerStub" |
| #include "utils/Log.h" |
| |
| #include <string.h> |
| |
| #include <binder/Parcel.h> |
| #include <media/MediaPlayerInterface.h> |
| #include <utils/Errors.h> |
| |
| using android::INVALID_OPERATION; |
| using android::Surface; |
| using android::IGraphicBufferProducer; |
| using android::IMediaHTTPService; |
| using android::MediaPlayerBase; |
| using android::OK; |
| using android::Parcel; |
| using android::SortedVector; |
| using android::TEST_PLAYER; |
| using android::UNKNOWN_ERROR; |
| using android::player_type; |
| using android::sp; |
| using android::status_t; |
| using android::String8; |
| using android::KeyedVector; |
| |
| // This file contains a test player that is loaded via the |
| // TestPlayerStub class. The player contains various implementation |
| // of the invoke method that java tests can use. |
| |
| namespace { |
| const char *kPing = "ping"; |
| |
| class Player: public MediaPlayerBase |
| { |
| public: |
| enum TestType {TEST_UNKNOWN, PING}; |
| Player() {} |
| virtual ~Player() {} |
| |
| virtual status_t initCheck() {return OK;} |
| virtual bool hardwareOutput() {return true;} |
| |
| virtual status_t setDataSource( |
| const sp<IMediaHTTPService>& /* httpService */, |
| const char *url, |
| const KeyedVector<String8, String8> *) { |
| ALOGV("setDataSource %s", url); |
| mTest = TEST_UNKNOWN; |
| if (strncmp(url, kPing, strlen(kPing)) == 0) { |
| mTest = PING; |
| } |
| return OK; |
| } |
| |
| virtual status_t setDataSource(int /* fd */, int64_t /* offset */, int64_t /* length */) { |
| return OK; |
| } |
| virtual status_t setVideoSurfaceTexture( |
| const sp<IGraphicBufferProducer>& /* bufferProducer */) { |
| return OK; |
| } |
| virtual status_t prepare() { return OK; } |
| virtual status_t prepareAsync() { return OK; } |
| virtual status_t start() { return OK; } |
| virtual status_t stop() { return OK; } |
| virtual status_t pause() { return OK; } |
| virtual bool isPlaying() { return true; } |
| virtual status_t seekTo(int /* msec */) { return OK; } |
| virtual status_t getCurrentPosition(int* /* msec */) { return OK; } |
| virtual status_t getDuration(int* /* msec */) { return OK; } |
| virtual status_t reset() {return OK;} |
| virtual status_t setLooping(int /* loop */) { return OK; } |
| virtual player_type playerType() {return TEST_PLAYER;} |
| virtual status_t invoke(const Parcel& request, Parcel *reply); |
| virtual status_t setParameter(int /* key */, const Parcel& /* request */) { return OK; } |
| virtual status_t getParameter(int /* key */, Parcel* /* reply */) { return OK; } |
| |
| |
| private: |
| // Take a request, copy it to the reply. |
| void ping(const Parcel& request, Parcel *reply); |
| |
| status_t mStatus; |
| TestType mTest; |
| }; |
| |
| status_t Player::invoke(const Parcel& request, Parcel *reply) |
| { |
| switch (mTest) { |
| case PING: |
| ping(request, reply); |
| break; |
| default: mStatus = UNKNOWN_ERROR; |
| } |
| return mStatus; |
| } |
| |
| void Player::ping(const Parcel& request, Parcel *reply) |
| { |
| const size_t len = request.dataAvail(); |
| |
| reply->setData(static_cast<const uint8_t*>(request.readInplace(len)), len); |
| mStatus = OK; |
| } |
| |
| } |
| |
| extern "C" android::MediaPlayerBase* newPlayer() |
| { |
| ALOGD("New invoke test player"); |
| return new Player(); |
| } |
| |
| extern "C" android::status_t deletePlayer(android::MediaPlayerBase *player) |
| { |
| ALOGD("Delete invoke test player"); |
| delete player; |
| return OK; |
| } |