d72031cee3
Upintegrate the android at home TX and RX players developed in the ICS_AAH branch. Change-Id: I8247d3702e30d8b0e215b31a92675d8ab28dccbb Signed-off-by: John Grossman <johngro@google.com>
180 lines
5.8 KiB
C++
180 lines
5.8 KiB
C++
/*
|
|
* Copyright (C) 2011 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.
|
|
*/
|
|
|
|
#ifndef __AAH_TX_PLAYER_H__
|
|
#define __AAH_TX_PLAYER_H__
|
|
|
|
#include <common_time/cc_helper.h>
|
|
#include <libstagefright/include/HTTPBase.h>
|
|
#include <libstagefright/include/NuCachedSource2.h>
|
|
#include <libstagefright/include/TimedEventQueue.h>
|
|
#include <media/MediaPlayerInterface.h>
|
|
#include <media/stagefright/MediaExtractor.h>
|
|
#include <media/stagefright/MediaSource.h>
|
|
#include <utils/LinearTransform.h>
|
|
#include <utils/String8.h>
|
|
#include <utils/threads.h>
|
|
|
|
#include "aah_tx_sender.h"
|
|
|
|
namespace android {
|
|
|
|
class AAH_TXPlayer : public MediaPlayerHWInterface {
|
|
public:
|
|
AAH_TXPlayer();
|
|
|
|
virtual status_t initCheck();
|
|
virtual status_t setDataSource(const char *url,
|
|
const KeyedVector<String8, String8>*
|
|
headers);
|
|
virtual status_t setDataSource(int fd, int64_t offset, int64_t length);
|
|
virtual status_t setVideoSurface(const sp<Surface>& surface);
|
|
virtual status_t setVideoSurfaceTexture(const sp<ISurfaceTexture>&
|
|
surfaceTexture);
|
|
virtual status_t prepare();
|
|
virtual status_t prepareAsync();
|
|
virtual status_t start();
|
|
virtual status_t stop();
|
|
virtual status_t pause();
|
|
virtual bool isPlaying();
|
|
virtual status_t seekTo(int msec);
|
|
virtual status_t getCurrentPosition(int *msec);
|
|
virtual status_t getDuration(int *msec);
|
|
virtual status_t reset();
|
|
virtual status_t setLooping(int loop);
|
|
virtual player_type playerType();
|
|
virtual status_t setParameter(int key, const Parcel &request);
|
|
virtual status_t getParameter(int key, Parcel *reply);
|
|
virtual status_t invoke(const Parcel& request, Parcel *reply);
|
|
virtual status_t getMetadata(const media::Metadata::Filter& ids,
|
|
Parcel* records);
|
|
virtual status_t setVolume(float leftVolume, float rightVolume);
|
|
virtual status_t setAudioStreamType(audio_stream_type_t streamType);
|
|
|
|
// invoke method IDs
|
|
enum {
|
|
// set the IP address and port of the A@H receiver
|
|
kInvokeSetAAHDstIPPort = 1,
|
|
|
|
// set the destination IP address and port (and perhaps any additional
|
|
// parameters added in the future) packaged in one string
|
|
kInvokeSetAAHConfigBlob,
|
|
};
|
|
|
|
static const int64_t kAAHRetryKeepAroundTimeNs;
|
|
|
|
protected:
|
|
virtual ~AAH_TXPlayer();
|
|
|
|
private:
|
|
friend struct AwesomeEvent;
|
|
|
|
enum {
|
|
PLAYING = 1,
|
|
PREPARING = 8,
|
|
PREPARED = 16,
|
|
PREPARE_CANCELLED = 64,
|
|
CACHE_UNDERRUN = 128,
|
|
|
|
// We are basically done preparing but are currently buffering
|
|
// sufficient data to begin playback and finish the preparation
|
|
// phase for good.
|
|
PREPARING_CONNECTED = 2048,
|
|
|
|
INCOGNITO = 32768,
|
|
};
|
|
|
|
status_t setDataSource_l(const char *url,
|
|
const KeyedVector<String8, String8> *headers);
|
|
status_t setDataSource_l(const sp<MediaExtractor>& extractor);
|
|
status_t finishSetDataSource_l();
|
|
status_t prepareAsync_l();
|
|
void onPrepareAsyncEvent();
|
|
void finishAsyncPrepare_l();
|
|
void abortPrepare(status_t err);
|
|
status_t play_l();
|
|
status_t pause_l(bool doClockUpdate = true);
|
|
status_t seekTo_l(int64_t timeUs);
|
|
void updateClockTransform_l(bool pause);
|
|
void sendEOS_l();
|
|
void cancelPlayerEvents(bool keepBufferingGoing = false);
|
|
void reset_l();
|
|
void notifyListener_l(int msg, int ext1 = 0, int ext2 = 0);
|
|
bool getBitrate_l(int64_t* bitrate);
|
|
status_t getDuration_l(int* msec);
|
|
bool getCachedDuration_l(int64_t* durationUs, bool* eos);
|
|
void ensureCacheIsFetching_l();
|
|
void postBufferingEvent_l();
|
|
void postPumpAudioEvent_l(int64_t delayUs);
|
|
void onBufferingUpdate();
|
|
void onPumpAudio();
|
|
void queuePacketToSender_l(const sp<TRTPPacket>& packet);
|
|
|
|
Mutex mLock;
|
|
|
|
TimedEventQueue mQueue;
|
|
bool mQueueStarted;
|
|
|
|
sp<TimedEventQueue::Event> mBufferingEvent;
|
|
bool mBufferingEventPending;
|
|
|
|
uint32_t mFlags;
|
|
uint32_t mExtractorFlags;
|
|
|
|
String8 mUri;
|
|
KeyedVector<String8, String8> mUriHeaders;
|
|
|
|
sp<DataSource> mFileSource;
|
|
|
|
sp<TimedEventQueue::Event> mAsyncPrepareEvent;
|
|
Condition mPreparedCondition;
|
|
status_t mPrepareResult;
|
|
|
|
bool mIsSeeking;
|
|
int64_t mSeekTimeUs;
|
|
|
|
sp<TimedEventQueue::Event> mPumpAudioEvent;
|
|
bool mPumpAudioEventPending;
|
|
|
|
sp<HTTPBase> mConnectingDataSource;
|
|
sp<NuCachedSource2> mCachedSource;
|
|
|
|
sp<MediaSource> mAudioSource;
|
|
int64_t mDurationUs;
|
|
int64_t mBitrate;
|
|
|
|
sp<AAH_TXSender> mAAH_Sender;
|
|
LinearTransform mCurrentClockTransform;
|
|
bool mCurrentClockTransformValid;
|
|
int64_t mLastQueuedMediaTimePTS;
|
|
bool mLastQueuedMediaTimePTSValid;
|
|
bool mPlayRateIsPaused;
|
|
CCHelper mCCHelper;
|
|
|
|
Mutex mEndpointLock;
|
|
AAH_TXSender::Endpoint mEndpoint;
|
|
bool mEndpointValid;
|
|
bool mEndpointRegistered;
|
|
uint16_t mProgramID;
|
|
uint8_t mTRTPVolume;
|
|
|
|
DISALLOW_EVIL_CONSTRUCTORS(AAH_TXPlayer);
|
|
};
|
|
|
|
} // namespace android
|
|
|
|
#endif // __AAH_TX_PLAYER_H__
|