Remove support for non-NDK extractor formats

Remove support for intermediate extractor format versions
and leave only the 'V3' format, but remove 'V3' from the
names of the classes and structs involved, and reset the
version number back to 2 (version 1 is the C++ interface
shipped in P, which is no longer supported).

Bug: 111407253
Test: build
Change-Id: I702080e6bbfbac265967a93945ee97191d463125
diff --git a/include/media/MediaExtractorPluginApi.h b/include/media/MediaExtractorPluginApi.h
index b480bbe..854bf83 100644
--- a/include/media/MediaExtractorPluginApi.h
+++ b/include/media/MediaExtractorPluginApi.h
@@ -47,33 +47,11 @@
     NONBLOCKING = 16
 };
 
-struct CMediaTrack {
-    void *data;
-    void (*free)(void *data);
-
-    status_t (*start)(void *data);
-    status_t (*stop)(void *data);
-    status_t (*getFormat)(void *data, MetaDataBase &format);
-    status_t (*read)(void *data, MediaBufferBase **buffer, uint32_t options, int64_t seekPosUs);
-    bool     (*supportsNonBlockingRead)(void *data);
-};
-
-struct CMediaTrackV2 {
-    void *data;
-    void (*free)(void *data);
-
-    media_status_t (*start)(void *data);
-    media_status_t (*stop)(void *data);
-    media_status_t (*getFormat)(void *data, AMediaFormat *format);
-    media_status_t (*read)(void *data, MediaBufferBase **buffer, uint32_t options, int64_t seekPosUs);
-    bool     (*supportsNonBlockingRead)(void *data);
-};
-
 /**
- * only use CMediaBufferV3 allocated from the CMediaBufferGroupV3 that is
+ * only use CMediaBuffer allocated from the CMediaBufferGroup that is
  * provided to CMediaTrack::start()
  */
-struct CMediaBufferV3 {
+struct CMediaBuffer {
     void *handle;
     void (*release)(void *handle);
     void* (*data)(void *handle);
@@ -84,49 +62,32 @@
     AMediaFormat* (*meta_data)(void *handle);
 };
 
-struct CMediaBufferGroupV3 {
+struct CMediaBufferGroup {
     void *handle;
     bool (*init)(void *handle, size_t buffers, size_t buffer_size, size_t growthLimit);
     void (*add_buffer)(void *handle, size_t size);
     media_status_t (*acquire_buffer)(void *handle,
-            CMediaBufferV3 **buffer, bool nonBlocking, size_t requestedSize);
+            CMediaBuffer **buffer, bool nonBlocking, size_t requestedSize);
     bool (*has_buffers)(void *handle);
 };
 
-struct CMediaTrackV3 {
+struct CMediaTrack {
     void *data;
     void (*free)(void *data);
 
-    media_status_t (*start)(void *data, CMediaBufferGroupV3 *bufferGroup);
+    media_status_t (*start)(void *data, CMediaBufferGroup *bufferGroup);
     media_status_t (*stop)(void *data);
     media_status_t (*getFormat)(void *data, AMediaFormat *format);
-    media_status_t (*read)(void *data, CMediaBufferV3 **buffer, uint32_t options, int64_t seekPosUs);
+    media_status_t (*read)(void *data, CMediaBuffer **buffer, uint32_t options, int64_t seekPosUs);
     bool     (*supportsNonBlockingRead)(void *data);
 };
 
-struct CMediaExtractorV1 {
+struct CMediaExtractor {
     void *data;
 
     void (*free)(void *data);
     size_t (*countTracks)(void *data);
     CMediaTrack* (*getTrack)(void *data, size_t index);
-    status_t (*getTrackMetaData)(
-            void *data,
-            MetaDataBase& meta,
-            size_t index, uint32_t flags);
-
-    status_t (*getMetaData)(void *data, MetaDataBase& meta);
-    uint32_t (*flags)(void *data);
-    status_t (*setMediaCas)(void *data, const uint8_t* casToken, size_t size);
-    const char * (*name)(void *data);
-};
-
-struct CMediaExtractorV2 {
-    void *data;
-
-    void (*free)(void *data);
-    size_t (*countTracks)(void *data);
-    CMediaTrackV2* (*getTrack)(void *data, size_t index);
     media_status_t (*getTrackMetaData)(
             void *data,
             AMediaFormat *meta,
@@ -138,48 +99,19 @@
     const char * (*name)(void *data);
 };
 
-struct CMediaExtractorV3 {
-    void *data;
-
-    void (*free)(void *data);
-    size_t (*countTracks)(void *data);
-    CMediaTrackV3* (*getTrack)(void *data, size_t index);
-    media_status_t (*getTrackMetaData)(
-            void *data,
-            AMediaFormat *meta,
-            size_t index, uint32_t flags);
-
-    media_status_t (*getMetaData)(void *data, AMediaFormat *meta);
-    uint32_t (*flags)(void *data);
-    media_status_t (*setMediaCas)(void *data, const uint8_t* casToken, size_t size);
-    const char * (*name)(void *data);
-};
-
-typedef CMediaExtractorV1* (*CreatorFuncV1)(CDataSource *source, void *meta);
+typedef CMediaExtractor* (*CreatorFunc)(CDataSource *source, void *meta);
 typedef void (*FreeMetaFunc)(void *meta);
 
 // The sniffer can optionally fill in an opaque object, "meta", that helps
 // the corresponding extractor initialize its state without duplicating
 // effort already exerted by the sniffer. If "freeMeta" is given, it will be
 // called against the opaque object when it is no longer used.
-typedef CreatorFuncV1 (*SnifferFuncV1)(
+typedef CreatorFunc (*SnifferFunc)(
         CDataSource *source, float *confidence,
         void **meta, FreeMetaFunc *freeMeta);
 
-typedef CMediaExtractorV2* (*CreatorFuncV2)(CDataSource *source, void *meta);
-
-typedef CreatorFuncV2 (*SnifferFuncV2)(
-        CDataSource *source, float *confidence,
-        void **meta, FreeMetaFunc *freeMeta);
-
-typedef CMediaExtractorV3* (*CreatorFuncV3)(CDataSource *source, void *meta);
-
-typedef CreatorFuncV3 (*SnifferFuncV3)(
-        CDataSource *source, float *confidence,
-        void **meta, FreeMetaFunc *freeMeta);
-
-typedef CMediaExtractorV1 CMediaExtractor;
-typedef CreatorFuncV1 CreatorFunc;
+typedef CMediaExtractor CMediaExtractor;
+typedef CreatorFunc CreatorFunc;
 
 
 typedef struct {
@@ -203,16 +135,17 @@
     const char *extractor_name;
 
     union {
-        SnifferFuncV1 v1;
-        SnifferFuncV2 v2;
-        SnifferFuncV3 v3;
+        SnifferFunc v2;
     } sniff;
 };
 
+// the C++ based API which first shipped in P and is no longer supported
 const uint32_t EXTRACTORDEF_VERSION_LEGACY = 1;
-const uint32_t EXTRACTORDEF_VERSION_CURRENT = 2;
 
-const uint32_t EXTRACTORDEF_VERSION = EXTRACTORDEF_VERSION_LEGACY;
+// the first C/NDK based API
+const uint32_t EXTRACTORDEF_VERSION_NDK_V1 = 2;
+
+const uint32_t EXTRACTORDEF_VERSION = EXTRACTORDEF_VERSION_NDK_V1;
 
 // each plugin library exports one function of this type
 typedef ExtractorDef (*GetExtractorDef)();
diff --git a/include/media/MediaExtractorPluginHelper.h b/include/media/MediaExtractorPluginHelper.h
index 705aa81..f4d4da6 100644
--- a/include/media/MediaExtractorPluginHelper.h
+++ b/include/media/MediaExtractorPluginHelper.h
@@ -35,155 +35,18 @@
 struct MediaTrack;
 
 
-class MediaTrackHelper {
-public:
-    virtual ~MediaTrackHelper() {};
-    virtual status_t start() = 0;
-    virtual status_t stop() = 0;
-    virtual status_t getFormat(MetaDataBase& format) = 0;
+class MediaTrackHelper;
 
-    class ReadOptions {
-    public:
-        enum SeekMode : int32_t {
-            SEEK_PREVIOUS_SYNC,
-            SEEK_NEXT_SYNC,
-            SEEK_CLOSEST_SYNC,
-            SEEK_CLOSEST,
-            SEEK_FRAME_INDEX,
-        };
-
-        ReadOptions(uint32_t options, int64_t seekPosUs) {
-            mOptions = options;
-            mSeekPosUs = seekPosUs;
-        }
-        bool getSeekTo(int64_t *time_us, SeekMode *mode) const {
-            if ((mOptions & CMediaTrackReadOptions::SEEK) == 0) {
-                return false;
-            }
-            *time_us = mSeekPosUs;
-            *mode = (SeekMode) (mOptions & 7);
-            return true;
-        }
-        bool getNonBlocking() const {
-            return mOptions & CMediaTrackReadOptions::NONBLOCKING;
-        }
-    private:
-        uint32_t mOptions;
-        int64_t mSeekPosUs;
-    };
-
-    virtual status_t read(
-            MediaBufferBase **buffer, const ReadOptions *options = NULL) = 0;
-    virtual bool supportsNonBlockingRead() { return false; }
-};
-
-inline CMediaTrack *wrap(MediaTrackHelper *track) {
-    CMediaTrack *wrapper = (CMediaTrack*) malloc(sizeof(CMediaTrack));
-    wrapper->data = track;
-    wrapper->free = [](void *data) -> void {
-        delete (MediaTrackHelper*)(data);
-    };
-    wrapper->start = [](void *data) -> status_t {
-        return ((MediaTrackHelper*)data)->start();
-    };
-    wrapper->stop = [](void *data) -> status_t {
-        return ((MediaTrackHelper*)data)->stop();
-    };
-    wrapper->getFormat = [](void *data, MetaDataBase &meta) -> status_t {
-        return ((MediaTrackHelper*)data)->getFormat(meta);
-    };
-    wrapper->read = [](void *data, MediaBufferBase **buffer,  uint32_t options, int64_t seekPosUs)
-            -> status_t {
-        MediaTrackHelper::ReadOptions opts(options, seekPosUs);
-        return ((MediaTrackHelper*)data)->read(buffer, &opts);
-    };
-    wrapper->supportsNonBlockingRead = [](void *data) -> bool {
-                return ((MediaTrackHelper*)data)->supportsNonBlockingRead();
-    };
-    return wrapper;
-}
-
-
-class MediaTrackHelperV2 {
-public:
-    virtual ~MediaTrackHelperV2() {};
-    virtual media_status_t start() = 0;
-    virtual media_status_t stop() = 0;
-    virtual media_status_t getFormat(AMediaFormat *format) = 0;
-
-    class ReadOptions {
-    public:
-        enum SeekMode : int32_t {
-            SEEK_PREVIOUS_SYNC,
-            SEEK_NEXT_SYNC,
-            SEEK_CLOSEST_SYNC,
-            SEEK_CLOSEST,
-            SEEK_FRAME_INDEX,
-        };
-
-        ReadOptions(uint32_t options, int64_t seekPosUs) {
-            mOptions = options;
-            mSeekPosUs = seekPosUs;
-        }
-        bool getSeekTo(int64_t *time_us, SeekMode *mode) const {
-            if ((mOptions & CMediaTrackReadOptions::SEEK) == 0) {
-                return false;
-            }
-            *time_us = mSeekPosUs;
-            *mode = (SeekMode) (mOptions & 7);
-            return true;
-        }
-        bool getNonBlocking() const {
-            return mOptions & CMediaTrackReadOptions::NONBLOCKING;
-        }
-    private:
-        uint32_t mOptions;
-        int64_t mSeekPosUs;
-    };
-
-    virtual media_status_t read(
-            MediaBufferBase **buffer, const ReadOptions *options = NULL) = 0;
-    virtual bool supportsNonBlockingRead() { return false; }
-};
-
-inline CMediaTrackV2 *wrapV2(MediaTrackHelperV2 *track) {
-    CMediaTrackV2 *wrapper = (CMediaTrackV2*) malloc(sizeof(CMediaTrackV2));
-    wrapper->data = track;
-    wrapper->free = [](void *data) -> void {
-        delete (MediaTrackHelperV2*)(data);
-    };
-    wrapper->start = [](void *data) -> media_status_t {
-        return ((MediaTrackHelperV2*)data)->start();
-    };
-    wrapper->stop = [](void *data) -> media_status_t {
-        return ((MediaTrackHelperV2*)data)->stop();
-    };
-    wrapper->getFormat = [](void *data, AMediaFormat *meta) -> media_status_t {
-        return ((MediaTrackHelperV2*)data)->getFormat(meta);
-    };
-    wrapper->read = [](void *data, MediaBufferBase **buffer,  uint32_t options, int64_t seekPosUs)
-            -> media_status_t {
-        MediaTrackHelperV2::ReadOptions opts(options, seekPosUs);
-        return ((MediaTrackHelperV2*)data)->read(buffer, &opts);
-    };
-    wrapper->supportsNonBlockingRead = [](void *data) -> bool {
-                return ((MediaTrackHelperV2*)data)->supportsNonBlockingRead();
-    };
-    return wrapper;
-}
-
-class MediaTrackHelperV3;
-
-class MediaBufferHelperV3 {
+class MediaBufferHelper {
 private:
-    friend CMediaTrackV3 *wrapV3(MediaTrackHelperV3 *);
-    CMediaBufferV3 *mBuffer;
+    friend CMediaTrack *wrap(MediaTrackHelper *);
+    CMediaBuffer *mBuffer;
 public:
-    MediaBufferHelperV3(CMediaBufferV3 *buf) {
+    MediaBufferHelper(CMediaBuffer *buf) {
         mBuffer = buf;
     }
 
-    virtual ~MediaBufferHelperV3() {}
+    virtual ~MediaBufferHelper() {}
 
     virtual void release() {
         mBuffer->release(mBuffer->handle);
@@ -213,15 +76,15 @@
     }
 };
 
-class MediaBufferGroupHelperV3 {
+class MediaBufferGroupHelper {
 private:
-    CMediaBufferGroupV3 *mGroup;
-    std::map<CMediaBufferV3*, MediaBufferHelperV3*> mBufferHelpers;
+    CMediaBufferGroup *mGroup;
+    std::map<CMediaBuffer*, MediaBufferHelper*> mBufferHelpers;
 public:
-    MediaBufferGroupHelperV3(CMediaBufferGroupV3 *group) {
+    MediaBufferGroupHelper(CMediaBufferGroup *group) {
         mGroup = group;
     }
-    ~MediaBufferGroupHelperV3() {
+    ~MediaBufferGroupHelper() {
         // delete all entries in map
         ALOGV("buffergroup %p map has %zu entries", this, mBufferHelpers.size());
         for (auto it = mBufferHelpers.begin(); it != mBufferHelpers.end(); ++it) {
@@ -235,14 +98,14 @@
         mGroup->add_buffer(mGroup->handle, size);
     }
     media_status_t acquire_buffer(
-            MediaBufferHelperV3 **buffer, bool nonBlocking = false, size_t requestedSize = 0) {
-        CMediaBufferV3 *buf = nullptr;
+            MediaBufferHelper **buffer, bool nonBlocking = false, size_t requestedSize = 0) {
+        CMediaBuffer *buf = nullptr;
         media_status_t ret =
                 mGroup->acquire_buffer(mGroup->handle, &buf, nonBlocking, requestedSize);
         if (ret == AMEDIA_OK && buf != nullptr) {
             auto helper = mBufferHelpers.find(buf);
             if (helper == mBufferHelpers.end()) {
-                MediaBufferHelperV3* newHelper = new MediaBufferHelperV3(buf);
+                MediaBufferHelper* newHelper = new MediaBufferHelper(buf);
                 mBufferHelpers.insert(std::make_pair(buf, newHelper));
                 *buffer = newHelper;
             } else {
@@ -258,11 +121,11 @@
     }
 };
 
-class MediaTrackHelperV3 {
+class MediaTrackHelper {
 public:
-    MediaTrackHelperV3() : mBufferGroup(nullptr) {
+    MediaTrackHelper() : mBufferGroup(nullptr) {
     }
-    virtual ~MediaTrackHelperV3() {
+    virtual ~MediaTrackHelper() {
         delete mBufferGroup;
     }
     virtual media_status_t start() = 0;
@@ -300,45 +163,45 @@
     };
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL) = 0;
+            MediaBufferHelper **buffer, const ReadOptions *options = NULL) = 0;
     virtual bool supportsNonBlockingRead() { return false; }
 protected:
-    friend CMediaTrackV3 *wrapV3(MediaTrackHelperV3 *track);
-    MediaBufferGroupHelperV3 *mBufferGroup;
+    friend CMediaTrack *wrap(MediaTrackHelper *track);
+    MediaBufferGroupHelper *mBufferGroup;
 };
 
-inline CMediaTrackV3 *wrapV3(MediaTrackHelperV3 *track) {
-    CMediaTrackV3 *wrapper = (CMediaTrackV3*) malloc(sizeof(CMediaTrackV3));
+inline CMediaTrack *wrap(MediaTrackHelper *track) {
+    CMediaTrack *wrapper = (CMediaTrack*) malloc(sizeof(CMediaTrack));
     wrapper->data = track;
     wrapper->free = [](void *data) -> void {
-        delete (MediaTrackHelperV3*)(data);
+        delete (MediaTrackHelper*)(data);
     };
-    wrapper->start = [](void *data, CMediaBufferGroupV3 *bufferGroup) -> media_status_t {
-        if (((MediaTrackHelperV3*)data)->mBufferGroup) {
+    wrapper->start = [](void *data, CMediaBufferGroup *bufferGroup) -> media_status_t {
+        if (((MediaTrackHelper*)data)->mBufferGroup) {
             // this shouldn't happen, but handle it anyway
-            delete ((MediaTrackHelperV3*)data)->mBufferGroup;
+            delete ((MediaTrackHelper*)data)->mBufferGroup;
         }
-        ((MediaTrackHelperV3*)data)->mBufferGroup = new MediaBufferGroupHelperV3(bufferGroup);
-        return ((MediaTrackHelperV3*)data)->start();
+        ((MediaTrackHelper*)data)->mBufferGroup = new MediaBufferGroupHelper(bufferGroup);
+        return ((MediaTrackHelper*)data)->start();
     };
     wrapper->stop = [](void *data) -> media_status_t {
-        return ((MediaTrackHelperV3*)data)->stop();
+        return ((MediaTrackHelper*)data)->stop();
     };
     wrapper->getFormat = [](void *data, AMediaFormat *meta) -> media_status_t {
-        return ((MediaTrackHelperV3*)data)->getFormat(meta);
+        return ((MediaTrackHelper*)data)->getFormat(meta);
     };
-    wrapper->read = [](void *data, CMediaBufferV3 **buffer,  uint32_t options, int64_t seekPosUs)
+    wrapper->read = [](void *data, CMediaBuffer **buffer,  uint32_t options, int64_t seekPosUs)
             -> media_status_t {
-        MediaTrackHelperV3::ReadOptions opts(options, seekPosUs);
-        MediaBufferHelperV3 *buf = NULL;
-        media_status_t ret = ((MediaTrackHelperV3*)data)->read(&buf, &opts);
+        MediaTrackHelper::ReadOptions opts(options, seekPosUs);
+        MediaBufferHelper *buf = NULL;
+        media_status_t ret = ((MediaTrackHelper*)data)->read(&buf, &opts);
         if (ret == AMEDIA_OK && buf != nullptr) {
             *buffer = buf->mBuffer;
         }
         return ret;
     };
     wrapper->supportsNonBlockingRead = [](void *data) -> bool {
-                return ((MediaTrackHelperV3*)data)->supportsNonBlockingRead();
+                return ((MediaTrackHelper*)data)->supportsNonBlockingRead();
     };
     return wrapper;
 }
@@ -356,13 +219,13 @@
     enum GetTrackMetaDataFlags {
         kIncludeExtensiveMetaData = 1
     };
-    virtual status_t getTrackMetaData(
-            MetaDataBase& meta,
+    virtual media_status_t getTrackMetaData(
+            AMediaFormat *meta,
             size_t index, uint32_t flags = 0) = 0;
 
     // Return container specific meta-data. The default implementation
     // returns an empty metadata object.
-    virtual status_t getMetaData(MetaDataBase& meta) = 0;
+    virtual media_status_t getMetaData(AMediaFormat *meta) = 0;
 
     enum Flags {
         CAN_SEEK_BACKWARD  = 1,  // the "seek 10secs back button"
@@ -377,8 +240,8 @@
         return CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_SEEK | CAN_PAUSE;
     };
 
-    virtual status_t setMediaCas(const uint8_t* /*casToken*/, size_t /*size*/) {
-        return INVALID_OPERATION;
+    virtual media_status_t setMediaCas(const uint8_t* /*casToken*/, size_t /*size*/) {
+        return AMEDIA_ERROR_INVALID_OPERATION;
     }
 
     virtual const char * name() { return "<unspecified>"; }
@@ -405,13 +268,13 @@
     };
     wrapper->getTrackMetaData = [](
             void *data,
-            MetaDataBase& meta,
-            size_t index, uint32_t flags) -> status_t {
+            AMediaFormat *meta,
+            size_t index, uint32_t flags) -> media_status_t {
         return ((MediaExtractorPluginHelper*)data)->getTrackMetaData(meta, index, flags);
     };
     wrapper->getMetaData = [](
             void *data,
-            MetaDataBase& meta) -> status_t {
+            AMediaFormat *meta) -> media_status_t {
         return ((MediaExtractorPluginHelper*)data)->getMetaData(meta);
     };
     wrapper->flags = [](
@@ -419,7 +282,7 @@
         return ((MediaExtractorPluginHelper*)data)->flags();
     };
     wrapper->setMediaCas = [](
-            void *data, const uint8_t *casToken, size_t size) -> status_t {
+            void *data, const uint8_t *casToken, size_t size) -> media_status_t {
         return ((MediaExtractorPluginHelper*)data)->setMediaCas(casToken, size);
     };
     wrapper->name = [](
@@ -429,172 +292,6 @@
     return wrapper;
 }
 
-class MediaExtractorPluginHelperV2
-{
-public:
-    virtual ~MediaExtractorPluginHelperV2() {}
-    virtual size_t countTracks() = 0;
-    virtual MediaTrackHelperV2 *getTrack(size_t index) = 0;
-
-    enum GetTrackMetaDataFlags {
-        kIncludeExtensiveMetaData = 1
-    };
-    virtual media_status_t getTrackMetaData(
-            AMediaFormat *meta,
-            size_t index, uint32_t flags = 0) = 0;
-
-    // Return container specific meta-data. The default implementation
-    // returns an empty metadata object.
-    virtual media_status_t getMetaData(AMediaFormat *meta) = 0;
-
-    enum Flags {
-        CAN_SEEK_BACKWARD  = 1,  // the "seek 10secs back button"
-        CAN_SEEK_FORWARD   = 2,  // the "seek 10secs forward button"
-        CAN_PAUSE          = 4,
-        CAN_SEEK           = 8,  // the "seek bar"
-    };
-
-    // If subclasses do _not_ override this, the default is
-    // CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_SEEK | CAN_PAUSE
-    virtual uint32_t flags() const {
-        return CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_SEEK | CAN_PAUSE;
-    };
-
-    virtual media_status_t setMediaCas(const uint8_t* /*casToken*/, size_t /*size*/) {
-        return AMEDIA_ERROR_INVALID_OPERATION;
-    }
-
-    virtual const char * name() { return "<unspecified>"; }
-
-protected:
-    MediaExtractorPluginHelperV2() {}
-
-private:
-    MediaExtractorPluginHelperV2(const MediaExtractorPluginHelperV2 &);
-    MediaExtractorPluginHelperV2 &operator=(const MediaExtractorPluginHelperV2 &);
-};
-
-inline CMediaExtractorV2 *wrapV2(MediaExtractorPluginHelperV2 *extractor) {
-    CMediaExtractorV2 *wrapper = (CMediaExtractorV2*) malloc(sizeof(CMediaExtractorV2));
-    wrapper->data = extractor;
-    wrapper->free = [](void *data) -> void {
-        delete (MediaExtractorPluginHelperV2*)(data);
-    };
-    wrapper->countTracks = [](void *data) -> size_t {
-        return ((MediaExtractorPluginHelperV2*)data)->countTracks();
-    };
-    wrapper->getTrack = [](void *data, size_t index) -> CMediaTrackV2* {
-        return wrapV2(((MediaExtractorPluginHelperV2*)data)->getTrack(index));
-    };
-    wrapper->getTrackMetaData = [](
-            void *data,
-            AMediaFormat *meta,
-            size_t index, uint32_t flags) -> media_status_t {
-        return ((MediaExtractorPluginHelperV2*)data)->getTrackMetaData(meta, index, flags);
-    };
-    wrapper->getMetaData = [](
-            void *data,
-            AMediaFormat *meta) -> media_status_t {
-        return ((MediaExtractorPluginHelperV2*)data)->getMetaData(meta);
-    };
-    wrapper->flags = [](
-            void *data) -> uint32_t {
-        return ((MediaExtractorPluginHelperV2*)data)->flags();
-    };
-    wrapper->setMediaCas = [](
-            void *data, const uint8_t *casToken, size_t size) -> media_status_t {
-        return ((MediaExtractorPluginHelperV2*)data)->setMediaCas(casToken, size);
-    };
-    wrapper->name = [](
-            void *data) -> const char * {
-        return ((MediaExtractorPluginHelperV2*)data)->name();
-    };
-    return wrapper;
-}
-
-class MediaExtractorPluginHelperV3
-{
-public:
-    virtual ~MediaExtractorPluginHelperV3() {}
-    virtual size_t countTracks() = 0;
-    virtual MediaTrackHelperV3 *getTrack(size_t index) = 0;
-
-    enum GetTrackMetaDataFlags {
-        kIncludeExtensiveMetaData = 1
-    };
-    virtual media_status_t getTrackMetaData(
-            AMediaFormat *meta,
-            size_t index, uint32_t flags = 0) = 0;
-
-    // Return container specific meta-data. The default implementation
-    // returns an empty metadata object.
-    virtual media_status_t getMetaData(AMediaFormat *meta) = 0;
-
-    enum Flags {
-        CAN_SEEK_BACKWARD  = 1,  // the "seek 10secs back button"
-        CAN_SEEK_FORWARD   = 2,  // the "seek 10secs forward button"
-        CAN_PAUSE          = 4,
-        CAN_SEEK           = 8,  // the "seek bar"
-    };
-
-    // If subclasses do _not_ override this, the default is
-    // CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_SEEK | CAN_PAUSE
-    virtual uint32_t flags() const {
-        return CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_SEEK | CAN_PAUSE;
-    };
-
-    virtual media_status_t setMediaCas(const uint8_t* /*casToken*/, size_t /*size*/) {
-        return AMEDIA_ERROR_INVALID_OPERATION;
-    }
-
-    virtual const char * name() { return "<unspecified>"; }
-
-protected:
-    MediaExtractorPluginHelperV3() {}
-
-private:
-    MediaExtractorPluginHelperV3(const MediaExtractorPluginHelperV2 &);
-    MediaExtractorPluginHelperV3 &operator=(const MediaExtractorPluginHelperV2 &);
-};
-
-inline CMediaExtractorV3 *wrapV3(MediaExtractorPluginHelperV3 *extractor) {
-    CMediaExtractorV3 *wrapper = (CMediaExtractorV3*) malloc(sizeof(CMediaExtractorV3));
-    wrapper->data = extractor;
-    wrapper->free = [](void *data) -> void {
-        delete (MediaExtractorPluginHelperV3*)(data);
-    };
-    wrapper->countTracks = [](void *data) -> size_t {
-        return ((MediaExtractorPluginHelperV3*)data)->countTracks();
-    };
-    wrapper->getTrack = [](void *data, size_t index) -> CMediaTrackV3* {
-        return wrapV3(((MediaExtractorPluginHelperV3*)data)->getTrack(index));
-    };
-    wrapper->getTrackMetaData = [](
-            void *data,
-            AMediaFormat *meta,
-            size_t index, uint32_t flags) -> media_status_t {
-        return ((MediaExtractorPluginHelperV3*)data)->getTrackMetaData(meta, index, flags);
-    };
-    wrapper->getMetaData = [](
-            void *data,
-            AMediaFormat *meta) -> media_status_t {
-        return ((MediaExtractorPluginHelperV3*)data)->getMetaData(meta);
-    };
-    wrapper->flags = [](
-            void *data) -> uint32_t {
-        return ((MediaExtractorPluginHelperV3*)data)->flags();
-    };
-    wrapper->setMediaCas = [](
-            void *data, const uint8_t *casToken, size_t size) -> media_status_t {
-        return ((MediaExtractorPluginHelperV3*)data)->setMediaCas(casToken, size);
-    };
-    wrapper->name = [](
-            void *data) -> const char * {
-        return ((MediaExtractorPluginHelperV3*)data)->name();
-    };
-    return wrapper;
-}
-
 /* adds some convience methods */
 class DataSourceHelper {
 public:
diff --git a/include/media/MediaTrack.h b/include/media/MediaTrack.h
index baa3410..e828a7f 100644
--- a/include/media/MediaTrack.h
+++ b/include/media/MediaTrack.h
@@ -156,42 +156,6 @@
 
 private:
     CMediaTrack *wrapper;
-};
-
-class MediaTrackCUnwrapperV2 : public MediaTrack {
-public:
-    explicit MediaTrackCUnwrapperV2(CMediaTrackV2 *wrapper);
-
-    virtual status_t start();
-    virtual status_t stop();
-    virtual status_t getFormat(MetaDataBase& format);
-    virtual status_t read(MediaBufferBase **buffer, const ReadOptions *options = NULL);
-
-    virtual bool supportNonblockingRead();
-
-protected:
-    virtual ~MediaTrackCUnwrapperV2();
-
-private:
-    CMediaTrackV2 *wrapper;
-};
-
-class MediaTrackCUnwrapperV3 : public MediaTrack {
-public:
-    explicit MediaTrackCUnwrapperV3(CMediaTrackV3 *wrapper);
-
-    virtual status_t start();
-    virtual status_t stop();
-    virtual status_t getFormat(MetaDataBase& format);
-    virtual status_t read(MediaBufferBase **buffer, const ReadOptions *options = NULL);
-
-    virtual bool supportNonblockingRead();
-
-protected:
-    virtual ~MediaTrackCUnwrapperV3();
-
-private:
-    CMediaTrackV3 *wrapper;
     MediaBufferGroup *bufferGroup;
 };
 
diff --git a/media/extractors/aac/AACExtractor.cpp b/media/extractors/aac/AACExtractor.cpp
index 9384ebf..4e9ac6e 100644
--- a/media/extractors/aac/AACExtractor.cpp
+++ b/media/extractors/aac/AACExtractor.cpp
@@ -31,7 +31,7 @@
 
 namespace android {
 
-class AACSource : public MediaTrackHelperV3 {
+class AACSource : public MediaTrackHelper {
 public:
     AACSource(
             DataSourceHelper *source,
@@ -45,7 +45,7 @@
     virtual media_status_t getFormat(AMediaFormat*);
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);
+            MediaBufferHelper **buffer, const ReadOptions *options = NULL);
 
 protected:
     virtual ~AACSource();
@@ -195,7 +195,7 @@
     return mInitCheck == OK ? 1 : 0;
 }
 
-MediaTrackHelperV3 *AACExtractor::getTrack(size_t index) {
+MediaTrackHelper *AACExtractor::getTrack(size_t index) {
     if (mInitCheck != OK || index != 0) {
         return NULL;
     }
@@ -264,7 +264,7 @@
 }
 
 media_status_t AACSource::read(
-        MediaBufferHelperV3 **out, const ReadOptions *options) {
+        MediaBufferHelper **out, const ReadOptions *options) {
     *out = NULL;
 
     int64_t seekTimeUs;
@@ -287,7 +287,7 @@
         return AMEDIA_ERROR_END_OF_STREAM;
     }
 
-    MediaBufferHelperV3 *buffer;
+    MediaBufferHelper *buffer;
     status_t err = mBufferGroup->acquire_buffer(&buffer);
     if (err != OK) {
         return AMEDIA_ERROR_UNKNOWN;
@@ -316,14 +316,14 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 
-static CMediaExtractorV3* CreateExtractor(
+static CMediaExtractor* CreateExtractor(
         CDataSource *source,
         void *meta) {
     off64_t offset = *static_cast<off64_t*>(meta);
-    return wrapV3(new AACExtractor(new DataSourceHelper(source), offset));
+    return wrap(new AACExtractor(new DataSourceHelper(source), offset));
 }
 
-static CreatorFuncV3 Sniff(
+static CreatorFunc Sniff(
         CDataSource *source, float *confidence, void **meta,
         FreeMetaFunc *freeMeta) {
     off64_t pos = 0;
@@ -383,11 +383,11 @@
 __attribute__ ((visibility ("default")))
 ExtractorDef GETEXTRACTORDEF() {
     return {
-        EXTRACTORDEF_VERSION_CURRENT + 1,
+        EXTRACTORDEF_VERSION,
         UUID("4fd80eae-03d2-4d72-9eb9-48fa6bb54613"),
         1, // version
         "AAC Extractor",
-        { .v3 = Sniff }
+        { .v2 = Sniff }
     };
 }
 
diff --git a/media/extractors/aac/AACExtractor.h b/media/extractors/aac/AACExtractor.h
index be33bf5..643d3f4 100644
--- a/media/extractors/aac/AACExtractor.h
+++ b/media/extractors/aac/AACExtractor.h
@@ -29,12 +29,12 @@
 struct AMessage;
 class String8;
 
-class AACExtractor : public MediaExtractorPluginHelperV3 {
+class AACExtractor : public MediaExtractorPluginHelper {
 public:
     AACExtractor(DataSourceHelper *source, off64_t offset);
 
     virtual size_t countTracks();
-    virtual MediaTrackHelperV3 *getTrack(size_t index);
+    virtual MediaTrackHelper *getTrack(size_t index);
     virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
 
     virtual media_status_t getMetaData(AMediaFormat *meta);
diff --git a/media/extractors/amr/AMRExtractor.cpp b/media/extractors/amr/AMRExtractor.cpp
index 7fd2a41..00d2a92 100644
--- a/media/extractors/amr/AMRExtractor.cpp
+++ b/media/extractors/amr/AMRExtractor.cpp
@@ -29,7 +29,7 @@
 
 namespace android {
 
-class AMRSource : public MediaTrackHelperV3 {
+class AMRSource : public MediaTrackHelper {
 public:
     AMRSource(
             DataSourceHelper *source,
@@ -44,7 +44,7 @@
     virtual media_status_t getFormat(AMediaFormat *);
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);
+            MediaBufferHelper **buffer, const ReadOptions *options = NULL);
 
 protected:
     virtual ~AMRSource();
@@ -209,7 +209,7 @@
     return mInitCheck == OK ? 1 : 0;
 }
 
-MediaTrackHelperV3 *AMRExtractor::getTrack(size_t index) {
+MediaTrackHelper *AMRExtractor::getTrack(size_t index) {
     if (mInitCheck != OK || index != 0) {
         return NULL;
     }
@@ -273,7 +273,7 @@
 }
 
 media_status_t AMRSource::read(
-        MediaBufferHelperV3 **out, const ReadOptions *options) {
+        MediaBufferHelper **out, const ReadOptions *options) {
     *out = NULL;
 
     int64_t seekTimeUs;
@@ -322,7 +322,7 @@
         return AMEDIA_ERROR_MALFORMED;
     }
 
-    MediaBufferHelperV3 *buffer;
+    MediaBufferHelper *buffer;
     status_t err = mBufferGroup->acquire_buffer(&buffer);
     if (err != OK) {
         return AMEDIA_ERROR_UNKNOWN;
@@ -363,22 +363,22 @@
 __attribute__ ((visibility ("default")))
 ExtractorDef GETEXTRACTORDEF() {
     return {
-        EXTRACTORDEF_VERSION_CURRENT + 1,
+        EXTRACTORDEF_VERSION,
         UUID("c86639c9-2f31-40ac-a715-fa01b4493aaf"),
         1,
         "AMR Extractor",
         {
-           .v3 = [](
+           .v2 = [](
                     CDataSource *source,
                     float *confidence,
                     void **,
-                    FreeMetaFunc *) -> CreatorFuncV3 {
+                    FreeMetaFunc *) -> CreatorFunc {
                 DataSourceHelper helper(source);
                 if (SniffAMR(&helper, nullptr, confidence)) {
                     return [](
                             CDataSource *source,
-                            void *) -> CMediaExtractorV3* {
-                        return wrapV3(new AMRExtractor(new DataSourceHelper(source)));};
+                            void *) -> CMediaExtractor* {
+                        return wrap(new AMRExtractor(new DataSourceHelper(source)));};
                 }
                 return NULL;
             }
diff --git a/media/extractors/amr/AMRExtractor.h b/media/extractors/amr/AMRExtractor.h
index b50ce81..b76ee9c 100644
--- a/media/extractors/amr/AMRExtractor.h
+++ b/media/extractors/amr/AMRExtractor.h
@@ -29,12 +29,12 @@
 class String8;
 #define OFFSET_TABLE_LEN    300
 
-class AMRExtractor : public MediaExtractorPluginHelperV3 {
+class AMRExtractor : public MediaExtractorPluginHelper {
 public:
     explicit AMRExtractor(DataSourceHelper *source);
 
     virtual size_t countTracks();
-    virtual MediaTrackHelperV3 *getTrack(size_t index);
+    virtual MediaTrackHelper *getTrack(size_t index);
     virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
 
     virtual media_status_t getMetaData(AMediaFormat *meta);
diff --git a/media/extractors/flac/FLACExtractor.cpp b/media/extractors/flac/FLACExtractor.cpp
index 4e04605..b5eaf9b 100644
--- a/media/extractors/flac/FLACExtractor.cpp
+++ b/media/extractors/flac/FLACExtractor.cpp
@@ -52,7 +52,7 @@
 
 class FLACParser;
 
-class FLACSource : public MediaTrackHelperV3 {
+class FLACSource : public MediaTrackHelper {
 
 public:
     FLACSource(
@@ -65,7 +65,7 @@
     virtual media_status_t getFormat(AMediaFormat *meta);
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);
+            MediaBufferHelper **buffer, const ReadOptions *options = NULL);
 
 protected:
     virtual ~FLACSource();
@@ -124,12 +124,12 @@
     }
 
     // media buffers
-    void allocateBuffers(MediaBufferGroupHelperV3 *group);
+    void allocateBuffers(MediaBufferGroupHelper *group);
     void releaseBuffers();
-    MediaBufferHelperV3 *readBuffer() {
+    MediaBufferHelper *readBuffer() {
         return readBuffer(false, 0LL);
     }
-    MediaBufferHelperV3 *readBuffer(FLAC__uint64 sample) {
+    MediaBufferHelper *readBuffer(FLAC__uint64 sample) {
         return readBuffer(true, sample);
     }
 
@@ -142,7 +142,7 @@
 
     // media buffers
     size_t mMaxBufferSize;
-    MediaBufferGroupHelperV3 *mGroup;
+    MediaBufferGroupHelper *mGroup;
     void (*mCopy)(int16_t *dst, const int * src[kMaxChannels], unsigned nSamples, unsigned nChannels);
 
     // handle to underlying libFLAC parser
@@ -166,7 +166,7 @@
     FLAC__StreamDecoderErrorStatus mErrorStatus;
 
     status_t init();
-    MediaBufferHelperV3 *readBuffer(bool doSeek, FLAC__uint64 sample);
+    MediaBufferHelper *readBuffer(bool doSeek, FLAC__uint64 sample);
 
     // no copy constructor or assignment
     FLACParser(const FLACParser &);
@@ -576,7 +576,7 @@
     return OK;
 }
 
-void FLACParser::allocateBuffers(MediaBufferGroupHelperV3 *group)
+void FLACParser::allocateBuffers(MediaBufferGroupHelper *group)
 {
     CHECK(mGroup == NULL);
     mGroup = group;
@@ -588,7 +588,7 @@
 {
 }
 
-MediaBufferHelperV3 *FLACParser::readBuffer(bool doSeek, FLAC__uint64 sample)
+MediaBufferHelper *FLACParser::readBuffer(bool doSeek, FLAC__uint64 sample)
 {
     mWriteRequested = true;
     mWriteCompleted = false;
@@ -625,7 +625,7 @@
     }
     // acquire a media buffer
     CHECK(mGroup != NULL);
-    MediaBufferHelperV3 *buffer;
+    MediaBufferHelper *buffer;
     status_t err = mGroup->acquire_buffer(&buffer);
     if (err != OK) {
         return NULL;
@@ -716,9 +716,9 @@
 }
 
 media_status_t FLACSource::read(
-        MediaBufferHelperV3 **outBuffer, const ReadOptions *options)
+        MediaBufferHelper **outBuffer, const ReadOptions *options)
 {
-    MediaBufferHelperV3 *buffer;
+    MediaBufferHelper *buffer;
     // process an optional seek request
     int64_t seekTimeUs;
     ReadOptions::SeekMode mode;
@@ -772,7 +772,7 @@
     return mInitCheck == OK ? 1 : 0;
 }
 
-MediaTrackHelperV3 *FLACExtractor::getTrack(size_t index)
+MediaTrackHelper *FLACExtractor::getTrack(size_t index)
 {
     if (mInitCheck != OK || index > 0) {
         return NULL;
@@ -828,22 +828,22 @@
 __attribute__ ((visibility ("default")))
 ExtractorDef GETEXTRACTORDEF() {
     return {
-            EXTRACTORDEF_VERSION_CURRENT + 1,
+            EXTRACTORDEF_VERSION,
             UUID("1364b048-cc45-4fda-9934-327d0ebf9829"),
             1,
             "FLAC Extractor",
             {
-                .v3 = [](
+                .v2 = [](
                         CDataSource *source,
                         float *confidence,
                         void **,
-                        FreeMetaFunc *) -> CreatorFuncV3 {
+                        FreeMetaFunc *) -> CreatorFunc {
                     DataSourceHelper helper(source);
                     if (SniffFLAC(&helper, confidence)) {
                         return [](
                                 CDataSource *source,
-                                void *) -> CMediaExtractorV3* {
-                            return wrapV3(new FLACExtractor(new DataSourceHelper(source)));};
+                                void *) -> CMediaExtractor* {
+                            return wrap(new FLACExtractor(new DataSourceHelper(source)));};
                     }
                     return NULL;
                 }
diff --git a/media/extractors/flac/FLACExtractor.h b/media/extractors/flac/FLACExtractor.h
index 9604e4a..5a73d20 100644
--- a/media/extractors/flac/FLACExtractor.h
+++ b/media/extractors/flac/FLACExtractor.h
@@ -27,13 +27,13 @@
 
 class FLACParser;
 
-class FLACExtractor : public MediaExtractorPluginHelperV3 {
+class FLACExtractor : public MediaExtractorPluginHelper {
 
 public:
     explicit FLACExtractor(DataSourceHelper *source);
 
     virtual size_t countTracks();
-    virtual MediaTrackHelperV3 *getTrack(size_t index);
+    virtual MediaTrackHelper *getTrack(size_t index);
     virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
 
     virtual media_status_t getMetaData(AMediaFormat *meta);
diff --git a/media/extractors/midi/MidiExtractor.cpp b/media/extractors/midi/MidiExtractor.cpp
index 1ddcfbb..0c74376 100644
--- a/media/extractors/midi/MidiExtractor.cpp
+++ b/media/extractors/midi/MidiExtractor.cpp
@@ -32,7 +32,7 @@
 // how many Sonivox output buffers to aggregate into one MediaBuffer
 static const int NUM_COMBINE_BUFFERS = 4;
 
-class MidiSource : public MediaTrackHelperV3 {
+class MidiSource : public MediaTrackHelper {
 
 public:
     MidiSource(
@@ -44,7 +44,7 @@
     virtual media_status_t getFormat(AMediaFormat *);
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);
+            MediaBufferHelper **buffer, const ReadOptions *options = NULL);
 
 protected:
     virtual ~MidiSource();
@@ -113,10 +113,10 @@
 }
 
 media_status_t MidiSource::read(
-        MediaBufferHelperV3 **outBuffer, const ReadOptions *options)
+        MediaBufferHelper **outBuffer, const ReadOptions *options)
 {
     ALOGV("MidiSource::read");
-    MediaBufferHelperV3 *buffer;
+    MediaBufferHelper *buffer;
     // process an optional seek request
     int64_t seekTimeUs;
     ReadOptions::SeekMode mode;
@@ -199,7 +199,7 @@
     return mIsInitialized ? OK : UNKNOWN_ERROR;
 }
 
-status_t MidiEngine::allocateBuffers(MediaBufferGroupHelperV3 *group) {
+status_t MidiEngine::allocateBuffers(MediaBufferGroupHelper *group) {
     // select reverb preset and enable
     EAS_SetParameter(mEasData, EAS_MODULE_REVERB, EAS_PARAM_REVERB_PRESET, EAS_PARAM_REVERB_CHAMBER);
     EAS_SetParameter(mEasData, EAS_MODULE_REVERB, EAS_PARAM_REVERB_BYPASS, EAS_FALSE);
@@ -222,13 +222,13 @@
     return result == EAS_SUCCESS ? OK : UNKNOWN_ERROR;
 }
 
-MediaBufferHelperV3* MidiEngine::readBuffer() {
+MediaBufferHelper* MidiEngine::readBuffer() {
     EAS_STATE state;
     EAS_State(mEasData, mEasHandle, &state);
     if ((state == EAS_STATE_STOPPED) || (state == EAS_STATE_ERROR)) {
         return NULL;
     }
-    MediaBufferHelperV3 *buffer;
+    MediaBufferHelper *buffer;
     status_t err = mGroup->acquire_buffer(&buffer);
     if (err != OK) {
         ALOGE("readBuffer: no buffer");
@@ -287,7 +287,7 @@
     return mInitCheck == OK ? 1 : 0;
 }
 
-MediaTrackHelperV3 *MidiExtractor::getTrack(size_t index)
+MediaTrackHelper *MidiExtractor::getTrack(size_t index)
 {
     if (mInitCheck != OK || index > 0) {
         return NULL;
@@ -332,21 +332,21 @@
 __attribute__ ((visibility ("default")))
 ExtractorDef GETEXTRACTORDEF() {
     return {
-        EXTRACTORDEF_VERSION_CURRENT + 1,
+        EXTRACTORDEF_VERSION,
         UUID("ef6cca0a-f8a2-43e6-ba5f-dfcd7c9a7ef2"),
         1,
         "MIDI Extractor",
         {
-            .v3 = [](
+            .v2 = [](
                 CDataSource *source,
                 float *confidence,
                 void **,
-                FreeMetaFunc *) -> CreatorFuncV3 {
+                FreeMetaFunc *) -> CreatorFunc {
                 if (SniffMidi(source, confidence)) {
                     return [](
                             CDataSource *source,
-                            void *) -> CMediaExtractorV3* {
-                        return wrapV3(new MidiExtractor(source));};
+                            void *) -> CMediaExtractor* {
+                        return wrap(new MidiExtractor(source));};
                 }
                 return NULL;
             }
diff --git a/media/extractors/midi/MidiExtractor.h b/media/extractors/midi/MidiExtractor.h
index ad345b8..2e78086 100644
--- a/media/extractors/midi/MidiExtractor.h
+++ b/media/extractors/midi/MidiExtractor.h
@@ -38,26 +38,26 @@
 
     status_t initCheck();
 
-    status_t allocateBuffers(MediaBufferGroupHelperV3 *group);
+    status_t allocateBuffers(MediaBufferGroupHelper *group);
     status_t releaseBuffers();
     status_t seekTo(int64_t positionUs);
-    MediaBufferHelperV3* readBuffer();
+    MediaBufferHelper* readBuffer();
 private:
     MidiIoWrapper *mIoWrapper;
-    MediaBufferGroupHelperV3 *mGroup;
+    MediaBufferGroupHelper *mGroup;
     EAS_DATA_HANDLE mEasData;
     EAS_HANDLE mEasHandle;
     const S_EAS_LIB_CONFIG* mEasConfig;
     bool mIsInitialized;
 };
 
-class MidiExtractor : public MediaExtractorPluginHelperV3 {
+class MidiExtractor : public MediaExtractorPluginHelper {
 
 public:
     explicit MidiExtractor(CDataSource *source);
 
     virtual size_t countTracks();
-    virtual MediaTrackHelperV3 *getTrack(size_t index);
+    virtual MediaTrackHelper *getTrack(size_t index);
     virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
 
     virtual media_status_t getMetaData(AMediaFormat *meta);
diff --git a/media/extractors/mkv/MatroskaExtractor.cpp b/media/extractors/mkv/MatroskaExtractor.cpp
index 4a30740..42a9c42 100644
--- a/media/extractors/mkv/MatroskaExtractor.cpp
+++ b/media/extractors/mkv/MatroskaExtractor.cpp
@@ -125,7 +125,7 @@
     BlockIterator &operator=(const BlockIterator &);
 };
 
-struct MatroskaSource : public MediaTrackHelperV3 {
+struct MatroskaSource : public MediaTrackHelper {
     MatroskaSource(MatroskaExtractor *extractor, size_t index);
 
     virtual media_status_t start();
@@ -134,7 +134,7 @@
     virtual media_status_t getFormat(AMediaFormat *);
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options);
+            MediaBufferHelper **buffer, const ReadOptions *options);
 
 protected:
     virtual ~MatroskaSource();
@@ -154,11 +154,11 @@
     BlockIterator mBlockIter;
     ssize_t mNALSizeLen;  // for type AVC or HEVC
 
-    List<MediaBufferHelperV3 *> mPendingFrames;
+    List<MediaBufferHelper *> mPendingFrames;
 
     status_t advance();
 
-    status_t setWebmBlockCryptoInfo(MediaBufferHelperV3 *mbuf);
+    status_t setWebmBlockCryptoInfo(MediaBufferHelper *mbuf);
     media_status_t readBlock();
     void clearPendingFrames();
 
@@ -569,7 +569,7 @@
 
 void MatroskaSource::clearPendingFrames() {
     while (!mPendingFrames.empty()) {
-        MediaBufferHelperV3 *frame = *mPendingFrames.begin();
+        MediaBufferHelper *frame = *mPendingFrames.begin();
         mPendingFrames.erase(mPendingFrames.begin());
 
         frame->release();
@@ -577,7 +577,7 @@
     }
 }
 
-status_t MatroskaSource::setWebmBlockCryptoInfo(MediaBufferHelperV3 *mbuf) {
+status_t MatroskaSource::setWebmBlockCryptoInfo(MediaBufferHelper *mbuf) {
     if (mbuf->range_length() < 1 || mbuf->range_length() - 1 > INT32_MAX) {
         // 1-byte signal
         return ERROR_MALFORMED;
@@ -727,7 +727,7 @@
         }
 
         len += trackInfo->mHeaderLen;
-        MediaBufferHelperV3 *mbuf;
+        MediaBufferHelper *mbuf;
         mBufferGroup->acquire_buffer(&mbuf, false /* nonblocking */, len /* requested size */);
         mbuf->set_range(0, len);
         uint8_t *data = static_cast<uint8_t *>(mbuf->data());
@@ -763,7 +763,7 @@
 }
 
 media_status_t MatroskaSource::read(
-        MediaBufferHelperV3 **out, const ReadOptions *options) {
+        MediaBufferHelper **out, const ReadOptions *options) {
     *out = NULL;
 
     int64_t targetSampleTimeUs = -1ll;
@@ -799,7 +799,7 @@
         }
     }
 
-    MediaBufferHelperV3 *frame = *mPendingFrames.begin();
+    MediaBufferHelper *frame = *mPendingFrames.begin();
     mPendingFrames.erase(mPendingFrames.begin());
 
     if ((mType != AVC && mType != HEVC) || mNALSizeLen == 0) {
@@ -828,7 +828,7 @@
     size_t srcSize = frame->range_length();
 
     size_t dstSize = 0;
-    MediaBufferHelperV3 *buffer = NULL;
+    MediaBufferHelper *buffer = NULL;
     uint8_t *dstPtr = NULL;
 
     for (int32_t pass = 0; pass < 2; ++pass) {
@@ -1005,7 +1005,7 @@
     return mTracks.size();
 }
 
-MediaTrackHelperV3 *MatroskaExtractor::getTrack(size_t index) {
+MediaTrackHelper *MatroskaExtractor::getTrack(size_t index) {
     if (index >= mTracks.size()) {
         return NULL;
     }
@@ -1673,22 +1673,22 @@
 __attribute__ ((visibility ("default")))
 ExtractorDef GETEXTRACTORDEF() {
     return {
-        EXTRACTORDEF_VERSION_CURRENT + 1,
+        EXTRACTORDEF_VERSION,
         UUID("abbedd92-38c4-4904-a4c1-b3f45f899980"),
         1,
         "Matroska Extractor",
         {
-            .v3 = [](
+            .v2 = [](
                     CDataSource *source,
                     float *confidence,
                     void **,
-                    FreeMetaFunc *) -> CreatorFuncV3 {
+                    FreeMetaFunc *) -> CreatorFunc {
                 DataSourceHelper helper(source);
                 if (SniffMatroska(&helper, confidence)) {
                     return [](
                             CDataSource *source,
-                            void *) -> CMediaExtractorV3* {
-                        return wrapV3(new MatroskaExtractor(new DataSourceHelper(source)));};
+                            void *) -> CMediaExtractor* {
+                        return wrap(new MatroskaExtractor(new DataSourceHelper(source)));};
                 }
                 return NULL;
             }
diff --git a/media/extractors/mkv/MatroskaExtractor.h b/media/extractors/mkv/MatroskaExtractor.h
index a09256a..3871bdf 100644
--- a/media/extractors/mkv/MatroskaExtractor.h
+++ b/media/extractors/mkv/MatroskaExtractor.h
@@ -35,12 +35,12 @@
 struct DataSourceBaseReader;
 struct MatroskaSource;
 
-struct MatroskaExtractor : public MediaExtractorPluginHelperV3 {
+struct MatroskaExtractor : public MediaExtractorPluginHelper {
     explicit MatroskaExtractor(DataSourceHelper *source);
 
     virtual size_t countTracks();
 
-    virtual MediaTrackHelperV3 *getTrack(size_t index);
+    virtual MediaTrackHelper *getTrack(size_t index);
 
     virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
 
diff --git a/media/extractors/mp3/MP3Extractor.cpp b/media/extractors/mp3/MP3Extractor.cpp
index 7abec54..20bcda8 100644
--- a/media/extractors/mp3/MP3Extractor.cpp
+++ b/media/extractors/mp3/MP3Extractor.cpp
@@ -207,7 +207,7 @@
     return valid;
 }
 
-class MP3Source : public MediaTrackHelperV3 {
+class MP3Source : public MediaTrackHelper {
 public:
     MP3Source(
             AMediaFormat *meta, DataSourceHelper *source,
@@ -220,7 +220,7 @@
     virtual media_status_t getFormat(AMediaFormat *meta);
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);
+            MediaBufferHelper **buffer, const ReadOptions *options = NULL);
 
 protected:
     virtual ~MP3Source();
@@ -413,7 +413,7 @@
     return mInitCheck != OK ? 0 : 1;
 }
 
-MediaTrackHelperV3 *MP3Extractor::getTrack(size_t index) {
+MediaTrackHelper *MP3Extractor::getTrack(size_t index) {
     if (mInitCheck != OK || index != 0) {
         return NULL;
     }
@@ -493,7 +493,7 @@
 }
 
 media_status_t MP3Source::read(
-        MediaBufferHelperV3 **out, const ReadOptions *options) {
+        MediaBufferHelper **out, const ReadOptions *options) {
     *out = NULL;
 
     int64_t seekTimeUs;
@@ -523,7 +523,7 @@
         mSamplesRead = 0;
     }
 
-    MediaBufferHelperV3 *buffer;
+    MediaBufferHelper *buffer;
     status_t err = mBufferGroup->acquire_buffer(&buffer);
     if (err != OK) {
         return AMEDIA_ERROR_UNKNOWN;
@@ -668,14 +668,14 @@
     return AMEDIA_OK;
 }
 
-static CMediaExtractorV3* CreateExtractor(
+static CMediaExtractor* CreateExtractor(
         CDataSource *source,
         void *meta) {
     Mp3Meta *metaData = static_cast<Mp3Meta *>(meta);
-    return wrapV3(new MP3Extractor(new DataSourceHelper(source), metaData));
+    return wrap(new MP3Extractor(new DataSourceHelper(source), metaData));
 }
 
-static CreatorFuncV3 Sniff(
+static CreatorFunc Sniff(
         CDataSource *source, float *confidence, void **meta,
         FreeMetaFunc *freeMeta) {
     off64_t pos = 0;
@@ -712,11 +712,11 @@
 __attribute__ ((visibility ("default")))
 ExtractorDef GETEXTRACTORDEF() {
     return {
-        EXTRACTORDEF_VERSION_CURRENT + 1,
+        EXTRACTORDEF_VERSION,
         UUID("812a3f6c-c8cf-46de-b529-3774b14103d4"),
         1, // version
         "MP3 Extractor",
-        { .v3 = Sniff }
+        { .v2 = Sniff }
     };
 }
 
diff --git a/media/extractors/mp3/MP3Extractor.h b/media/extractors/mp3/MP3Extractor.h
index fe72cff..1e38ab7 100644
--- a/media/extractors/mp3/MP3Extractor.h
+++ b/media/extractors/mp3/MP3Extractor.h
@@ -32,13 +32,13 @@
 class String8;
 struct Mp3Meta;
 
-class MP3Extractor : public MediaExtractorPluginHelperV3 {
+class MP3Extractor : public MediaExtractorPluginHelper {
 public:
     MP3Extractor(DataSourceHelper *source, Mp3Meta *meta);
     ~MP3Extractor();
 
     virtual size_t countTracks();
-    virtual MediaTrackHelperV3 *getTrack(size_t index);
+    virtual MediaTrackHelper *getTrack(size_t index);
     virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
 
     virtual media_status_t getMetaData(AMediaFormat *meta);
diff --git a/media/extractors/mp4/MPEG4Extractor.cpp b/media/extractors/mp4/MPEG4Extractor.cpp
index 390ba43..2909a50 100644
--- a/media/extractors/mp4/MPEG4Extractor.cpp
+++ b/media/extractors/mp4/MPEG4Extractor.cpp
@@ -69,7 +69,7 @@
     kMaxAtomSize = 64 * 1024 * 1024,
 };
 
-class MPEG4Source : public MediaTrackHelperV3 {
+class MPEG4Source : public MediaTrackHelper {
 static const size_t  kMaxPcmFrameSize = 8192;
 public:
     // Caller retains ownership of both "dataSource" and "sampleTable".
@@ -88,10 +88,10 @@
 
     virtual media_status_t getFormat(AMediaFormat *);
 
-    virtual media_status_t read(MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);
+    virtual media_status_t read(MediaBufferHelper **buffer, const ReadOptions *options = NULL);
     virtual bool supportNonblockingRead() { return true; }
     virtual media_status_t fragmentedRead(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);
+            MediaBufferHelper **buffer, const ReadOptions *options = NULL);
 
     virtual ~MPEG4Source();
 
@@ -136,7 +136,7 @@
 
     bool mStarted;
 
-    MediaBufferHelperV3 *mBuffer;
+    MediaBufferHelper *mBuffer;
 
     uint8_t *mSrcBuffer;
 
@@ -3855,7 +3855,7 @@
     }
 }
 
-MediaTrackHelperV3 *MPEG4Extractor::getTrack(size_t index) {
+MediaTrackHelper *MPEG4Extractor::getTrack(size_t index) {
     status_t err;
     if ((err = readMetaData()) != OK) {
         return NULL;
@@ -5206,7 +5206,7 @@
 }
 
 media_status_t MPEG4Source::read(
-        MediaBufferHelperV3 **out, const ReadOptions *options) {
+        MediaBufferHelper **out, const ReadOptions *options) {
     Mutex::Autolock autoLock(mLock);
 
     CHECK(mStarted);
@@ -5609,7 +5609,7 @@
 }
 
 media_status_t MPEG4Source::fragmentedRead(
-        MediaBufferHelperV3 **out, const ReadOptions *options) {
+        MediaBufferHelper **out, const ReadOptions *options) {
 
     ALOGV("MPEG4Source::fragmentedRead");
 
@@ -6102,11 +6102,11 @@
     return true;
 }
 
-static CMediaExtractorV3* CreateExtractor(CDataSource *source, void *) {
-    return wrapV3(new MPEG4Extractor(new DataSourceHelper(source)));
+static CMediaExtractor* CreateExtractor(CDataSource *source, void *) {
+    return wrap(new MPEG4Extractor(new DataSourceHelper(source)));
 }
 
-static CreatorFuncV3 Sniff(
+static CreatorFunc Sniff(
         CDataSource *source, float *confidence, void **,
         FreeMetaFunc *) {
     DataSourceHelper helper(source);
@@ -6127,11 +6127,11 @@
 __attribute__ ((visibility ("default")))
 ExtractorDef GETEXTRACTORDEF() {
     return {
-        EXTRACTORDEF_VERSION_CURRENT + 1,
+        EXTRACTORDEF_VERSION,
         UUID("27575c67-4417-4c54-8d3d-8e626985a164"),
         2, // version
         "MP4 Extractor",
-        { .v3 = Sniff }
+        { .v2 = Sniff }
     };
 }
 
diff --git a/media/extractors/mp4/MPEG4Extractor.h b/media/extractors/mp4/MPEG4Extractor.h
index a9a4635..79d5ff6dd 100644
--- a/media/extractors/mp4/MPEG4Extractor.h
+++ b/media/extractors/mp4/MPEG4Extractor.h
@@ -53,12 +53,12 @@
     uint32_t default_sample_flags;
 };
 
-class MPEG4Extractor : public MediaExtractorPluginHelperV3 {
+class MPEG4Extractor : public MediaExtractorPluginHelper {
 public:
     explicit MPEG4Extractor(DataSourceHelper *source, const char *mime = NULL);
 
     virtual size_t countTracks();
-    virtual MediaTrackHelperV3 *getTrack(size_t index);
+    virtual MediaTrackHelper *getTrack(size_t index);
     virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
 
     virtual media_status_t getMetaData(AMediaFormat *meta);
diff --git a/media/extractors/mpeg2/ExtractorBundle.cpp b/media/extractors/mpeg2/ExtractorBundle.cpp
index c10a797..2f4196c 100644
--- a/media/extractors/mpeg2/ExtractorBundle.cpp
+++ b/media/extractors/mpeg2/ExtractorBundle.cpp
@@ -31,27 +31,27 @@
 __attribute__ ((visibility ("default")))
 ExtractorDef GETEXTRACTORDEF() {
     return {
-        EXTRACTORDEF_VERSION_CURRENT + 1,
+        EXTRACTORDEF_VERSION,
         UUID("3d1dcfeb-e40a-436d-a574-c2438a555e5f"),
         1,
         "MPEG2-PS/TS Extractor",
         {
-            .v3 = [](
+            .v2 = [](
                     CDataSource *source,
                     float *confidence,
                     void **,
-                    FreeMetaFunc *) -> CreatorFuncV3 {
+                    FreeMetaFunc *) -> CreatorFunc {
                 DataSourceHelper helper(source);
                 if (SniffMPEG2TS(&helper, confidence)) {
                     return [](
                             CDataSource *source,
-                            void *) -> CMediaExtractorV3* {
-                        return wrapV3(new MPEG2TSExtractor(new DataSourceHelper(source)));};
+                            void *) -> CMediaExtractor* {
+                        return wrap(new MPEG2TSExtractor(new DataSourceHelper(source)));};
                 } else if (SniffMPEG2PS(&helper, confidence)) {
                             return [](
                                     CDataSource *source,
-                                    void *) -> CMediaExtractorV3* {
-                                return wrapV3(new MPEG2PSExtractor(new DataSourceHelper(source)));};
+                                    void *) -> CMediaExtractor* {
+                                return wrap(new MPEG2PSExtractor(new DataSourceHelper(source)));};
                 }
                 return NULL;
             }
diff --git a/media/extractors/mpeg2/MPEG2PSExtractor.cpp b/media/extractors/mpeg2/MPEG2PSExtractor.cpp
index d058637..554d252 100644
--- a/media/extractors/mpeg2/MPEG2PSExtractor.cpp
+++ b/media/extractors/mpeg2/MPEG2PSExtractor.cpp
@@ -40,7 +40,7 @@
 
 namespace android {
 
-struct MPEG2PSExtractor::Track : public MediaTrackHelperV3 {
+struct MPEG2PSExtractor::Track : public MediaTrackHelper {
     Track(MPEG2PSExtractor *extractor,
           unsigned stream_id, unsigned stream_type);
 
@@ -49,7 +49,7 @@
     virtual media_status_t getFormat(AMediaFormat *);
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options);
+            MediaBufferHelper **buffer, const ReadOptions *options);
 
 protected:
     virtual ~Track();
@@ -72,7 +72,7 @@
     DISALLOW_EVIL_CONSTRUCTORS(Track);
 };
 
-struct MPEG2PSExtractor::WrappedTrack : public MediaTrackHelperV3 {
+struct MPEG2PSExtractor::WrappedTrack : public MediaTrackHelper {
     WrappedTrack(MPEG2PSExtractor *extractor, Track *track);
 
     virtual media_status_t start();
@@ -80,7 +80,7 @@
     virtual media_status_t getFormat(AMediaFormat *);
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options);
+            MediaBufferHelper **buffer, const ReadOptions *options);
 
 protected:
     virtual ~WrappedTrack();
@@ -128,7 +128,7 @@
     return mTracks.size();
 }
 
-MediaTrackHelperV3 *MPEG2PSExtractor::getTrack(size_t index) {
+MediaTrackHelper *MPEG2PSExtractor::getTrack(size_t index) {
     if (index >= mTracks.size()) {
         return NULL;
     }
@@ -677,7 +677,7 @@
 }
 
 media_status_t MPEG2PSExtractor::Track::read(
-        MediaBufferHelperV3 **buffer, const ReadOptions *options) {
+        MediaBufferHelper **buffer, const ReadOptions *options) {
     if (mSource == NULL) {
         return AMEDIA_ERROR_UNKNOWN;
     }
@@ -698,7 +698,7 @@
     MediaBufferBase *mbuf;
     mSource->read(&mbuf, (MediaTrack::ReadOptions*) options);
     size_t length = mbuf->range_length();
-    MediaBufferHelperV3 *outbuf;
+    MediaBufferHelper *outbuf;
     mBufferGroup->acquire_buffer(&outbuf, false, length);
     memcpy(outbuf->data(), mbuf->data(), length);
     outbuf->set_range(0, length);
@@ -802,7 +802,7 @@
 }
 
 media_status_t MPEG2PSExtractor::WrappedTrack::read(
-        MediaBufferHelperV3 **buffer, const ReadOptions *options) {
+        MediaBufferHelper **buffer, const ReadOptions *options) {
     return mTrack->read(buffer, options);
 }
 
diff --git a/media/extractors/mpeg2/MPEG2PSExtractor.h b/media/extractors/mpeg2/MPEG2PSExtractor.h
index d251688..e5d591f 100644
--- a/media/extractors/mpeg2/MPEG2PSExtractor.h
+++ b/media/extractors/mpeg2/MPEG2PSExtractor.h
@@ -32,11 +32,11 @@
 struct Track;
 class String8;
 
-struct MPEG2PSExtractor : public MediaExtractorPluginHelperV3 {
+struct MPEG2PSExtractor : public MediaExtractorPluginHelper {
     explicit MPEG2PSExtractor(DataSourceHelper *source);
 
     virtual size_t countTracks();
-    virtual MediaTrackHelperV3 *getTrack(size_t index);
+    virtual MediaTrackHelper *getTrack(size_t index);
     virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
 
     virtual media_status_t getMetaData(AMediaFormat *meta);
diff --git a/media/extractors/mpeg2/MPEG2TSExtractor.cpp b/media/extractors/mpeg2/MPEG2TSExtractor.cpp
index 11c3787..3bb2af7 100644
--- a/media/extractors/mpeg2/MPEG2TSExtractor.cpp
+++ b/media/extractors/mpeg2/MPEG2TSExtractor.cpp
@@ -51,7 +51,7 @@
 static const int kMaxDurationReadSize = 250000LL;
 static const int kMaxDurationRetry = 6;
 
-struct MPEG2TSSource : public MediaTrackHelperV3 {
+struct MPEG2TSSource : public MediaTrackHelper {
     MPEG2TSSource(
             MPEG2TSExtractor *extractor,
             const sp<AnotherPacketSource> &impl,
@@ -63,7 +63,7 @@
     virtual media_status_t getFormat(AMediaFormat *);
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);
+            MediaBufferHelper **buffer, const ReadOptions *options = NULL);
 
 private:
     MPEG2TSExtractor *mExtractor;
@@ -165,7 +165,7 @@
 }
 
 media_status_t MPEG2TSSource::read(
-        MediaBufferHelperV3 **out, const ReadOptions *options) {
+        MediaBufferHelper **out, const ReadOptions *options) {
     *out = NULL;
 
     int64_t seekTimeUs;
@@ -187,7 +187,7 @@
     MediaBufferBase *mbuf;
     mImpl->read(&mbuf, (MediaTrack::ReadOptions*) options);
     size_t length = mbuf->range_length();
-    MediaBufferHelperV3 *outbuf;
+    MediaBufferHelper *outbuf;
     mBufferGroup->acquire_buffer(&outbuf, false, length);
     memcpy(outbuf->data(), mbuf->data(), length);
     outbuf->set_range(0, length);
@@ -246,7 +246,7 @@
     return mSourceImpls.size();
 }
 
-MediaTrackHelperV3 *MPEG2TSExtractor::getTrack(size_t index) {
+MediaTrackHelper *MPEG2TSExtractor::getTrack(size_t index) {
     if (index >= mSourceImpls.size()) {
         return NULL;
     }
@@ -602,7 +602,7 @@
 }
 
 status_t MPEG2TSExtractor::seek(int64_t seekTimeUs,
-        const MediaTrackHelperV3::ReadOptions::SeekMode &seekMode) {
+        const MediaTrackHelper::ReadOptions::SeekMode &seekMode) {
     if (mSeekSyncPoints == NULL || mSeekSyncPoints->isEmpty()) {
         ALOGW("No sync point to seek to.");
         // ... and therefore we have nothing useful to do here.
@@ -623,18 +623,18 @@
     }
 
     switch (seekMode) {
-        case MediaTrackHelperV3::ReadOptions::SEEK_NEXT_SYNC:
+        case MediaTrackHelper::ReadOptions::SEEK_NEXT_SYNC:
             if (index == mSeekSyncPoints->size()) {
                 ALOGW("Next sync not found; starting from the latest sync.");
                 --index;
             }
             break;
-        case MediaTrackHelperV3::ReadOptions::SEEK_CLOSEST_SYNC:
-        case MediaTrackHelperV3::ReadOptions::SEEK_CLOSEST:
+        case MediaTrackHelper::ReadOptions::SEEK_CLOSEST_SYNC:
+        case MediaTrackHelper::ReadOptions::SEEK_CLOSEST:
             ALOGW("seekMode not supported: %d; falling back to PREVIOUS_SYNC",
                     seekMode);
             FALLTHROUGH_INTENDED;
-        case MediaTrackHelperV3::ReadOptions::SEEK_PREVIOUS_SYNC:
+        case MediaTrackHelper::ReadOptions::SEEK_PREVIOUS_SYNC:
             if (index == 0) {
                 ALOGW("Previous sync not found; starting from the earliest "
                         "sync.");
diff --git a/media/extractors/mpeg2/MPEG2TSExtractor.h b/media/extractors/mpeg2/MPEG2TSExtractor.h
index aed17bb..e425d23 100644
--- a/media/extractors/mpeg2/MPEG2TSExtractor.h
+++ b/media/extractors/mpeg2/MPEG2TSExtractor.h
@@ -38,11 +38,11 @@
 struct MPEG2TSSource;
 class String8;
 
-struct MPEG2TSExtractor : public MediaExtractorPluginHelperV3 {
+struct MPEG2TSExtractor : public MediaExtractorPluginHelper {
     explicit MPEG2TSExtractor(DataSourceHelper *source);
 
     virtual size_t countTracks();
-    virtual MediaTrackHelperV3 *getTrack(size_t index);
+    virtual MediaTrackHelper *getTrack(size_t index);
     virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
 
     virtual media_status_t getMetaData(AMediaFormat *meta);
@@ -90,7 +90,7 @@
     // the data has syntax error during parsing, etc.
     status_t feedMore(bool isInit = false);
     status_t seek(int64_t seekTimeUs,
-            const MediaTrackHelperV3::ReadOptions::SeekMode& seekMode);
+            const MediaTrackHelper::ReadOptions::SeekMode& seekMode);
     status_t queueDiscontinuityForSeek(int64_t actualSeekTimeUs);
     status_t seekBeyond(int64_t seekTimeUs);
 
diff --git a/media/extractors/ogg/OggExtractor.cpp b/media/extractors/ogg/OggExtractor.cpp
index 29fe2b1..c3914f1 100644
--- a/media/extractors/ogg/OggExtractor.cpp
+++ b/media/extractors/ogg/OggExtractor.cpp
@@ -45,7 +45,7 @@
 
 namespace android {
 
-struct OggSource : public MediaTrackHelperV3 {
+struct OggSource : public MediaTrackHelper {
     explicit OggSource(OggExtractor *extractor);
 
     virtual media_status_t getFormat(AMediaFormat *);
@@ -54,7 +54,7 @@
     virtual media_status_t stop();
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);
+            MediaBufferHelper **buffer, const ReadOptions *options = NULL);
 
 protected:
     virtual ~OggSource();
@@ -82,7 +82,7 @@
 
     status_t seekToTime(int64_t timeUs);
     status_t seekToOffset(off64_t offset);
-    virtual media_status_t readNextPacket(MediaBufferHelperV3 **buffer) = 0;
+    virtual media_status_t readNextPacket(MediaBufferHelper **buffer) = 0;
 
     status_t init();
 
@@ -90,7 +90,7 @@
         return AMediaFormat_copy(meta, mFileMeta);
     }
 
-    void setBufferGroup(MediaBufferGroupHelperV3 *group) {
+    void setBufferGroup(MediaBufferGroupHelper *group) {
         mBufferGroup = group;
     }
 protected:
@@ -110,7 +110,7 @@
         int64_t mTimeUs;
     };
 
-    MediaBufferGroupHelperV3 *mBufferGroup;
+    MediaBufferGroupHelper *mBufferGroup;
     DataSourceHelper *mSource;
     off64_t mOffset;
     Page mCurrentPage;
@@ -149,7 +149,7 @@
     // 1 - bitstream identification header
     // 3 - comment header
     // 5 - codec setup header (Vorbis only)
-    virtual media_status_t verifyHeader(MediaBufferHelperV3 *buffer, uint8_t type) = 0;
+    virtual media_status_t verifyHeader(MediaBufferHelper *buffer, uint8_t type) = 0;
 
     // Read the next ogg packet from the underlying data source; optionally
     // calculate the timestamp for the output packet whilst pretending
@@ -157,9 +157,9 @@
     //
     // *buffer is NULL'ed out immediately upon entry, and if successful a new buffer is allocated;
     // clients are responsible for releasing the original buffer.
-    media_status_t _readNextPacket(MediaBufferHelperV3 **buffer, bool calcVorbisTimestamp);
+    media_status_t _readNextPacket(MediaBufferHelper **buffer, bool calcVorbisTimestamp);
 
-    int32_t getPacketBlockSize(MediaBufferHelperV3 *buffer);
+    int32_t getPacketBlockSize(MediaBufferHelper *buffer);
 
     void parseFileMetaData();
 
@@ -183,7 +183,7 @@
 
     virtual uint64_t approxBitrate() const;
 
-    virtual media_status_t readNextPacket(MediaBufferHelperV3 **buffer) {
+    virtual media_status_t readNextPacket(MediaBufferHelper **buffer) {
         return _readNextPacket(buffer, /* calcVorbisTimestamp = */ true);
     }
 
@@ -195,7 +195,7 @@
         return granulePos * 1000000ll / mVi.rate;
     }
 
-    virtual media_status_t verifyHeader(MediaBufferHelperV3 *buffer, uint8_t type);
+    virtual media_status_t verifyHeader(MediaBufferHelper *buffer, uint8_t type);
 };
 
 struct MyOpusExtractor : public MyOggExtractor {
@@ -213,16 +213,16 @@
         return 0;
     }
 
-    virtual media_status_t readNextPacket(MediaBufferHelperV3 **buffer);
+    virtual media_status_t readNextPacket(MediaBufferHelper **buffer);
 
 protected:
     virtual int64_t getTimeUsOfGranule(uint64_t granulePos) const;
-    virtual media_status_t verifyHeader(MediaBufferHelperV3 *buffer, uint8_t type);
+    virtual media_status_t verifyHeader(MediaBufferHelper *buffer, uint8_t type);
 
 private:
-    media_status_t verifyOpusHeader(MediaBufferHelperV3 *buffer);
-    media_status_t verifyOpusComments(MediaBufferHelperV3 *buffer);
-    uint32_t getNumSamplesInPacket(MediaBufferHelperV3 *buffer) const;
+    media_status_t verifyOpusHeader(MediaBufferHelper *buffer);
+    media_status_t verifyOpusComments(MediaBufferHelper *buffer);
+    uint32_t getNumSamplesInPacket(MediaBufferHelper *buffer) const;
 
     uint8_t mChannelCount;
     uint16_t mCodecDelay;
@@ -265,7 +265,7 @@
 }
 
 media_status_t OggSource::read(
-        MediaBufferHelperV3 **out, const ReadOptions *options) {
+        MediaBufferHelper **out, const ReadOptions *options) {
     *out = NULL;
 
     int64_t seekTimeUs;
@@ -277,7 +277,7 @@
         }
     }
 
-    MediaBufferHelperV3 *packet;
+    MediaBufferHelper *packet;
     media_status_t err = mExtractor->mImpl->readNextPacket(&packet);
 
     if (err != AMEDIA_OK) {
@@ -578,13 +578,13 @@
     return sizeof(header) + page->mNumSegments + totalSize;
 }
 
-media_status_t MyOpusExtractor::readNextPacket(MediaBufferHelperV3 **out) {
+media_status_t MyOpusExtractor::readNextPacket(MediaBufferHelper **out) {
     if (mOffset <= mFirstDataOffset && mStartGranulePosition < 0) {
         // The first sample might not start at time 0; find out where by subtracting
         // the number of samples on the first page from the granule position
         // (position of last complete sample) of the first page. This happens
         // the first time before we attempt to read a packet from the first page.
-        MediaBufferHelperV3 *mBuf;
+        MediaBufferHelper *mBuf;
         uint32_t numSamples = 0;
         uint64_t curGranulePosition = 0;
         while (true) {
@@ -640,7 +640,7 @@
     return AMEDIA_OK;
 }
 
-uint32_t MyOpusExtractor::getNumSamplesInPacket(MediaBufferHelperV3 *buffer) const {
+uint32_t MyOpusExtractor::getNumSamplesInPacket(MediaBufferHelper *buffer) const {
     if (buffer == NULL || buffer->range_length() < 1) {
         return 0;
     }
@@ -690,7 +690,7 @@
  * basic mediabuffer implementation used during initial parsing of the
  * header packets, which happens before we have a buffer group
  */
-class StandAloneMediaBuffer : public MediaBufferHelperV3 {
+class StandAloneMediaBuffer : public MediaBufferHelper {
 private:
     void *mData;
     size_t mSize;
@@ -698,7 +698,7 @@
     size_t mLength;
     AMediaFormat *mFormat;
 public:
-    StandAloneMediaBuffer(size_t size) : MediaBufferHelperV3(NULL) {
+    StandAloneMediaBuffer(size_t size) : MediaBufferHelper(NULL) {
         mSize = size;
         mData = malloc(mSize);
         mOffset = 0;
@@ -742,10 +742,10 @@
     }
 };
 
-media_status_t MyOggExtractor::_readNextPacket(MediaBufferHelperV3 **out, bool calcVorbisTimestamp) {
+media_status_t MyOggExtractor::_readNextPacket(MediaBufferHelper **out, bool calcVorbisTimestamp) {
     *out = NULL;
 
-    MediaBufferHelperV3 *buffer = NULL;
+    MediaBufferHelper *buffer = NULL;
     int64_t timeUs = -1;
 
     for (;;) {
@@ -781,7 +781,7 @@
                 ALOGE("b/36592202");
                 return AMEDIA_ERROR_MALFORMED;
             }
-            MediaBufferHelperV3 *tmp;
+            MediaBufferHelper *tmp;
             if (mBufferGroup) {
                 mBufferGroup->acquire_buffer(&tmp, false, fullSize);
                 ALOGV("acquired buffer %p from group", tmp);
@@ -916,7 +916,7 @@
     AMediaFormat_setString(mMeta, AMEDIAFORMAT_KEY_MIME, mMimeType);
 
     media_status_t err;
-    MediaBufferHelperV3 *packet;
+    MediaBufferHelper *packet;
     for (size_t i = 0; i < mNumHeaders; ++i) {
         // ignore timestamp for configuration packets
         if ((err = _readNextPacket(&packet, /* calcVorbisTimestamp = */ false)) != AMEDIA_OK) {
@@ -993,7 +993,7 @@
     }
 }
 
-int32_t MyOggExtractor::getPacketBlockSize(MediaBufferHelperV3 *buffer) {
+int32_t MyOggExtractor::getPacketBlockSize(MediaBufferHelper *buffer) {
     const uint8_t *data =
         (const uint8_t *)buffer->data() + buffer->range_offset();
 
@@ -1033,7 +1033,7 @@
     return pcmSamplePosition * 1000000ll / kOpusSampleRate;
 }
 
-media_status_t MyOpusExtractor::verifyHeader(MediaBufferHelperV3 *buffer, uint8_t type) {
+media_status_t MyOpusExtractor::verifyHeader(MediaBufferHelper *buffer, uint8_t type) {
     switch (type) {
         // there are actually no header types defined in the Opus spec; we choose 1 and 3 to mean
         // header and comments such that we can share code with MyVorbisExtractor.
@@ -1046,7 +1046,7 @@
     }
 }
 
-media_status_t MyOpusExtractor::verifyOpusHeader(MediaBufferHelperV3 *buffer) {
+media_status_t MyOpusExtractor::verifyOpusHeader(MediaBufferHelper *buffer) {
     const size_t kOpusHeaderSize = 19;
     const uint8_t *data =
         (const uint8_t *)buffer->data() + buffer->range_offset();
@@ -1074,7 +1074,7 @@
     return AMEDIA_OK;
 }
 
-media_status_t MyOpusExtractor::verifyOpusComments(MediaBufferHelperV3 *buffer) {
+media_status_t MyOpusExtractor::verifyOpusComments(MediaBufferHelper *buffer) {
     // add artificial framing bit so we can reuse _vorbis_unpack_comment
     int32_t commentSize = buffer->range_length() + 1;
     auto tmp = heapbuffer<uint8_t>(commentSize);
@@ -1167,7 +1167,7 @@
 }
 
 media_status_t MyVorbisExtractor::verifyHeader(
-        MediaBufferHelperV3 *buffer, uint8_t type) {
+        MediaBufferHelper *buffer, uint8_t type) {
     const uint8_t *data =
         (const uint8_t *)buffer->data() + buffer->range_offset();
 
@@ -1335,7 +1335,7 @@
     return mInitCheck != OK ? 0 : 1;
 }
 
-MediaTrackHelperV3 *OggExtractor::getTrack(size_t index) {
+MediaTrackHelper *OggExtractor::getTrack(size_t index) {
     if (index >= 1) {
         return NULL;
     }
@@ -1357,13 +1357,13 @@
     return mImpl->getFileMetaData(meta);
 }
 
-static CMediaExtractorV3* CreateExtractor(
+static CMediaExtractor* CreateExtractor(
         CDataSource *source,
         void *) {
-    return wrapV3(new OggExtractor(new DataSourceHelper(source)));
+    return wrap(new OggExtractor(new DataSourceHelper(source)));
 }
 
-static CreatorFuncV3 Sniff(
+static CreatorFunc Sniff(
         CDataSource *source,
         float *confidence,
         void **,
@@ -1384,11 +1384,11 @@
 __attribute__ ((visibility ("default")))
 ExtractorDef GETEXTRACTORDEF() {
     return {
-        EXTRACTORDEF_VERSION_CURRENT + 1,
+        EXTRACTORDEF_VERSION,
         UUID("8cc5cd06-f772-495e-8a62-cba9649374e9"),
         1, // version
         "Ogg Extractor",
-        { .v3 = Sniff }
+        { .v2 = Sniff }
     };
 }
 
diff --git a/media/extractors/ogg/OggExtractor.h b/media/extractors/ogg/OggExtractor.h
index 97506ad..c75dfa9 100644
--- a/media/extractors/ogg/OggExtractor.h
+++ b/media/extractors/ogg/OggExtractor.h
@@ -31,11 +31,11 @@
 struct MyOggExtractor;
 struct OggSource;
 
-struct OggExtractor : public MediaExtractorPluginHelperV3 {
+struct OggExtractor : public MediaExtractorPluginHelper {
     explicit OggExtractor(DataSourceHelper *source);
 
     virtual size_t countTracks();
-    virtual MediaTrackHelperV3 *getTrack(size_t index);
+    virtual MediaTrackHelper *getTrack(size_t index);
     virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
 
     virtual media_status_t getMetaData(AMediaFormat *meta);
diff --git a/media/extractors/wav/WAVExtractor.cpp b/media/extractors/wav/WAVExtractor.cpp
index 1f0aae5..6f9f689 100644
--- a/media/extractors/wav/WAVExtractor.cpp
+++ b/media/extractors/wav/WAVExtractor.cpp
@@ -66,7 +66,7 @@
     return ptr[1] << 8 | ptr[0];
 }
 
-struct WAVSource : public MediaTrackHelperV3 {
+struct WAVSource : public MediaTrackHelper {
     WAVSource(
             DataSourceHelper *dataSource,
             AMediaFormat *meta,
@@ -79,7 +79,7 @@
     virtual media_status_t getFormat(AMediaFormat *meta);
 
     virtual media_status_t read(
-            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);
+            MediaBufferHelper **buffer, const ReadOptions *options = NULL);
 
     virtual bool supportNonblockingRead() { return true; }
 
@@ -131,7 +131,7 @@
     return mInitCheck == OK ? 1 : 0;
 }
 
-MediaTrackHelperV3 *WAVExtractor::getTrack(size_t index) {
+MediaTrackHelper *WAVExtractor::getTrack(size_t index) {
     if (mInitCheck != OK || index > 0) {
         return NULL;
     }
@@ -428,7 +428,7 @@
 }
 
 media_status_t WAVSource::read(
-        MediaBufferHelperV3 **out, const ReadOptions *options) {
+        MediaBufferHelper **out, const ReadOptions *options) {
     *out = NULL;
 
     if (options != nullptr && options->getNonBlocking() && !mBufferGroup->has_buffers()) {
@@ -454,7 +454,7 @@
         mCurrentPos = pos + mOffset;
     }
 
-    MediaBufferHelperV3 *buffer;
+    MediaBufferHelper *buffer;
     media_status_t err = mBufferGroup->acquire_buffer(&buffer);
     if (err != OK) {
         return err;
@@ -581,13 +581,13 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 
-static CMediaExtractorV3* CreateExtractor(
+static CMediaExtractor* CreateExtractor(
         CDataSource *source,
         void *) {
-    return wrapV3(new WAVExtractor(new DataSourceHelper(source)));
+    return wrap(new WAVExtractor(new DataSourceHelper(source)));
 }
 
-static CreatorFuncV3 Sniff(
+static CreatorFunc Sniff(
         CDataSource *source,
         float *confidence,
         void **,
@@ -621,11 +621,11 @@
 __attribute__ ((visibility ("default")))
 ExtractorDef GETEXTRACTORDEF() {
     return {
-        EXTRACTORDEF_VERSION_CURRENT + 1,
+        EXTRACTORDEF_VERSION,
         UUID("7d613858-5837-4a38-84c5-332d1cddee27"),
         1, // version
         "WAV Extractor",
-        { .v3 = Sniff }
+        { .v2 = Sniff }
     };
 }
 
diff --git a/media/extractors/wav/WAVExtractor.h b/media/extractors/wav/WAVExtractor.h
index 9b7dfde..b514196 100644
--- a/media/extractors/wav/WAVExtractor.h
+++ b/media/extractors/wav/WAVExtractor.h
@@ -29,12 +29,12 @@
 struct CDataSource;
 class String8;
 
-class WAVExtractor : public MediaExtractorPluginHelperV3 {
+class WAVExtractor : public MediaExtractorPluginHelper {
 public:
     explicit WAVExtractor(DataSourceHelper *source);
 
     virtual size_t countTracks();
-    virtual MediaTrackHelperV3 *getTrack(size_t index);
+    virtual MediaTrackHelper *getTrack(size_t index);
     virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
 
     virtual media_status_t getMetaData(AMediaFormat *meta);
diff --git a/media/libmediaextractor/include/media/stagefright/MediaBufferBase.h b/media/libmediaextractor/include/media/stagefright/MediaBufferBase.h
index e357d3e..e2cbfc8 100644
--- a/media/libmediaextractor/include/media/stagefright/MediaBufferBase.h
+++ b/media/libmediaextractor/include/media/stagefright/MediaBufferBase.h
@@ -80,11 +80,11 @@
         delete mFormat;
     };
 
-    CMediaBufferV3 *wrap() {
+    CMediaBuffer *wrap() {
         if (mWrapper) {
             return mWrapper;
         }
-        mWrapper = new CMediaBufferV3;
+        mWrapper = new CMediaBuffer;
         mWrapper->handle = this;
 
         mWrapper->release = [](void *handle) -> void {
@@ -127,7 +127,7 @@
         mFormat = nullptr;
     }
 private:
-    CMediaBufferV3 *mWrapper;
+    CMediaBuffer *mWrapper;
     AMediaFormat *mFormat;
 };
 
diff --git a/media/libmediaextractor/include/media/stagefright/MediaBufferGroup.h b/media/libmediaextractor/include/media/stagefright/MediaBufferGroup.h
index dc04556..a162116 100644
--- a/media/libmediaextractor/include/media/stagefright/MediaBufferGroup.h
+++ b/media/libmediaextractor/include/media/stagefright/MediaBufferGroup.h
@@ -59,12 +59,12 @@
     // If buffer is nullptr, have acquire_buffer() check for remote release.
     virtual void signalBufferReturned(MediaBufferBase *buffer);
 
-    CMediaBufferGroupV3 *wrap() {
+    CMediaBufferGroup *wrap() {
         if (mWrapper) {
             return mWrapper;
         }
 
-        mWrapper = new CMediaBufferGroupV3;
+        mWrapper = new CMediaBufferGroup;
         mWrapper->handle = this;
 
         mWrapper->add_buffer = [](void *handle, size_t size) -> void {
@@ -80,7 +80,7 @@
         };
 
         mWrapper->acquire_buffer = [](void *handle,
-                CMediaBufferV3 **buf, bool nonBlocking, size_t requestedSize) -> media_status_t {
+                CMediaBuffer **buf, bool nonBlocking, size_t requestedSize) -> media_status_t {
             MediaBufferBase *acquiredBuf = nullptr;
             status_t err = ((MediaBufferGroup*)handle)->acquire_buffer(
                     &acquiredBuf, nonBlocking, requestedSize);
@@ -100,7 +100,7 @@
     }
 
 private:
-    CMediaBufferGroupV3 *mWrapper;
+    CMediaBufferGroup *mWrapper;
     struct InternalData;
     InternalData *mInternal;
 
diff --git a/media/libstagefright/MediaExtractor.cpp b/media/libstagefright/MediaExtractor.cpp
index ea818ff..9511931 100644
--- a/media/libstagefright/MediaExtractor.cpp
+++ b/media/libstagefright/MediaExtractor.cpp
@@ -43,63 +43,24 @@
 }
 
 // --------------------------------------------------------------------------------
-MediaExtractorCUnwrapperV1::MediaExtractorCUnwrapperV1(CMediaExtractor *plugin) {
+MediaExtractorCUnwrapper::MediaExtractorCUnwrapper(CMediaExtractor *plugin) {
     this->plugin = plugin;
 }
 
-MediaExtractorCUnwrapperV1::~MediaExtractorCUnwrapperV1() {
+MediaExtractorCUnwrapper::~MediaExtractorCUnwrapper() {
     plugin->free(plugin->data);
     free(plugin);
 }
 
-size_t MediaExtractorCUnwrapperV1::countTracks() {
+size_t MediaExtractorCUnwrapper::countTracks() {
     return plugin->countTracks(plugin->data);
 }
 
-MediaTrack *MediaExtractorCUnwrapperV1::getTrack(size_t index) {
+MediaTrack *MediaExtractorCUnwrapper::getTrack(size_t index) {
     return new MediaTrackCUnwrapper(plugin->getTrack(plugin->data, index));
 }
 
-status_t MediaExtractorCUnwrapperV1::getTrackMetaData(
-        MetaDataBase& meta, size_t index, uint32_t flags) {
-    return plugin->getTrackMetaData(plugin->data, meta, index, flags);
-}
-
-status_t MediaExtractorCUnwrapperV1::getMetaData(MetaDataBase& meta) {
-    return plugin->getMetaData(plugin->data, meta);
-}
-
-const char * MediaExtractorCUnwrapperV1::name() {
-    return plugin->name(plugin->data);
-}
-
-uint32_t MediaExtractorCUnwrapperV1::flags() const {
-    return plugin->flags(plugin->data);
-}
-
-status_t MediaExtractorCUnwrapperV1::setMediaCas(const uint8_t* casToken, size_t size) {
-    return plugin->setMediaCas(plugin->data, casToken, size);
-}
-
-// --------------------------------------------------------------------------------
-MediaExtractorCUnwrapperV2::MediaExtractorCUnwrapperV2(CMediaExtractorV2 *plugin) {
-    this->plugin = plugin;
-}
-
-MediaExtractorCUnwrapperV2::~MediaExtractorCUnwrapperV2() {
-    plugin->free(plugin->data);
-    free(plugin);
-}
-
-size_t MediaExtractorCUnwrapperV2::countTracks() {
-    return plugin->countTracks(plugin->data);
-}
-
-MediaTrack *MediaExtractorCUnwrapperV2::getTrack(size_t index) {
-    return new MediaTrackCUnwrapperV2(plugin->getTrack(plugin->data, index));
-}
-
-status_t MediaExtractorCUnwrapperV2::getTrackMetaData(
+status_t MediaExtractorCUnwrapper::getTrackMetaData(
         MetaDataBase& meta, size_t index, uint32_t flags) {
     sp<AMessage> msg = new AMessage();
     AMediaFormat *format =  AMediaFormat_fromMsg(&msg);
@@ -111,7 +72,7 @@
     return reverse_translate_error(ret);
 }
 
-status_t MediaExtractorCUnwrapperV2::getMetaData(MetaDataBase& meta) {
+status_t MediaExtractorCUnwrapper::getMetaData(MetaDataBase& meta) {
     sp<AMessage> msg = new AMessage();
     AMediaFormat *format =  AMediaFormat_fromMsg(&msg);
     media_status_t ret = plugin->getMetaData(plugin->data, format);
@@ -122,68 +83,15 @@
     return reverse_translate_error(ret);
 }
 
-const char * MediaExtractorCUnwrapperV2::name() {
+const char * MediaExtractorCUnwrapper::name() {
     return plugin->name(plugin->data);
 }
 
-uint32_t MediaExtractorCUnwrapperV2::flags() const {
+uint32_t MediaExtractorCUnwrapper::flags() const {
     return plugin->flags(plugin->data);
 }
 
-status_t MediaExtractorCUnwrapperV2::setMediaCas(const uint8_t* casToken, size_t size) {
-    return plugin->setMediaCas(plugin->data, casToken, size);
-}
-
-// --------------------------------------------------------------------------------
-MediaExtractorCUnwrapperV3::MediaExtractorCUnwrapperV3(CMediaExtractorV3 *plugin) {
-    this->plugin = plugin;
-}
-
-MediaExtractorCUnwrapperV3::~MediaExtractorCUnwrapperV3() {
-    plugin->free(plugin->data);
-    free(plugin);
-}
-
-size_t MediaExtractorCUnwrapperV3::countTracks() {
-    return plugin->countTracks(plugin->data);
-}
-
-MediaTrack *MediaExtractorCUnwrapperV3::getTrack(size_t index) {
-    return new MediaTrackCUnwrapperV3(plugin->getTrack(plugin->data, index));
-}
-
-status_t MediaExtractorCUnwrapperV3::getTrackMetaData(
-        MetaDataBase& meta, size_t index, uint32_t flags) {
-    sp<AMessage> msg = new AMessage();
-    AMediaFormat *format =  AMediaFormat_fromMsg(&msg);
-    media_status_t ret = plugin->getTrackMetaData(plugin->data, format, index, flags);
-    sp<MetaData> newMeta = new MetaData();
-    convertMessageToMetaData(msg, newMeta);
-    delete format;
-    meta = *newMeta;
-    return reverse_translate_error(ret);
-}
-
-status_t MediaExtractorCUnwrapperV3::getMetaData(MetaDataBase& meta) {
-    sp<AMessage> msg = new AMessage();
-    AMediaFormat *format =  AMediaFormat_fromMsg(&msg);
-    media_status_t ret = plugin->getMetaData(plugin->data, format);
-    sp<MetaData> newMeta = new MetaData();
-    convertMessageToMetaData(msg, newMeta);
-    delete format;
-    meta = *newMeta;
-    return reverse_translate_error(ret);
-}
-
-const char * MediaExtractorCUnwrapperV3::name() {
-    return plugin->name(plugin->data);
-}
-
-uint32_t MediaExtractorCUnwrapperV3::flags() const {
-    return plugin->flags(plugin->data);
-}
-
-status_t MediaExtractorCUnwrapperV3::setMediaCas(const uint8_t* casToken, size_t size) {
+status_t MediaExtractorCUnwrapper::setMediaCas(const uint8_t* casToken, size_t size) {
     return plugin->setMediaCas(plugin->data, casToken, size);
 }
 
diff --git a/media/libstagefright/MediaExtractorFactory.cpp b/media/libstagefright/MediaExtractorFactory.cpp
index 81fc4ae..2c7a4e5 100644
--- a/media/libstagefright/MediaExtractorFactory.cpp
+++ b/media/libstagefright/MediaExtractorFactory.cpp
@@ -106,24 +106,12 @@
     }
 
     MediaExtractor *ex = nullptr;
-    if (creatorVersion == 1) {
-        CMediaExtractor *ret = ((CreatorFuncV1)creator)(source->wrap(), meta);
+    if (creatorVersion == EXTRACTORDEF_VERSION_NDK_V1) {
+        CMediaExtractor *ret = ((CreatorFunc)creator)(source->wrap(), meta);
         if (meta != nullptr && freeMeta != nullptr) {
             freeMeta(meta);
         }
-        ex = ret != nullptr ? new MediaExtractorCUnwrapperV1(ret) : nullptr;
-    } else if (creatorVersion == 2) {
-        CMediaExtractorV2 *ret = ((CreatorFuncV2)creator)(source->wrap(), meta);
-        if (meta != nullptr && freeMeta != nullptr) {
-            freeMeta(meta);
-        }
-        ex = ret != nullptr ? new MediaExtractorCUnwrapperV2(ret) : nullptr;
-    } else if (creatorVersion == 3) {
-        CMediaExtractorV3 *ret = ((CreatorFuncV3)creator)(source->wrap(), meta);
-        if (meta != nullptr && freeMeta != nullptr) {
-            freeMeta(meta);
-        }
-        ex = ret != nullptr ? new MediaExtractorCUnwrapperV3(ret) : nullptr;
+        ex = ret != nullptr ? new MediaExtractorCUnwrapper(ret) : nullptr;
     }
 
     ALOGV("Created an extractor '%s' with confidence %.2f",
@@ -195,15 +183,9 @@
         FreeMetaFunc newFreeMeta = nullptr;
 
         void *curCreator = NULL;
-        if ((*it)->def.def_version == 1) {
-            curCreator = (void*) (*it)->def.sniff.v1(
-                    source->wrap(), &newConfidence, &newMeta, &newFreeMeta);
-        } else if ((*it)->def.def_version == 2) {
+        if ((*it)->def.def_version == EXTRACTORDEF_VERSION_NDK_V1) {
             curCreator = (void*) (*it)->def.sniff.v2(
                     source->wrap(), &newConfidence, &newMeta, &newFreeMeta);
-        } else if ((*it)->def.def_version == 3) {
-            curCreator = (void*) (*it)->def.sniff.v3(
-                    source->wrap(), &newConfidence, &newMeta, &newFreeMeta);
         }
 
         if (curCreator) {
@@ -232,8 +214,7 @@
 void MediaExtractorFactory::RegisterExtractor(const sp<ExtractorPlugin> &plugin,
         std::list<sp<ExtractorPlugin>> &pluginList) {
     // sanity check check struct version, uuid, name
-    if (plugin->def.def_version == 0
-            || plugin->def.def_version > EXTRACTORDEF_VERSION_CURRENT + 1) {
+    if (plugin->def.def_version != EXTRACTORDEF_VERSION_NDK_V1) {
         ALOGE("don't understand extractor format %u, ignoring.", plugin->def.def_version);
         return;
     }
diff --git a/media/libstagefright/MediaTrack.cpp b/media/libstagefright/MediaTrack.cpp
index b15f3bb..1c1be30 100644
--- a/media/libstagefright/MediaTrack.cpp
+++ b/media/libstagefright/MediaTrack.cpp
@@ -58,27 +58,39 @@
     return (mOptions & kSeekTo_Option) != 0;
 }
 
-/* -------------- unwrapper v1 --------------- */
+/* -------------- unwrapper --------------- */
 
 MediaTrackCUnwrapper::MediaTrackCUnwrapper(CMediaTrack *cmediatrack) {
     wrapper = cmediatrack;
+    bufferGroup = nullptr;
 }
 
 MediaTrackCUnwrapper::~MediaTrackCUnwrapper() {
     wrapper->free(wrapper->data);
     free(wrapper);
+    delete bufferGroup;
 }
 
 status_t MediaTrackCUnwrapper::start() {
-    return wrapper->start(wrapper->data);
+    if (bufferGroup == nullptr) {
+        bufferGroup = new MediaBufferGroup();
+    }
+    return reverse_translate_error(wrapper->start(wrapper->data, bufferGroup->wrap()));
 }
 
 status_t MediaTrackCUnwrapper::stop() {
-    return wrapper->stop(wrapper->data);
+    return reverse_translate_error(wrapper->stop(wrapper->data));
 }
 
 status_t MediaTrackCUnwrapper::getFormat(MetaDataBase& format) {
-    return wrapper->getFormat(wrapper->data, format);
+    sp<AMessage> msg = new AMessage();
+    AMediaFormat *tmpFormat =  AMediaFormat_fromMsg(&msg);
+    media_status_t ret = wrapper->getFormat(wrapper->data, tmpFormat);
+    sp<MetaData> newMeta = new MetaData();
+    convertMessageToMetaData(msg, newMeta);
+    delete tmpFormat;
+    format = *newMeta;
+    return reverse_translate_error(ret);
 }
 
 status_t MediaTrackCUnwrapper::read(MediaBufferBase **buffer, const ReadOptions *options) {
@@ -95,117 +107,7 @@
         opts |= SEEK;
         opts |= (uint32_t) seekMode;
     }
-
-
-    return wrapper->read(wrapper->data, buffer, opts, seekPosition);
-}
-
-bool MediaTrackCUnwrapper::supportNonblockingRead() {
-    return wrapper->supportsNonBlockingRead(wrapper->data);
-}
-
-/* -------------- unwrapper v2 --------------- */
-
-MediaTrackCUnwrapperV2::MediaTrackCUnwrapperV2(CMediaTrackV2 *cmediatrack2) {
-    wrapper = cmediatrack2;
-}
-
-MediaTrackCUnwrapperV2::~MediaTrackCUnwrapperV2() {
-    wrapper->free(wrapper->data);
-    free(wrapper);
-}
-
-status_t MediaTrackCUnwrapperV2::start() {
-    return reverse_translate_error(wrapper->start(wrapper->data));
-}
-
-status_t MediaTrackCUnwrapperV2::stop() {
-    return reverse_translate_error(wrapper->stop(wrapper->data));
-}
-
-status_t MediaTrackCUnwrapperV2::getFormat(MetaDataBase& format) {
-    sp<AMessage> msg = new AMessage();
-    AMediaFormat *tmpFormat =  AMediaFormat_fromMsg(&msg);
-    media_status_t ret = wrapper->getFormat(wrapper->data, tmpFormat);
-    sp<MetaData> newMeta = new MetaData();
-    convertMessageToMetaData(msg, newMeta);
-    delete tmpFormat;
-    format = *newMeta;
-    return reverse_translate_error(ret);
-}
-
-status_t MediaTrackCUnwrapperV2::read(MediaBufferBase **buffer, const ReadOptions *options) {
-
-    uint32_t opts = 0;
-
-    if (options && options->getNonBlocking()) {
-        opts |= CMediaTrackReadOptions::NONBLOCKING;
-    }
-
-    int64_t seekPosition = 0;
-    MediaTrack::ReadOptions::SeekMode seekMode;
-    if (options && options->getSeekTo(&seekPosition, &seekMode)) {
-        opts |= SEEK;
-        opts |= (uint32_t) seekMode;
-    }
-
-    return reverse_translate_error(wrapper->read(wrapper->data, buffer, opts, seekPosition));
-}
-
-bool MediaTrackCUnwrapperV2::supportNonblockingRead() {
-    return wrapper->supportsNonBlockingRead(wrapper->data);
-}
-
-/* -------------- unwrapper v3 --------------- */
-
-MediaTrackCUnwrapperV3::MediaTrackCUnwrapperV3(CMediaTrackV3 *cmediatrack3) {
-    wrapper = cmediatrack3;
-    bufferGroup = nullptr;
-}
-
-MediaTrackCUnwrapperV3::~MediaTrackCUnwrapperV3() {
-    wrapper->free(wrapper->data);
-    free(wrapper);
-    delete bufferGroup;
-}
-
-status_t MediaTrackCUnwrapperV3::start() {
-    if (bufferGroup == nullptr) {
-        bufferGroup = new MediaBufferGroup();
-    }
-    return reverse_translate_error(wrapper->start(wrapper->data, bufferGroup->wrap()));
-}
-
-status_t MediaTrackCUnwrapperV3::stop() {
-    return reverse_translate_error(wrapper->stop(wrapper->data));
-}
-
-status_t MediaTrackCUnwrapperV3::getFormat(MetaDataBase& format) {
-    sp<AMessage> msg = new AMessage();
-    AMediaFormat *tmpFormat =  AMediaFormat_fromMsg(&msg);
-    media_status_t ret = wrapper->getFormat(wrapper->data, tmpFormat);
-    sp<MetaData> newMeta = new MetaData();
-    convertMessageToMetaData(msg, newMeta);
-    delete tmpFormat;
-    format = *newMeta;
-    return reverse_translate_error(ret);
-}
-
-status_t MediaTrackCUnwrapperV3::read(MediaBufferBase **buffer, const ReadOptions *options) {
-
-    uint32_t opts = 0;
-
-    if (options && options->getNonBlocking()) {
-        opts |= CMediaTrackReadOptions::NONBLOCKING;
-    }
-
-    int64_t seekPosition = 0;
-    MediaTrack::ReadOptions::SeekMode seekMode;
-    if (options && options->getSeekTo(&seekPosition, &seekMode)) {
-        opts |= SEEK;
-        opts |= (uint32_t) seekMode;
-    }
-    CMediaBufferV3 *buf = nullptr;
+    CMediaBuffer *buf = nullptr;
     media_status_t ret = wrapper->read(wrapper->data, &buf, opts, seekPosition);
     if (ret == AMEDIA_OK && buf != nullptr) {
         *buffer = (MediaBufferBase*)buf->handle;
@@ -277,7 +179,7 @@
     return reverse_translate_error(ret);
 }
 
-bool MediaTrackCUnwrapperV3::supportNonblockingRead() {
+bool MediaTrackCUnwrapper::supportNonblockingRead() {
     return wrapper->supportsNonBlockingRead(wrapper->data);
 }
 
diff --git a/media/libstagefright/include/media/stagefright/MediaExtractor.h b/media/libstagefright/include/media/stagefright/MediaExtractor.h
index 6f3e57e..79f18d5 100644
--- a/media/libstagefright/include/media/stagefright/MediaExtractor.h
+++ b/media/libstagefright/include/media/stagefright/MediaExtractor.h
@@ -90,22 +90,7 @@
 
 class MediaExtractorCUnwrapper : public MediaExtractor {
 public:
-    MediaExtractorCUnwrapper() {};
-    virtual size_t countTracks() = 0;
-    virtual MediaTrack *getTrack(size_t index) = 0;
-    virtual status_t getTrackMetaData(MetaDataBase& meta, size_t index, uint32_t flags = 0) = 0;
-    virtual status_t getMetaData(MetaDataBase& meta) = 0;
-    virtual const char * name() = 0;
-    virtual uint32_t flags() const = 0;
-    virtual status_t setMediaCas(const uint8_t* casToken, size_t size) = 0;
-protected:
-    virtual ~MediaExtractorCUnwrapper() {};
-};
-
-
-class MediaExtractorCUnwrapperV1 : public MediaExtractorCUnwrapper {
-public:
-    explicit MediaExtractorCUnwrapperV1(CMediaExtractor *plugin);
+    explicit MediaExtractorCUnwrapper(CMediaExtractor *plugin);
     virtual size_t countTracks();
     virtual MediaTrack *getTrack(size_t index);
     virtual status_t getTrackMetaData(MetaDataBase& meta, size_t index, uint32_t flags = 0);
@@ -114,43 +99,11 @@
     virtual uint32_t flags() const;
     virtual status_t setMediaCas(const uint8_t* casToken, size_t size);
 protected:
-    virtual ~MediaExtractorCUnwrapperV1();
+    virtual ~MediaExtractorCUnwrapper();
 private:
     CMediaExtractor *plugin;
 };
 
-class MediaExtractorCUnwrapperV2 : public MediaExtractorCUnwrapper {
-public:
-    explicit MediaExtractorCUnwrapperV2(CMediaExtractorV2 *plugin);
-    virtual size_t countTracks();
-    virtual MediaTrack *getTrack(size_t index);
-    virtual status_t getTrackMetaData(MetaDataBase& meta, size_t index, uint32_t flags = 0);
-    virtual status_t getMetaData(MetaDataBase& meta);
-    virtual const char * name();
-    virtual uint32_t flags() const;
-    virtual status_t setMediaCas(const uint8_t* casToken, size_t size);
-protected:
-    virtual ~MediaExtractorCUnwrapperV2();
-private:
-    CMediaExtractorV2 *plugin;
-};
-
-class MediaExtractorCUnwrapperV3 : public MediaExtractorCUnwrapper {
-public:
-    explicit MediaExtractorCUnwrapperV3(CMediaExtractorV3 *plugin);
-    virtual size_t countTracks();
-    virtual MediaTrack *getTrack(size_t index);
-    virtual status_t getTrackMetaData(MetaDataBase& meta, size_t index, uint32_t flags = 0);
-    virtual status_t getMetaData(MetaDataBase& meta);
-    virtual const char * name();
-    virtual uint32_t flags() const;
-    virtual status_t setMediaCas(const uint8_t* casToken, size_t size);
-protected:
-    virtual ~MediaExtractorCUnwrapperV3();
-private:
-    CMediaExtractorV3 *plugin;
-};
-
 }  // namespace android
 
 #endif  // MEDIA_EXTRACTOR_H_