Files
android/proprietary/wvm/include/WVMMediaSource.h
Jeff Tinker 462dc030f8 Upgrade of Widevine libraries from 4.5.0 to 6.0.0
Upload for Dave Parsons

6.0.0 Widevine libraries contain the features required
to support multiple audio tracks and subtitles.  This
is establishing the baseline for those features.

Change-Id: If12074bb2e4364c8107339e2f69453c40698e91f
related-to-bug: 5880566
2012-04-05 15:49:32 -07:00

95 lines
2.3 KiB
C++

/*
* Copyright (C) 2011 Google, Inc. All Rights Reserved
*/
#ifndef WVMMEDIA_SOURCE_H_
#define WVMMEDIA_SOURCE_H_
#include "AndroidConfig.h"
#include "WVStreamControlAPI.h"
#include <media/stagefright/DataSource.h>
#include <media/stagefright/MediaSource.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/MediaBufferGroup.h>
#include <utils/RefBase.h>
#ifdef REQUIRE_SECURE_BUFFERS
#include "OEMCrypto_L1.h"
#endif
namespace android {
class WVMFileSource;
class WVMMediaSource : public MediaSource {
public:
WVMMediaSource(WVSession *session, WVEsSelector esSelector,
const sp<MetaData> &metaData, bool isLive);
void delegateFileSource(sp<WVMFileSource> fileSource);
void delegateDataSource(sp<DataSource> dataSource);
virtual status_t start(MetaData *params = NULL);
virtual status_t stop();
virtual sp<MetaData> getFormat();
virtual status_t setBuffers(const Vector<MediaBuffer *> &buffers);
virtual status_t read(MediaBuffer **buffer, const ReadOptions *options = NULL);
static int sLastError;
#ifdef REQUIRE_SECURE_BUFFERS
class DecryptContext {
public:
void Initialize(MediaBuffer *mediaBuf) {
mMediaBuf = mediaBuf;
mOffset = 0;
memset(mIV, 0, sizeof(mIV));
}
MediaBuffer *mMediaBuf;
size_t mOffset;
static const int kCryptoBlockSize = 16;
unsigned char mIV[kCryptoBlockSize];
};
static WVStatus DecryptCallback(WVEsSelector esType, void* input, void* output, size_t length,
int key, unsigned long long dts, unsigned long long pts, bool au_end);
static DecryptContext sDecryptContext[2]; // audio vs. video
#endif
protected:
virtual ~WVMMediaSource();
private:
Mutex mLock;
WVSession *mSession;
WVEsSelector mESSelector; // indicates audio vs. video
sp<MetaData> mTrackMetaData;
bool mStarted;
bool mLogOnce;
bool mIsLiveStream;
bool mNewSegment;
MediaBufferGroup *mGroup;
unsigned long long mDts;
unsigned long long mPts;
sp<WVMFileSource> mFileSource;
sp<DataSource> mDataSource;
void allocBufferGroup();
WVMMediaSource(const WVMMediaSource &);
WVMMediaSource &operator=(const WVMMediaSource &);
};
} // namespace android
#endif // WVMMEDIA_SOURCE_H_