Remove RefBase from plugin-side DataSource
Extractor plugins now use DataSourceBase, which is not refcounted.
Framework-side DataSource derives from DataSourceBase and RefBase.
Also remove MediaExtractor::release, because it is not needed
anymore due to the way the extractor/track/datasource lifecycle
is managed now.
Also add source and target pid to CallbackDataSource name, to
make the extractor dumpsys more useful.
Bug: 67908556
Test: build, boot, CTS, skia test app for heif
Change-Id: I6b9cbe903f76b0cf27ba87f4a456f424803efd08
diff --git a/media/extractors/aac/AACExtractor.cpp b/media/extractors/aac/AACExtractor.cpp
index 6f28374..1614ca4 100644
--- a/media/extractors/aac/AACExtractor.cpp
+++ b/media/extractors/aac/AACExtractor.cpp
@@ -19,7 +19,7 @@
#include <utils/Log.h>
#include "AACExtractor.h"
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/MediaSourceBase.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/AMessage.h>
@@ -35,7 +35,7 @@
class AACSource : public MediaSourceBase {
public:
- AACSource(const sp<DataSource> &source,
+ AACSource(DataSourceBase *source,
const sp<MetaData> &meta,
const Vector<uint64_t> &offset_vector,
int64_t frame_duration_us);
@@ -53,7 +53,7 @@
private:
static const size_t kMaxFrameSize;
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
sp<MetaData> mMeta;
off64_t mOffset;
@@ -91,7 +91,7 @@
// The returned value is the AAC frame size with the ADTS header length (regardless of
// the presence of the CRC).
// If headerSize is non-NULL, it will be used to return the size of the header of this ADTS frame.
-static size_t getAdtsFrameLength(const sp<DataSource> &source, off64_t offset, size_t* headerSize) {
+static size_t getAdtsFrameLength(DataSourceBase *source, off64_t offset, size_t* headerSize) {
const size_t kAdtsHeaderLengthNoCrc = 7;
const size_t kAdtsHeaderLengthWithCrc = 9;
@@ -132,7 +132,7 @@
}
AACExtractor::AACExtractor(
- const sp<DataSource> &source, const sp<AMessage> &_meta)
+ DataSourceBase *source, const sp<AMessage> &_meta)
: mDataSource(source),
mInitCheck(NO_INIT),
mFrameDurationUs(0) {
@@ -229,7 +229,7 @@
const size_t AACSource::kMaxFrameSize = 8192;
AACSource::AACSource(
- const sp<DataSource> &source, const sp<MetaData> &meta,
+ DataSourceBase *source, const sp<MetaData> &meta,
const Vector<uint64_t> &offset_vector,
int64_t frame_duration_us)
: mDataSource(source),
@@ -332,13 +332,13 @@
////////////////////////////////////////////////////////////////////////////////
static MediaExtractor* CreateExtractor(
- const sp<DataSource> &source,
+ DataSourceBase *source,
const sp<AMessage>& meta) {
return new AACExtractor(source, meta);
}
static MediaExtractor::CreatorFunc Sniff(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *meta) {
off64_t pos = 0;
diff --git a/media/extractors/aac/AACExtractor.h b/media/extractors/aac/AACExtractor.h
index 33fbba7..e99699c 100644
--- a/media/extractors/aac/AACExtractor.h
+++ b/media/extractors/aac/AACExtractor.h
@@ -29,7 +29,7 @@
class AACExtractor : public MediaExtractor {
public:
- AACExtractor(const sp<DataSource> &source, const sp<AMessage> &meta);
+ AACExtractor(DataSourceBase *source, const sp<AMessage> &meta);
virtual size_t countTracks();
virtual MediaSourceBase *getTrack(size_t index);
@@ -42,7 +42,7 @@
virtual ~AACExtractor();
private:
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
sp<MetaData> mMeta;
status_t mInitCheck;
@@ -54,7 +54,7 @@
};
bool SniffAAC(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *);
} // namespace android
diff --git a/media/extractors/amr/AMRExtractor.cpp b/media/extractors/amr/AMRExtractor.cpp
index 10be50c..547e3f5 100644
--- a/media/extractors/amr/AMRExtractor.cpp
+++ b/media/extractors/amr/AMRExtractor.cpp
@@ -20,7 +20,7 @@
#include "AMRExtractor.h"
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/MediaSourceBase.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/MediaBufferGroup.h>
@@ -33,7 +33,7 @@
class AMRSource : public MediaSourceBase {
public:
- AMRSource(const sp<DataSource> &source,
+ AMRSource(DataSourceBase *source,
const sp<MetaData> &meta,
bool isWide,
const off64_t *offset_table,
@@ -51,7 +51,7 @@
virtual ~AMRSource();
private:
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
sp<MetaData> mMeta;
bool mIsWide;
@@ -97,7 +97,7 @@
return frameSize;
}
-static status_t getFrameSizeByOffset(const sp<DataSource> &source,
+static status_t getFrameSizeByOffset(DataSourceBase *source,
off64_t offset, bool isWide, size_t *frameSize) {
uint8_t header;
ssize_t count = source->readAt(offset, &header, 1);
@@ -116,7 +116,7 @@
return OK;
}
-AMRExtractor::AMRExtractor(const sp<DataSource> &source)
+AMRExtractor::AMRExtractor(DataSourceBase *source)
: mDataSource(source),
mInitCheck(NO_INIT),
mOffsetTableLength(0) {
@@ -206,7 +206,7 @@
////////////////////////////////////////////////////////////////////////////////
AMRSource::AMRSource(
- const sp<DataSource> &source, const sp<MetaData> &meta,
+ DataSourceBase *source, const sp<MetaData> &meta,
bool isWide, const off64_t *offset_table, size_t offset_table_length)
: mDataSource(source),
mMeta(meta),
@@ -339,7 +339,7 @@
////////////////////////////////////////////////////////////////////////////////
bool SniffAMR(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *) {
char header[9];
@@ -372,13 +372,13 @@
1,
"AMR Extractor",
[](
- const sp<DataSource> &source,
+ DataSourceBase *source,
String8 *mimeType,
float *confidence,
sp<AMessage> *meta __unused) -> MediaExtractor::CreatorFunc {
if (SniffAMR(source, mimeType, confidence, meta)) {
return [](
- const sp<DataSource> &source,
+ DataSourceBase *source,
const sp<AMessage>& meta __unused) -> MediaExtractor* {
return new AMRExtractor(source);};
}
diff --git a/media/extractors/amr/AMRExtractor.h b/media/extractors/amr/AMRExtractor.h
index 56883e3..d6d49f2 100644
--- a/media/extractors/amr/AMRExtractor.h
+++ b/media/extractors/amr/AMRExtractor.h
@@ -29,7 +29,7 @@
class AMRExtractor : public MediaExtractor {
public:
- explicit AMRExtractor(const sp<DataSource> &source);
+ explicit AMRExtractor(DataSourceBase *source);
virtual size_t countTracks();
virtual MediaSourceBase *getTrack(size_t index);
@@ -42,7 +42,7 @@
virtual ~AMRExtractor();
private:
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
sp<MetaData> mMeta;
status_t mInitCheck;
bool mIsWide;
@@ -55,7 +55,7 @@
};
bool SniffAMR(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *);
} // namespace android
diff --git a/media/extractors/flac/FLACExtractor.cpp b/media/extractors/flac/FLACExtractor.cpp
index ba28e86..8dbb5a1 100644
--- a/media/extractors/flac/FLACExtractor.cpp
+++ b/media/extractors/flac/FLACExtractor.cpp
@@ -22,7 +22,7 @@
// libFLAC parser
#include "FLAC/stream_decoder.h"
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/MediaSourceBase.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -165,7 +165,7 @@
public:
FLACSource(
- const sp<DataSource> &dataSource,
+ DataSourceBase *dataSource,
const sp<MetaData> &trackMetadata);
virtual status_t start(MetaData *params);
@@ -179,7 +179,7 @@
virtual ~FLACSource();
private:
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
sp<MetaData> mTrackMetadata;
sp<FLACParser> mParser;
bool mInitCheck;
@@ -203,7 +203,7 @@
};
explicit FLACParser(
- const sp<DataSource> &dataSource,
+ DataSourceBase *dataSource,
// If metadata pointers aren't provided, we don't fill them
const sp<MetaData> &fileMetadata = 0,
const sp<MetaData> &trackMetadata = 0);
@@ -243,7 +243,7 @@
virtual ~FLACParser();
private:
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
sp<MetaData> mFileMetadata;
sp<MetaData> mTrackMetadata;
bool mInitCheck;
@@ -612,7 +612,7 @@
// FLACParser
FLACParser::FLACParser(
- const sp<DataSource> &dataSource,
+ DataSourceBase *dataSource,
const sp<MetaData> &fileMetadata,
const sp<MetaData> &trackMetadata)
: mDataSource(dataSource),
@@ -833,7 +833,7 @@
// FLACsource
FLACSource::FLACSource(
- const sp<DataSource> &dataSource,
+ DataSourceBase *dataSource,
const sp<MetaData> &trackMetadata)
: mDataSource(dataSource),
mTrackMetadata(trackMetadata),
@@ -918,7 +918,7 @@
// FLACExtractor
FLACExtractor::FLACExtractor(
- const sp<DataSource> &dataSource)
+ DataSourceBase *dataSource)
: mDataSource(dataSource),
mInitCheck(false)
{
@@ -969,7 +969,7 @@
// Sniffer
bool SniffFLAC(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *)
{
// first 4 is the signature word
@@ -1000,13 +1000,13 @@
1,
"FLAC Extractor",
[](
- const sp<DataSource> &source,
+ DataSourceBase *source,
String8 *mimeType,
float *confidence,
sp<AMessage> *meta __unused) -> MediaExtractor::CreatorFunc {
if (SniffFLAC(source, mimeType, confidence, meta)) {
return [](
- const sp<DataSource> &source,
+ DataSourceBase *source,
const sp<AMessage>& meta __unused) -> MediaExtractor* {
return new FLACExtractor(source);};
}
diff --git a/media/extractors/flac/FLACExtractor.h b/media/extractors/flac/FLACExtractor.h
index 2e7ee3b..ef07212 100644
--- a/media/extractors/flac/FLACExtractor.h
+++ b/media/extractors/flac/FLACExtractor.h
@@ -17,7 +17,7 @@
#ifndef FLAC_EXTRACTOR_H_
#define FLAC_EXTRACTOR_H_
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/MediaExtractor.h>
#include <utils/String8.h>
@@ -28,8 +28,7 @@
class FLACExtractor : public MediaExtractor {
public:
- // Extractor assumes ownership of source
- explicit FLACExtractor(const sp<DataSource> &source);
+ explicit FLACExtractor(DataSourceBase *source);
virtual size_t countTracks();
virtual MediaSourceBase *getTrack(size_t index);
@@ -42,7 +41,7 @@
virtual ~FLACExtractor();
private:
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
sp<FLACParser> mParser;
status_t mInitCheck;
sp<MetaData> mFileMetadata;
@@ -57,7 +56,7 @@
};
-bool SniffFLAC(const sp<DataSource> &source, String8 *mimeType,
+bool SniffFLAC(DataSourceBase *source, String8 *mimeType,
float *confidence, sp<AMessage> *);
} // namespace android
diff --git a/media/extractors/midi/MidiExtractor.cpp b/media/extractors/midi/MidiExtractor.cpp
index 18b1d23..711c6a5 100644
--- a/media/extractors/midi/MidiExtractor.cpp
+++ b/media/extractors/midi/MidiExtractor.cpp
@@ -141,7 +141,7 @@
// MidiEngine
-MidiEngine::MidiEngine(const sp<DataSource> &dataSource,
+MidiEngine::MidiEngine(DataSourceBase *dataSource,
const sp<MetaData> &fileMetadata,
const sp<MetaData> &trackMetadata) :
mGroup(NULL),
@@ -261,7 +261,7 @@
// MidiExtractor
MidiExtractor::MidiExtractor(
- const sp<DataSource> &dataSource)
+ DataSourceBase *dataSource)
: mDataSource(dataSource),
mInitCheck(false)
{
@@ -308,7 +308,7 @@
// Sniffer
bool SniffMidi(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *)
{
sp<MidiEngine> p = new MidiEngine(source, NULL, NULL);
@@ -333,13 +333,13 @@
1,
"MIDI Extractor",
[](
- const sp<DataSource> &source,
+ DataSourceBase *source,
String8 *mimeType,
float *confidence,
sp<AMessage> *meta __unused) -> MediaExtractor::CreatorFunc {
if (SniffMidi(source, mimeType, confidence, meta)) {
return [](
- const sp<DataSource> &source,
+ DataSourceBase *source,
const sp<AMessage>& meta __unused) -> MediaExtractor* {
return new MidiExtractor(source);};
}
diff --git a/media/extractors/midi/MidiExtractor.h b/media/extractors/midi/MidiExtractor.h
index 87e4654..91efd06 100644
--- a/media/extractors/midi/MidiExtractor.h
+++ b/media/extractors/midi/MidiExtractor.h
@@ -17,7 +17,7 @@
#ifndef MIDI_EXTRACTOR_H_
#define MIDI_EXTRACTOR_H_
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/MediaExtractor.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaBufferGroup.h>
@@ -29,7 +29,7 @@
class MidiEngine : public RefBase {
public:
- MidiEngine(const sp<DataSource> &dataSource,
+ MidiEngine(DataSourceBase *dataSource,
const sp<MetaData> &fileMetadata,
const sp<MetaData> &trackMetadata);
~MidiEngine();
@@ -52,8 +52,7 @@
class MidiExtractor : public MediaExtractor {
public:
- // Extractor assumes ownership of source
- explicit MidiExtractor(const sp<DataSource> &source);
+ explicit MidiExtractor(DataSourceBase *source);
virtual size_t countTracks();
virtual MediaSourceBase *getTrack(size_t index);
@@ -66,7 +65,7 @@
virtual ~MidiExtractor();
private:
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
status_t mInitCheck;
sp<MetaData> mFileMetadata;
@@ -88,7 +87,7 @@
};
-bool SniffMidi(const sp<DataSource> &source, String8 *mimeType,
+bool SniffMidi(DataSourceBase *source, String8 *mimeType,
float *confidence, sp<AMessage> *);
} // namespace android
diff --git a/media/extractors/mkv/MatroskaExtractor.cpp b/media/extractors/mkv/MatroskaExtractor.cpp
index 6df0012..f61f7c7 100644
--- a/media/extractors/mkv/MatroskaExtractor.cpp
+++ b/media/extractors/mkv/MatroskaExtractor.cpp
@@ -21,7 +21,7 @@
#include "FLACDecoder.h"
#include "MatroskaExtractor.h"
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/MediaSourceBase.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AUtils.h>
@@ -40,8 +40,8 @@
namespace android {
-struct DataSourceReader : public mkvparser::IMkvReader {
- explicit DataSourceReader(const sp<DataSource> &source)
+struct DataSourceBaseReader : public mkvparser::IMkvReader {
+ explicit DataSourceBaseReader(DataSourceBase *source)
: mSource(source) {
}
@@ -83,10 +83,10 @@
}
private:
- sp<DataSource> mSource;
+ DataSourceBase *mSource;
- DataSourceReader(const DataSourceReader &);
- DataSourceReader &operator=(const DataSourceReader &);
+ DataSourceBaseReader(const DataSourceBaseReader &);
+ DataSourceBaseReader &operator=(const DataSourceBaseReader &);
};
////////////////////////////////////////////////////////////////////////////////
@@ -852,9 +852,9 @@
////////////////////////////////////////////////////////////////////////////////
-MatroskaExtractor::MatroskaExtractor(const sp<DataSource> &source)
+MatroskaExtractor::MatroskaExtractor(DataSourceBase *source)
: mDataSource(source),
- mReader(new DataSourceReader(mDataSource)),
+ mReader(new DataSourceBaseReader(mDataSource)),
mSegment(NULL),
mExtractedThumbnails(false),
mIsWebm(false),
@@ -862,8 +862,8 @@
off64_t size;
mIsLiveStreaming =
(mDataSource->flags()
- & (DataSource::kWantsPrefetching
- | DataSource::kIsCachingDataSource))
+ & (DataSourceBase::kWantsPrefetching
+ | DataSourceBase::kIsCachingDataSource))
&& mDataSource->getSize(&size) != OK;
mkvparser::EBMLHeader ebmlHeader;
@@ -1548,9 +1548,9 @@
}
bool SniffMatroska(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *) {
- DataSourceReader reader(source);
+ DataSourceBaseReader reader(source);
mkvparser::EBMLHeader ebmlHeader;
long long pos;
if (ebmlHeader.Parse(&reader, pos) < 0) {
@@ -1574,13 +1574,13 @@
1,
"Matroska Extractor",
[](
- const sp<DataSource> &source,
+ DataSourceBase *source,
String8 *mimeType,
float *confidence,
sp<AMessage> *meta __unused) -> MediaExtractor::CreatorFunc {
if (SniffMatroska(source, mimeType, confidence, meta)) {
return [](
- const sp<DataSource> &source,
+ DataSourceBase *source,
const sp<AMessage>& meta __unused) -> MediaExtractor* {
return new MatroskaExtractor(source);};
}
diff --git a/media/extractors/mkv/MatroskaExtractor.h b/media/extractors/mkv/MatroskaExtractor.h
index 54419bf..095452b 100644
--- a/media/extractors/mkv/MatroskaExtractor.h
+++ b/media/extractors/mkv/MatroskaExtractor.h
@@ -30,11 +30,11 @@
class String8;
class MetaData;
-struct DataSourceReader;
+struct DataSourceBaseReader;
struct MatroskaSource;
struct MatroskaExtractor : public MediaExtractor {
- explicit MatroskaExtractor(const sp<DataSource> &source);
+ explicit MatroskaExtractor(DataSourceBase *source);
virtual size_t countTracks();
@@ -76,8 +76,8 @@
Mutex mLock;
Vector<TrackInfo> mTracks;
- sp<DataSource> mDataSource;
- DataSourceReader *mReader;
+ DataSourceBase *mDataSource;
+ DataSourceBaseReader *mReader;
mkvparser::Segment *mSegment;
bool mExtractedThumbnails;
bool mIsLiveStreaming;
@@ -96,7 +96,7 @@
};
bool SniffMatroska(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *);
} // namespace android
diff --git a/media/extractors/mp3/MP3Extractor.cpp b/media/extractors/mp3/MP3Extractor.cpp
index 7e27fd8..25d4deb 100644
--- a/media/extractors/mp3/MP3Extractor.cpp
+++ b/media/extractors/mp3/MP3Extractor.cpp
@@ -24,7 +24,7 @@
#include "VBRISeeker.h"
#include "XINGSeeker.h"
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/MediaSourceBase.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
@@ -46,7 +46,7 @@
static const uint32_t kMask = 0xfffe0c00;
static bool Resync(
- const sp<DataSource> &source, uint32_t match_header,
+ DataSourceBase *source, uint32_t match_header,
off64_t *inout_pos, off64_t *post_id3_pos, uint32_t *out_header) {
if (post_id3_pos != NULL) {
*post_id3_pos = 0;
@@ -212,7 +212,7 @@
class MP3Source : public MediaSourceBase {
public:
MP3Source(
- const sp<MetaData> &meta, const sp<DataSource> &source,
+ const sp<MetaData> &meta, DataSourceBase *source,
off64_t first_frame_pos, uint32_t fixed_header,
const sp<MP3Seeker> &seeker);
@@ -230,7 +230,7 @@
private:
static const size_t kMaxFrameSize;
sp<MetaData> mMeta;
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
off64_t mFirstFramePos;
uint32_t mFixedHeader;
off64_t mCurrentPos;
@@ -247,7 +247,7 @@
};
MP3Extractor::MP3Extractor(
- const sp<DataSource> &source, const sp<AMessage> &meta)
+ DataSourceBase *source, const sp<AMessage> &meta)
: mInitCheck(NO_INIT),
mDataSource(source),
mFirstFramePos(-1),
@@ -436,7 +436,7 @@
// Set our max frame size to the nearest power of 2 above this size (aka, 4kB)
const size_t MP3Source::kMaxFrameSize = (1 << 12); /* 4096 bytes */
MP3Source::MP3Source(
- const sp<MetaData> &meta, const sp<DataSource> &source,
+ const sp<MetaData> &meta, DataSourceBase *source,
off64_t first_frame_pos, uint32_t fixed_header,
const sp<MP3Seeker> &seeker)
: mMeta(meta),
@@ -667,13 +667,13 @@
}
static MediaExtractor* CreateExtractor(
- const sp<DataSource> &source,
+ DataSourceBase *source,
const sp<AMessage>& meta) {
return new MP3Extractor(source, meta);
}
static MediaExtractor::CreatorFunc Sniff(
- const sp<DataSource> &source, String8 *mimeType,
+ DataSourceBase *source, String8 *mimeType,
float *confidence, sp<AMessage> *meta) {
off64_t pos = 0;
off64_t post_id3_pos;
diff --git a/media/extractors/mp3/MP3Extractor.h b/media/extractors/mp3/MP3Extractor.h
index 3b3387d..6257112 100644
--- a/media/extractors/mp3/MP3Extractor.h
+++ b/media/extractors/mp3/MP3Extractor.h
@@ -24,14 +24,13 @@
namespace android {
struct AMessage;
-class DataSource;
+class DataSourceBase;
struct MP3Seeker;
class String8;
class MP3Extractor : public MediaExtractor {
public:
- // Extractor assumes ownership of "source".
- MP3Extractor(const sp<DataSource> &source, const sp<AMessage> &meta);
+ MP3Extractor(DataSourceBase *source, const sp<AMessage> &meta);
virtual size_t countTracks();
virtual MediaSourceBase *getTrack(size_t index);
@@ -43,7 +42,7 @@
private:
status_t mInitCheck;
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
off64_t mFirstFramePos;
sp<MetaData> mMeta;
uint32_t mFixedHeader;
@@ -54,7 +53,7 @@
};
bool SniffMP3(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *meta);
} // namespace android
diff --git a/media/extractors/mp3/VBRISeeker.cpp b/media/extractors/mp3/VBRISeeker.cpp
index e7db6fd..51c5d1f 100644
--- a/media/extractors/mp3/VBRISeeker.cpp
+++ b/media/extractors/mp3/VBRISeeker.cpp
@@ -27,7 +27,7 @@
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/ByteUtils.h>
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
namespace android {
@@ -37,7 +37,7 @@
// static
sp<VBRISeeker> VBRISeeker::CreateFromSource(
- const sp<DataSource> &source, off64_t post_id3_pos) {
+ DataSourceBase *source, off64_t post_id3_pos) {
off64_t pos = post_id3_pos;
uint8_t header[4];
diff --git a/media/extractors/mp3/VBRISeeker.h b/media/extractors/mp3/VBRISeeker.h
index 87258b0..e46af36 100644
--- a/media/extractors/mp3/VBRISeeker.h
+++ b/media/extractors/mp3/VBRISeeker.h
@@ -24,11 +24,11 @@
namespace android {
-class DataSource;
+class DataSourceBase;
struct VBRISeeker : public MP3Seeker {
static sp<VBRISeeker> CreateFromSource(
- const sp<DataSource> &source, off64_t post_id3_pos);
+ DataSourceBase *source, off64_t post_id3_pos);
virtual bool getDuration(int64_t *durationUs);
virtual bool getOffsetForTime(int64_t *timeUs, off64_t *pos);
diff --git a/media/extractors/mp3/XINGSeeker.cpp b/media/extractors/mp3/XINGSeeker.cpp
index fa59701..adfa8d2 100644
--- a/media/extractors/mp3/XINGSeeker.cpp
+++ b/media/extractors/mp3/XINGSeeker.cpp
@@ -21,7 +21,7 @@
#include <media/stagefright/foundation/avc_utils.h>
#include <media/stagefright/foundation/ByteUtils.h>
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
namespace android {
@@ -77,7 +77,7 @@
// static
sp<XINGSeeker> XINGSeeker::CreateFromSource(
- const sp<DataSource> &source, off64_t first_frame_pos) {
+ DataSourceBase *source, off64_t first_frame_pos) {
sp<XINGSeeker> seeker = new XINGSeeker;
seeker->mFirstFramePos = first_frame_pos;
diff --git a/media/extractors/mp3/XINGSeeker.h b/media/extractors/mp3/XINGSeeker.h
index 37077c4..db847bc 100644
--- a/media/extractors/mp3/XINGSeeker.h
+++ b/media/extractors/mp3/XINGSeeker.h
@@ -22,11 +22,11 @@
namespace android {
-class DataSource;
+class DataSourceBase;
struct XINGSeeker : public MP3Seeker {
static sp<XINGSeeker> CreateFromSource(
- const sp<DataSource> &source, off64_t first_frame_pos);
+ DataSourceBase *source, off64_t first_frame_pos);
virtual bool getDuration(int64_t *durationUs);
virtual bool getOffsetForTime(int64_t *timeUs, off64_t *pos);
diff --git a/media/extractors/mp4/ItemTable.cpp b/media/extractors/mp4/ItemTable.cpp
index 85c66b2..cef5f4a 100644
--- a/media/extractors/mp4/ItemTable.cpp
+++ b/media/extractors/mp4/ItemTable.cpp
@@ -18,7 +18,7 @@
#define LOG_TAG "ItemTable"
#include <ItemTable.h>
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/foundation/ABuffer.h>
@@ -87,7 +87,7 @@
struct Box {
protected:
- Box(const sp<DataSource> source, uint32_t type) :
+ Box(DataSourceBase *source, uint32_t type) :
mDataSource(source), mType(type) {}
virtual ~Box() {}
@@ -99,14 +99,14 @@
inline uint32_t type() const { return mType; }
- inline sp<DataSource> source() const { return mDataSource; }
+ inline DataSourceBase *source() const { return mDataSource; }
status_t parseChunk(off64_t *offset);
status_t parseChunks(off64_t offset, size_t size);
private:
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
uint32_t mType;
};
@@ -181,7 +181,7 @@
struct FullBox : public Box {
protected:
- FullBox(const sp<DataSource> source, uint32_t type) :
+ FullBox(DataSourceBase *source, uint32_t type) :
Box(source, type), mVersion(0), mFlags(0) {}
inline uint8_t version() const { return mVersion; }
@@ -216,7 +216,7 @@
//
struct PitmBox : public FullBox {
- PitmBox(const sp<DataSource> source) :
+ PitmBox(DataSourceBase *source) :
FullBox(source, FOURCC('p', 'i', 't', 'm')) {}
status_t parse(off64_t offset, size_t size, uint32_t *primaryItemId);
@@ -296,7 +296,7 @@
};
struct IlocBox : public FullBox {
- IlocBox(const sp<DataSource> source, KeyedVector<uint32_t, ItemLoc> *itemLocs) :
+ IlocBox(DataSourceBase *source, KeyedVector<uint32_t, ItemLoc> *itemLocs) :
FullBox(source, FOURCC('i', 'l', 'o', 'c')),
mItemLocs(itemLocs), mHasConstructMethod1(false) {}
@@ -466,7 +466,7 @@
//
struct ItemReference : public Box, public RefBase {
- ItemReference(const sp<DataSource> source, uint32_t type, uint32_t itemIdSize) :
+ ItemReference(DataSourceBase *source, uint32_t type, uint32_t itemIdSize) :
Box(source, type), mItemId(0), mRefIdSize(itemIdSize) {}
status_t parse(off64_t offset, size_t size);
@@ -575,7 +575,7 @@
}
struct IrefBox : public FullBox {
- IrefBox(const sp<DataSource> source, Vector<sp<ItemReference> > *itemRefs) :
+ IrefBox(DataSourceBase *source, Vector<sp<ItemReference> > *itemRefs) :
FullBox(source, FOURCC('i', 'r', 'e', 'f')), mRefIdSize(0), mItemRefs(itemRefs) {}
status_t parse(off64_t offset, size_t size);
@@ -637,7 +637,7 @@
};
struct IspeBox : public FullBox, public ItemProperty {
- IspeBox(const sp<DataSource> source) :
+ IspeBox(DataSourceBase *source) :
FullBox(source, FOURCC('i', 's', 'p', 'e')), mWidth(0), mHeight(0) {}
status_t parse(off64_t offset, size_t size) override;
@@ -673,7 +673,7 @@
}
struct HvccBox : public Box, public ItemProperty {
- HvccBox(const sp<DataSource> source) :
+ HvccBox(DataSourceBase *source) :
Box(source, FOURCC('h', 'v', 'c', 'C')) {}
status_t parse(off64_t offset, size_t size) override;
@@ -706,7 +706,7 @@
}
struct IrotBox : public Box, public ItemProperty {
- IrotBox(const sp<DataSource> source) :
+ IrotBox(DataSourceBase *source) :
Box(source, FOURCC('i', 'r', 'o', 't')), mAngle(0) {}
status_t parse(off64_t offset, size_t size) override;
@@ -735,7 +735,7 @@
}
struct ColrBox : public Box, public ItemProperty {
- ColrBox(const sp<DataSource> source) :
+ ColrBox(DataSourceBase *source) :
Box(source, FOURCC('c', 'o', 'l', 'r')) {}
status_t parse(off64_t offset, size_t size) override;
@@ -783,7 +783,7 @@
}
struct IpmaBox : public FullBox {
- IpmaBox(const sp<DataSource> source, Vector<AssociationEntry> *associations) :
+ IpmaBox(DataSourceBase *source, Vector<AssociationEntry> *associations) :
FullBox(source, FOURCC('i', 'p', 'm', 'a')), mAssociations(associations) {}
status_t parse(off64_t offset, size_t size);
@@ -857,7 +857,7 @@
}
struct IpcoBox : public Box {
- IpcoBox(const sp<DataSource> source, Vector<sp<ItemProperty> > *properties) :
+ IpcoBox(DataSourceBase *source, Vector<sp<ItemProperty> > *properties) :
Box(source, FOURCC('i', 'p', 'c', 'o')), mItemProperties(properties) {}
status_t parse(off64_t offset, size_t size);
@@ -914,7 +914,7 @@
}
struct IprpBox : public Box {
- IprpBox(const sp<DataSource> source,
+ IprpBox(DataSourceBase *source,
Vector<sp<ItemProperty> > *properties,
Vector<AssociationEntry> *associations) :
Box(source, FOURCC('i', 'p', 'r', 'p')),
@@ -971,7 +971,7 @@
};
struct InfeBox : public FullBox {
- InfeBox(const sp<DataSource> source) :
+ InfeBox(DataSourceBase *source) :
FullBox(source, FOURCC('i', 'n', 'f', 'e')) {}
status_t parse(off64_t offset, size_t size, ItemInfo *itemInfo);
@@ -1075,7 +1075,7 @@
}
struct IinfBox : public FullBox {
- IinfBox(const sp<DataSource> source, Vector<ItemInfo> *itemInfos) :
+ IinfBox(DataSourceBase *source, Vector<ItemInfo> *itemInfos) :
FullBox(source, FOURCC('i', 'i', 'n', 'f')),
mItemInfos(itemInfos), mHasGrids(false) {}
@@ -1144,7 +1144,7 @@
//////////////////////////////////////////////////////////////////
-ItemTable::ItemTable(const sp<DataSource> &source)
+ItemTable::ItemTable(DataSourceBase *source)
: mDataSource(source),
mPrimaryItemId(0),
mIdatOffset(0),
diff --git a/media/extractors/mp4/ItemTable.h b/media/extractors/mp4/ItemTable.h
index 3d2e2ae..f4a69cc 100644
--- a/media/extractors/mp4/ItemTable.h
+++ b/media/extractors/mp4/ItemTable.h
@@ -25,7 +25,7 @@
namespace android {
-class DataSource;
+class DataSourceBase;
class MetaData;
namespace heif {
@@ -44,7 +44,7 @@
class ItemTable : public RefBase {
public:
- explicit ItemTable(const sp<DataSource> &source);
+ explicit ItemTable(DataSourceBase *source);
status_t parse(uint32_t type, off64_t offset, size_t size);
@@ -60,7 +60,7 @@
~ItemTable();
private:
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
KeyedVector<uint32_t, ItemLoc> mItemLocs;
Vector<ItemInfo> mItemInfos;
diff --git a/media/extractors/mp4/MPEG4Extractor.cpp b/media/extractors/mp4/MPEG4Extractor.cpp
index 9f21db6..30dda13 100644
--- a/media/extractors/mp4/MPEG4Extractor.cpp
+++ b/media/extractors/mp4/MPEG4Extractor.cpp
@@ -69,7 +69,7 @@
public:
// Caller retains ownership of both "dataSource" and "sampleTable".
MPEG4Source(const sp<MetaData> &format,
- const sp<DataSource> &dataSource,
+ DataSourceBase *dataSource,
int32_t timeScale,
const sp<SampleTable> &sampleTable,
Vector<SidxEntry> &sidx,
@@ -93,7 +93,7 @@
Mutex mLock;
sp<MetaData> mFormat;
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
int32_t mTimescale;
sp<SampleTable> mSampleTable;
uint32_t mCurrentSampleIndex;
@@ -186,47 +186,51 @@
// all remaining requests to the wrapped datasource.
// This is used to cache the full sampletable metadata for a single track,
// possibly wrapping multiple times to cover all tracks, i.e.
-// Each MPEG4DataSource caches the sampletable metadata for a single track.
+// Each CachedRangedDataSource caches the sampletable metadata for a single track.
-struct MPEG4DataSource : public DataSource {
- explicit MPEG4DataSource(const sp<DataSource> &source);
+struct CachedRangedDataSource : public DataSourceBase {
+ explicit CachedRangedDataSource(DataSourceBase *source);
+ virtual ~CachedRangedDataSource();
virtual status_t initCheck() const;
virtual ssize_t readAt(off64_t offset, void *data, size_t size);
virtual status_t getSize(off64_t *size);
virtual uint32_t flags();
- status_t setCachedRange(off64_t offset, size_t size);
+ status_t setCachedRange(off64_t offset, size_t size, bool assumeSourceOwnershipOnSuccess);
-protected:
- virtual ~MPEG4DataSource();
private:
Mutex mLock;
- sp<DataSource> mSource;
+ DataSourceBase *mSource;
+ bool mOwnsDataSource;
off64_t mCachedOffset;
size_t mCachedSize;
uint8_t *mCache;
void clearCache();
- MPEG4DataSource(const MPEG4DataSource &);
- MPEG4DataSource &operator=(const MPEG4DataSource &);
+ CachedRangedDataSource(const CachedRangedDataSource &);
+ CachedRangedDataSource &operator=(const CachedRangedDataSource &);
};
-MPEG4DataSource::MPEG4DataSource(const sp<DataSource> &source)
+CachedRangedDataSource::CachedRangedDataSource(DataSourceBase *source)
: mSource(source),
+ mOwnsDataSource(false),
mCachedOffset(0),
mCachedSize(0),
mCache(NULL) {
}
-MPEG4DataSource::~MPEG4DataSource() {
+CachedRangedDataSource::~CachedRangedDataSource() {
clearCache();
+ if (mOwnsDataSource) {
+ delete (CachedRangedDataSource*)mSource;
+ }
}
-void MPEG4DataSource::clearCache() {
+void CachedRangedDataSource::clearCache() {
if (mCache) {
free(mCache);
mCache = NULL;
@@ -236,11 +240,11 @@
mCachedSize = 0;
}
-status_t MPEG4DataSource::initCheck() const {
+status_t CachedRangedDataSource::initCheck() const {
return mSource->initCheck();
}
-ssize_t MPEG4DataSource::readAt(off64_t offset, void *data, size_t size) {
+ssize_t CachedRangedDataSource::readAt(off64_t offset, void *data, size_t size) {
Mutex::Autolock autoLock(mLock);
if (isInRange(mCachedOffset, mCachedSize, offset, size)) {
@@ -251,15 +255,17 @@
return mSource->readAt(offset, data, size);
}
-status_t MPEG4DataSource::getSize(off64_t *size) {
+status_t CachedRangedDataSource::getSize(off64_t *size) {
return mSource->getSize(size);
}
-uint32_t MPEG4DataSource::flags() {
+uint32_t CachedRangedDataSource::flags() {
return mSource->flags();
}
-status_t MPEG4DataSource::setCachedRange(off64_t offset, size_t size) {
+status_t CachedRangedDataSource::setCachedRange(off64_t offset,
+ size_t size,
+ bool assumeSourceOwnershipOnSuccess) {
Mutex::Autolock autoLock(mLock);
clearCache();
@@ -280,7 +286,7 @@
return ERROR_IO;
}
-
+ mOwnsDataSource = assumeSourceOwnershipOnSuccess;
return OK;
}
@@ -334,11 +340,12 @@
return false;
}
-MPEG4Extractor::MPEG4Extractor(const sp<DataSource> &source, const char *mime)
+MPEG4Extractor::MPEG4Extractor(DataSourceBase *source, const char *mime)
: mMoofOffset(0),
mMoofFound(false),
mMdatFound(false),
mDataSource(source),
+ mCachedSource(NULL),
mInitCheck(NO_INIT),
mHeaderTimescale(0),
mIsQT(false),
@@ -354,10 +361,6 @@
}
MPEG4Extractor::~MPEG4Extractor() {
- release();
-}
-
-void MPEG4Extractor::release() {
Track *track = mFirstTrack;
while (track) {
Track *next = track->next;
@@ -381,10 +384,7 @@
}
mPssh.clear();
- if (mDataSource != NULL) {
- mDataSource->close();
- mDataSource.clear();
- }
+ delete mCachedSource;
}
uint32_t MPEG4Extractor::flags() const {
@@ -692,14 +692,14 @@
// Reads an encoded integer 7 bits at a time until it encounters the high bit clear.
static int32_t readSize(off64_t offset,
- const sp<DataSource> &DataSource, uint8_t *numOfBytes) {
+ DataSourceBase *DataSourceBase, uint8_t *numOfBytes) {
uint32_t size = 0;
uint8_t data;
bool moreData = true;
*numOfBytes = 0;
while (moreData) {
- if (DataSource->readAt(offset, &data, 1) < 1) {
+ if (DataSourceBase->readAt(offset, &data, 1) < 1) {
return -1;
}
offset ++;
@@ -1045,13 +1045,17 @@
ALOGV("sampleTable chunk is %" PRIu64 " bytes long.", chunk_size);
if (mDataSource->flags()
- & (DataSource::kWantsPrefetching
- | DataSource::kIsCachingDataSource)) {
- sp<MPEG4DataSource> cachedSource =
- new MPEG4DataSource(mDataSource);
+ & (DataSourceBase::kWantsPrefetching
+ | DataSourceBase::kIsCachingDataSource)) {
+ CachedRangedDataSource *cachedSource =
+ new CachedRangedDataSource(mDataSource);
- if (cachedSource->setCachedRange(*offset, chunk_size) == OK) {
- mDataSource = cachedSource;
+ if (cachedSource->setCachedRange(
+ *offset, chunk_size,
+ mCachedSource != NULL /* assume ownership on success */) == OK) {
+ mDataSource = mCachedSource = cachedSource;
+ } else {
+ delete cachedSource;
}
}
@@ -3890,7 +3894,7 @@
MPEG4Source::MPEG4Source(
const sp<MetaData> &format,
- const sp<DataSource> &dataSource,
+ DataSourceBase *dataSource,
int32_t timeScale,
const sp<SampleTable> &sampleTable,
Vector<SidxEntry> &sidx,
@@ -5379,7 +5383,7 @@
}
static bool LegacySniffMPEG4(
- const sp<DataSource> &source, String8 *mimeType, float *confidence) {
+ DataSourceBase *source, String8 *mimeType, float *confidence) {
uint8_t header[8];
ssize_t n = source->readAt(4, header, sizeof(header));
@@ -5446,7 +5450,7 @@
// (end of the 'moov' atom) and report it to the caller as part of
// the metadata.
static bool BetterSniffMPEG4(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *meta) {
// We scan up to 128 bytes to identify this file as an MP4.
static const off64_t kMaxScanOffset = 128ll;
@@ -5563,13 +5567,13 @@
}
static MediaExtractor* CreateExtractor(
- const sp<DataSource> &source,
+ DataSourceBase *source,
const sp<AMessage>& meta __unused) {
return new MPEG4Extractor(source);
}
static MediaExtractor::CreatorFunc Sniff(
- const sp<DataSource> &source,
+ DataSourceBase *source,
String8 *mimeType,
float *confidence,
sp<AMessage> *meta) {
diff --git a/media/extractors/mp4/MPEG4Extractor.h b/media/extractors/mp4/MPEG4Extractor.h
index e947b87..644c430 100644
--- a/media/extractors/mp4/MPEG4Extractor.h
+++ b/media/extractors/mp4/MPEG4Extractor.h
@@ -20,7 +20,7 @@
#include <arpa/inet.h>
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/MediaExtractor.h>
#include <media/stagefright/foundation/AString.h>
#include <utils/List.h>
@@ -29,7 +29,8 @@
namespace android {
struct AMessage;
-class DataSource;
+class DataSourceBase;
+struct CachedRangedDataSource;
class SampleTable;
class String8;
namespace heif {
@@ -52,8 +53,7 @@
class MPEG4Extractor : public MediaExtractor {
public:
- // Extractor assumes ownership of "source".
- explicit MPEG4Extractor(const sp<DataSource> &source, const char *mime = NULL);
+ explicit MPEG4Extractor(DataSourceBase *source, const char *mime = NULL);
virtual size_t countTracks();
virtual MediaSourceBase *getTrack(size_t index);
@@ -62,7 +62,6 @@
virtual sp<MetaData> getMetaData();
virtual uint32_t flags() const;
virtual const char * name() { return "MPEG4Extractor"; }
- virtual void release();
// for DRM
virtual char* getDrmTrackInfo(size_t trackID, int *len);
@@ -98,7 +97,8 @@
Vector<Trex> mTrex;
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
+ CachedRangedDataSource *mCachedSource;
status_t mInitCheck;
uint32_t mHeaderTimescale;
bool mIsQT;
@@ -160,7 +160,7 @@
};
bool SniffMPEG4(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *);
} // namespace android
diff --git a/media/extractors/mp4/SampleIterator.cpp b/media/extractors/mp4/SampleIterator.cpp
index c194397..93ee7c6 100644
--- a/media/extractors/mp4/SampleIterator.cpp
+++ b/media/extractors/mp4/SampleIterator.cpp
@@ -22,7 +22,7 @@
#include <arpa/inet.h>
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/ByteUtils.h>
diff --git a/media/extractors/mp4/SampleTable.cpp b/media/extractors/mp4/SampleTable.cpp
index 378d63a..81c353e 100644
--- a/media/extractors/mp4/SampleTable.cpp
+++ b/media/extractors/mp4/SampleTable.cpp
@@ -25,7 +25,7 @@
#include <arpa/inet.h>
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/ByteUtils.h>
@@ -114,7 +114,7 @@
////////////////////////////////////////////////////////////////////////////////
-SampleTable::SampleTable(const sp<DataSource> &source)
+SampleTable::SampleTable(DataSourceBase *source)
: mDataSource(source),
mChunkOffsetOffset(-1),
mChunkOffsetType(0),
diff --git a/media/extractors/mp4/SampleTable.h b/media/extractors/mp4/SampleTable.h
index 466e26b..e4e974b 100644
--- a/media/extractors/mp4/SampleTable.h
+++ b/media/extractors/mp4/SampleTable.h
@@ -27,12 +27,12 @@
namespace android {
-class DataSource;
+class DataSourceBase;
struct SampleIterator;
class SampleTable : public RefBase {
public:
- explicit SampleTable(const sp<DataSource> &source);
+ explicit SampleTable(DataSourceBase *source);
bool isValid() const;
@@ -99,7 +99,7 @@
// Limit the total size of all internal tables to 200MiB.
static const size_t kMaxTotalSize = 200 * (1 << 20);
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
Mutex mLock;
off64_t mChunkOffsetOffset;
diff --git a/media/extractors/mpeg2/ExtractorBundle.cpp b/media/extractors/mpeg2/ExtractorBundle.cpp
index d5682e9..443d685 100644
--- a/media/extractors/mpeg2/ExtractorBundle.cpp
+++ b/media/extractors/mpeg2/ExtractorBundle.cpp
@@ -34,18 +34,18 @@
1,
"MPEG2-PS/TS Extractor",
[](
- const sp<DataSource> &source,
+ DataSourceBase *source,
String8 *mimeType,
float *confidence,
sp<AMessage> *meta __unused) -> MediaExtractor::CreatorFunc {
if (SniffMPEG2TS(source, mimeType, confidence, meta)) {
return [](
- const sp<DataSource> &source,
+ DataSourceBase *source,
const sp<AMessage>& meta __unused) -> MediaExtractor* {
return new MPEG2TSExtractor(source);};
} else if (SniffMPEG2PS(source, mimeType, confidence, meta)) {
return [](
- const sp<DataSource> &source,
+ DataSourceBase *source,
const sp<AMessage>& meta __unused) -> MediaExtractor* {
return new MPEG2PSExtractor(source);};
}
diff --git a/media/extractors/mpeg2/MPEG2PSExtractor.cpp b/media/extractors/mpeg2/MPEG2PSExtractor.cpp
index 0978387..697e44f 100644
--- a/media/extractors/mpeg2/MPEG2PSExtractor.cpp
+++ b/media/extractors/mpeg2/MPEG2PSExtractor.cpp
@@ -23,7 +23,7 @@
#include "mpeg2ts/AnotherPacketSource.h"
#include "mpeg2ts/ESQueue.h"
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/MediaSourceBase.h>
#include <media/stagefright/foundation/ABitReader.h>
#include <media/stagefright/foundation/ABuffer.h>
@@ -94,7 +94,7 @@
////////////////////////////////////////////////////////////////////////////////
-MPEG2PSExtractor::MPEG2PSExtractor(const sp<DataSource> &source)
+MPEG2PSExtractor::MPEG2PSExtractor(DataSourceBase *source)
: mDataSource(source),
mOffset(0),
mFinalResult(OK),
@@ -751,7 +751,7 @@
////////////////////////////////////////////////////////////////////////////////
bool SniffMPEG2PS(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *) {
uint8_t header[5];
if (source->readAt(0, header, sizeof(header)) < (ssize_t)sizeof(header)) {
diff --git a/media/extractors/mpeg2/MPEG2PSExtractor.h b/media/extractors/mpeg2/MPEG2PSExtractor.h
index f8a97ef..adf719a 100644
--- a/media/extractors/mpeg2/MPEG2PSExtractor.h
+++ b/media/extractors/mpeg2/MPEG2PSExtractor.h
@@ -31,7 +31,7 @@
class String8;
struct MPEG2PSExtractor : public MediaExtractor {
- explicit MPEG2PSExtractor(const sp<DataSource> &source);
+ explicit MPEG2PSExtractor(DataSourceBase *source);
virtual size_t countTracks();
virtual MediaSourceBase *getTrack(size_t index);
@@ -50,7 +50,7 @@
struct WrappedTrack;
mutable Mutex mLock;
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
off64_t mOffset;
status_t mFinalResult;
@@ -72,7 +72,7 @@
};
bool SniffMPEG2PS(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *);
} // namespace android
diff --git a/media/extractors/mpeg2/MPEG2TSExtractor.cpp b/media/extractors/mpeg2/MPEG2TSExtractor.cpp
index b24e8db..6d0b1cc 100644
--- a/media/extractors/mpeg2/MPEG2TSExtractor.cpp
+++ b/media/extractors/mpeg2/MPEG2TSExtractor.cpp
@@ -22,7 +22,7 @@
#include "MPEG2TSExtractor.h"
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/IStreamSource.h>
#include <media/MediaSourceBase.h>
#include <media/stagefright/foundation/ABuffer.h>
@@ -121,7 +121,7 @@
////////////////////////////////////////////////////////////////////////////////
-MPEG2TSExtractor::MPEG2TSExtractor(const sp<DataSource> &source)
+MPEG2TSExtractor::MPEG2TSExtractor(DataSourceBase *source)
: mDataSource(source),
mParser(new ATSParser),
mLastSyncEvent(0),
@@ -367,7 +367,7 @@
}
status_t MPEG2TSExtractor::estimateDurationsFromTimesUsAtEnd() {
- if (!(mDataSource->flags() & DataSource::kIsLocalFileSource)) {
+ if (!(mDataSource->flags() & DataSourceBase::kIsLocalFileSource)) {
return ERROR_UNSUPPORTED;
}
@@ -646,7 +646,7 @@
////////////////////////////////////////////////////////////////////////////////
bool SniffMPEG2TS(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *) {
for (int i = 0; i < 5; ++i) {
char header;
diff --git a/media/extractors/mpeg2/MPEG2TSExtractor.h b/media/extractors/mpeg2/MPEG2TSExtractor.h
index 362f016..57cb675 100644
--- a/media/extractors/mpeg2/MPEG2TSExtractor.h
+++ b/media/extractors/mpeg2/MPEG2TSExtractor.h
@@ -32,12 +32,12 @@
struct AMessage;
struct AnotherPacketSource;
struct ATSParser;
-class DataSource;
+class DataSourceBase;
struct MPEG2TSSource;
class String8;
struct MPEG2TSExtractor : public MediaExtractor {
- explicit MPEG2TSExtractor(const sp<DataSource> &source);
+ explicit MPEG2TSExtractor(DataSourceBase *source);
virtual size_t countTracks();
virtual MediaSourceBase *getTrack(size_t index);
@@ -55,7 +55,7 @@
mutable Mutex mLock;
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
sp<ATSParser> mParser;
@@ -79,9 +79,9 @@
// Try to feed more data from source to parser.
// |isInit| means this function is called inside init(). This is a signal to
// save SyncEvent so that init() can add SyncPoint after it updates |mSourceImpls|.
- // This function returns OK if expected amount of data is fed from DataSource to
+ // This function returns OK if expected amount of data is fed from DataSourceBase to
// parser and is successfully parsed. Otherwise, various error codes could be
- // returned, e.g., ERROR_END_OF_STREAM, or no data availalbe from DataSource, or
+ // returned, e.g., ERROR_END_OF_STREAM, or no data availalbe from DataSourceBase, or
// the data has syntax error during parsing, etc.
status_t feedMore(bool isInit = false);
status_t seek(int64_t seekTimeUs,
@@ -100,7 +100,7 @@
};
bool SniffMPEG2TS(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *);
} // namespace android
diff --git a/media/extractors/ogg/OggExtractor.cpp b/media/extractors/ogg/OggExtractor.cpp
index f62ec47..1d04bed 100644
--- a/media/extractors/ogg/OggExtractor.cpp
+++ b/media/extractors/ogg/OggExtractor.cpp
@@ -21,7 +21,7 @@
#include "OggExtractor.h"
#include <cutils/properties.h>
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/MediaSourceBase.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -69,7 +69,7 @@
struct MyOggExtractor {
MyOggExtractor(
- const sp<DataSource> &source,
+ DataSourceBase *source,
const char *mimeType,
size_t numHeaders,
int64_t seekPreRollUs);
@@ -105,7 +105,7 @@
int64_t mTimeUs;
};
- sp<DataSource> mSource;
+ DataSourceBase *mSource;
off64_t mOffset;
Page mCurrentPage;
uint64_t mCurGranulePosition;
@@ -164,7 +164,7 @@
};
struct MyVorbisExtractor : public MyOggExtractor {
- explicit MyVorbisExtractor(const sp<DataSource> &source)
+ explicit MyVorbisExtractor(DataSourceBase *source)
: MyOggExtractor(source,
MEDIA_MIMETYPE_AUDIO_VORBIS,
/* numHeaders */ 3,
@@ -192,7 +192,7 @@
static const int32_t kOpusSampleRate = 48000;
static const int64_t kOpusSeekPreRollUs = 80000; // 80 ms
- explicit MyOpusExtractor(const sp<DataSource> &source)
+ explicit MyOpusExtractor(DataSourceBase *source)
: MyOggExtractor(source, MEDIA_MIMETYPE_AUDIO_OPUS, /*numHeaders*/ 2, kOpusSeekPreRollUs),
mChannelCount(0),
mCodecDelay(0),
@@ -294,7 +294,7 @@
////////////////////////////////////////////////////////////////////////////////
MyOggExtractor::MyOggExtractor(
- const sp<DataSource> &source,
+ DataSourceBase *source,
const char *mimeType,
size_t numHeaders,
int64_t seekPreRollUs)
@@ -852,7 +852,7 @@
off64_t size;
uint64_t lastGranulePosition;
- if (!(mSource->flags() & DataSource::kIsCachingDataSource)
+ if (!(mSource->flags() & DataSourceBase::kIsCachingDataSource)
&& mSource->getSize(&size) == OK
&& findPrevGranulePosition(size, &lastGranulePosition) == OK) {
// Let's assume it's cheap to seek to the end.
@@ -1315,7 +1315,7 @@
////////////////////////////////////////////////////////////////////////////////
-OggExtractor::OggExtractor(const sp<DataSource> &source)
+OggExtractor::OggExtractor(DataSourceBase *source)
: mDataSource(source),
mInitCheck(NO_INIT),
mImpl(NULL) {
@@ -1370,13 +1370,13 @@
}
static MediaExtractor* CreateExtractor(
- const sp<DataSource> &source,
+ DataSourceBase *source,
const sp<AMessage>& meta __unused) {
return new OggExtractor(source);
}
static MediaExtractor::CreatorFunc Sniff(
- const sp<DataSource> &source,
+ DataSourceBase *source,
String8 *mimeType,
float *confidence,
sp<AMessage> *) {
diff --git a/media/extractors/ogg/OggExtractor.h b/media/extractors/ogg/OggExtractor.h
index 126428c..c9c37eb 100644
--- a/media/extractors/ogg/OggExtractor.h
+++ b/media/extractors/ogg/OggExtractor.h
@@ -24,14 +24,14 @@
namespace android {
struct AMessage;
-class DataSource;
+class DataSourceBase;
class String8;
struct MyOggExtractor;
struct OggSource;
struct OggExtractor : public MediaExtractor {
- explicit OggExtractor(const sp<DataSource> &source);
+ explicit OggExtractor(DataSourceBase *source);
virtual size_t countTracks();
virtual MediaSourceBase *getTrack(size_t index);
@@ -46,7 +46,7 @@
private:
friend struct OggSource;
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
status_t mInitCheck;
MyOggExtractor *mImpl;
@@ -56,7 +56,7 @@
};
bool SniffOgg(
- const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ DataSourceBase *source, String8 *mimeType, float *confidence,
sp<AMessage> *);
} // namespace android
diff --git a/media/extractors/wav/WAVExtractor.cpp b/media/extractors/wav/WAVExtractor.cpp
index cf22c66..105a37f 100644
--- a/media/extractors/wav/WAVExtractor.cpp
+++ b/media/extractors/wav/WAVExtractor.cpp
@@ -21,7 +21,7 @@
#include "WAVExtractor.h"
#include <audio_utils/primitives.h>
-#include <media/DataSource.h>
+#include <media/DataSourceBase.h>
#include <media/MediaSourceBase.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/MediaBufferGroup.h>
@@ -57,7 +57,7 @@
struct WAVSource : public MediaSourceBase {
WAVSource(
- const sp<DataSource> &dataSource,
+ DataSourceBase *dataSource,
const sp<MetaData> &meta,
uint16_t waveFormat,
int32_t bitsPerSample,
@@ -78,7 +78,7 @@
private:
static const size_t kMaxFrameSize;
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
sp<MetaData> mMeta;
uint16_t mWaveFormat;
int32_t mSampleRate;
@@ -94,7 +94,7 @@
WAVSource &operator=(const WAVSource &);
};
-WAVExtractor::WAVExtractor(const sp<DataSource> &source)
+WAVExtractor::WAVExtractor(DataSourceBase *source)
: mDataSource(source),
mValidFormat(false),
mChannelMask(CHANNEL_MASK_USE_CHANNEL_ORDER) {
@@ -348,7 +348,7 @@
const size_t WAVSource::kMaxFrameSize = 32768;
WAVSource::WAVSource(
- const sp<DataSource> &dataSource,
+ DataSourceBase *dataSource,
const sp<MetaData> &meta,
uint16_t waveFormat,
int32_t bitsPerSample,
@@ -545,13 +545,13 @@
////////////////////////////////////////////////////////////////////////////////
static MediaExtractor* CreateExtractor(
- const sp<DataSource> &source,
+ DataSourceBase *source,
const sp<AMessage>& meta __unused) {
return new WAVExtractor(source);
}
static MediaExtractor::CreatorFunc Sniff(
- const sp<DataSource> &source,
+ DataSourceBase *source,
String8 *mimeType,
float *confidence,
sp<AMessage> *) {
diff --git a/media/extractors/wav/WAVExtractor.h b/media/extractors/wav/WAVExtractor.h
index 47c3c40..67661ed 100644
--- a/media/extractors/wav/WAVExtractor.h
+++ b/media/extractors/wav/WAVExtractor.h
@@ -24,13 +24,12 @@
namespace android {
struct AMessage;
-class DataSource;
+class DataSourceBase;
class String8;
class WAVExtractor : public MediaExtractor {
public:
- // Extractor assumes ownership of "source".
- explicit WAVExtractor(const sp<DataSource> &source);
+ explicit WAVExtractor(DataSourceBase *source);
virtual size_t countTracks();
virtual MediaSourceBase *getTrack(size_t index);
@@ -42,7 +41,7 @@
virtual ~WAVExtractor();
private:
- sp<DataSource> mDataSource;
+ DataSourceBase *mDataSource;
status_t mInitCheck;
bool mValidFormat;
uint16_t mWaveFormat;