summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MPEG4Extractor.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2009-08-14 14:37:10 -0700
committerAndreas Huber <andih@google.com>2009-08-17 10:24:50 -0700
commit693d271e62a3726689ff68f4505ba49228eb94b2 (patch)
treedcc952183cfd766d385c25665571be967926cf89 /media/libstagefright/MPEG4Extractor.cpp
parent59ecb64c9629ab02329f8240c85b820ee0c98a2e (diff)
downloadframeworks_av-693d271e62a3726689ff68f4505ba49228eb94b2.zip
frameworks_av-693d271e62a3726689ff68f4505ba49228eb94b2.tar.gz
frameworks_av-693d271e62a3726689ff68f4505ba49228eb94b2.tar.bz2
Squashed commit of the following:
commit 5bb012f0065f7ffaaeb4f569d71f0e3a8d6b19c3 Author: Andreas Huber <andih@google.com> Date: Fri Aug 14 10:40:08 2009 -0700 An attempt at fixing export using the qcom encoders. More quirks. commit 0690e76bfa48118a68287ccf1bbfa82febaa620c Author: Andreas Huber <andih@google.com> Date: Fri Aug 14 09:08:28 2009 -0700 Callbacks are now dispatched from a separate thread in OMX. commit c6571a039526df29b6343f9a1971dbc019088c61 Author: Andreas Huber <andih@google.com> Date: Thu Aug 13 15:42:25 2009 -0700 Massive API changes throughout stagefright, smart pointers everywhere. commit 900612af6a0555664d9ba195112cd859491265f4 Author: Andreas Huber <andih@google.com> Date: Thu Aug 13 13:33:12 2009 -0700 OMXCodecs now properly shutdown. commit 96732f05e1b0603dcd1b11f16a23512592eeb4f5 Author: Andreas Huber <andih@google.com> Date: Thu Aug 13 12:04:04 2009 -0700 More work on JPEG decoding using the hardware OMX component. commit 63839a073ac393e3a130434ba467969053b694ad Author: Andreas Huber <andih@google.com> Date: Wed Aug 12 13:13:31 2009 -0700 An attempt to drive the JPEG decoder OMX node. commit 3ac2fe5ab2926eda81b2123610b2434c645294ff Author: Andreas Huber <andih@google.com> Date: Tue Aug 11 16:38:21 2009 -0700 Renamed StateMachine to OMXCodec and put it in its proper place. commit 247da75a96bf8881956413023dd49a84d5b4f5b2 Author: Andreas Huber <andih@google.com> Date: Tue Aug 11 16:06:19 2009 -0700 Statemachine is now a full-fledged MediaSource. commit 045244f6771fa0b9b329495c953afda900a84b71 Author: Andreas Huber <andih@google.com> Date: Fri Aug 7 09:16:54 2009 -0700 Properly setup the input format when exporting to AMR audio. commit 271b984cb32c5cd9e46e3f90ae121f334e4b8da9 Author: Andreas Huber <andih@google.com> Date: Thu Aug 6 09:59:38 2009 -0700 Added some code to test audio encoding to the OMX harness. commit 79af4748e4af33bd66d3fbac606e332a69741cf4 Author: Andreas Huber <andih@google.com> Date: Wed Aug 5 14:36:22 2009 -0700 Merge the old OMXDecoder and the new, shiny, StateMachine code. commit 91cf5dd77a8762bc10a0b2ffce35e3bbeb262231 Author: Andreas Huber <andih@google.com> Date: Tue Aug 4 17:41:43 2009 -0700 A new harness to test OMX node compliance (and quirks).
Diffstat (limited to 'media/libstagefright/MPEG4Extractor.cpp')
-rw-r--r--media/libstagefright/MPEG4Extractor.cpp60
1 files changed, 23 insertions, 37 deletions
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp
index 4c883c6..662d5fb 100644
--- a/media/libstagefright/MPEG4Extractor.cpp
+++ b/media/libstagefright/MPEG4Extractor.cpp
@@ -42,10 +42,9 @@ namespace android {
class MPEG4Source : public MediaSource {
public:
// Caller retains ownership of both "dataSource" and "sampleTable".
- MPEG4Source(const sp<MetaData> &format, DataSource *dataSource,
- SampleTable *sampleTable);
-
- virtual ~MPEG4Source();
+ MPEG4Source(const sp<MetaData> &format,
+ const sp<DataSource> &dataSource,
+ const sp<SampleTable> &sampleTable);
virtual status_t start(MetaData *params = NULL);
virtual status_t stop();
@@ -55,11 +54,14 @@ public:
virtual status_t read(
MediaBuffer **buffer, const ReadOptions *options = NULL);
+protected:
+ virtual ~MPEG4Source();
+
private:
sp<MetaData> mFormat;
- DataSource *mDataSource;
+ sp<DataSource> mDataSource;
int32_t mTimescale;
- SampleTable *mSampleTable;
+ sp<SampleTable> mSampleTable;
uint32_t mCurrentSampleIndex;
bool mIsAVC;
@@ -141,7 +143,7 @@ static const char *const FourCC2MIME(uint32_t fourcc) {
}
}
-MPEG4Extractor::MPEG4Extractor(DataSource *source)
+MPEG4Extractor::MPEG4Extractor(const sp<DataSource> &source)
: mDataSource(source),
mHaveMetadata(false),
mFirstTrack(NULL),
@@ -153,39 +155,29 @@ MPEG4Extractor::~MPEG4Extractor() {
while (track) {
Track *next = track->next;
- delete track->sampleTable;
- track->sampleTable = NULL;
-
delete track;
track = next;
}
mFirstTrack = mLastTrack = NULL;
-
- delete mDataSource;
- mDataSource = NULL;
}
-status_t MPEG4Extractor::countTracks(int *num_tracks) {
+size_t MPEG4Extractor::countTracks() {
status_t err;
if ((err = readMetaData()) != OK) {
- return err;
+ return 0;
}
- *num_tracks = 0;
+ size_t n = 0;
Track *track = mFirstTrack;
while (track) {
- ++*num_tracks;
+ ++n;
track = track->next;
}
- return OK;
+ return n;
}
-sp<MetaData> MPEG4Extractor::getTrackMetaData(int index) {
- if (index < 0) {
- return NULL;
- }
-
+sp<MetaData> MPEG4Extractor::getTrackMetaData(size_t index) {
status_t err;
if ((err = readMetaData()) != OK) {
return NULL;
@@ -701,39 +693,32 @@ status_t MPEG4Extractor::parseChunk(off_t *offset, int depth) {
return OK;
}
-status_t MPEG4Extractor::getTrack(int index, MediaSource **source) {
- *source = NULL;
-
- if (index < 0) {
- return ERROR_OUT_OF_RANGE;
- }
-
+sp<MediaSource> MPEG4Extractor::getTrack(size_t index) {
status_t err;
if ((err = readMetaData()) != OK) {
- return err;
+ return NULL;
}
Track *track = mFirstTrack;
while (index > 0) {
if (track == NULL) {
- return ERROR_OUT_OF_RANGE;
+ return NULL;
}
track = track->next;
--index;
}
- *source = new MPEG4Source(
+ return new MPEG4Source(
track->meta, mDataSource, track->sampleTable);
-
- return OK;
}
////////////////////////////////////////////////////////////////////////////////
MPEG4Source::MPEG4Source(
const sp<MetaData> &format,
- DataSource *dataSource, SampleTable *sampleTable)
+ const sp<DataSource> &dataSource,
+ const sp<SampleTable> &sampleTable)
: mFormat(format),
mDataSource(dataSource),
mTimescale(0),
@@ -935,7 +920,8 @@ status_t MPEG4Source::read(
return OK;
}
-bool SniffMPEG4(DataSource *source, String8 *mimeType, float *confidence) {
+bool SniffMPEG4(
+ const sp<DataSource> &source, String8 *mimeType, float *confidence) {
uint8_t header[8];
ssize_t n = source->read_at(4, header, sizeof(header));