NuMediaExtractor.h revision 918c7652b9a38c02e26c0c46541cea82070c0e43
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/*
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright 2012, The Android Open Source Project
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * you may not use this file except in compliance with the License.
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * You may obtain a copy of the License at
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *     http://www.apache.org/licenses/LICENSE-2.0
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * See the License for the specific language governing permissions and
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * limitations under the License.
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef NU_MEDIA_EXTRACTOR_H_
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define NU_MEDIA_EXTRACTOR_H_
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <media/stagefright/foundation/ABase.h>
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/Errors.h>
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/KeyedVector.h>
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/RefBase.h>
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/String8.h>
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/Vector.h>
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ABuffer;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct AMessage;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct MediaBuffer;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct MediaExtractor;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct MediaSource;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct NuMediaExtractor : public RefBase {
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    enum SampleFlags {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        SAMPLE_FLAG_SYNC        = 1,
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        SAMPLE_FLAG_ENCRYPTED   = 2,
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    };
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NuMediaExtractor();
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t setDataSource(
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            const char *path,
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            const KeyedVector<String8, String8> *headers = NULL);
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t setDataSource(int fd, off64_t offset, off64_t size);
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    size_t countTracks() const;
5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    status_t getTrackFormat(size_t index, sp<AMessage> *format) const;
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t selectTrack(size_t index);
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t seekTo(int64_t timeUs);
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t advance();
57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    status_t readSampleData(const sp<ABuffer> &buffer);
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t getSampleTrackIndex(size_t *trackIndex);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t getSampleTime(int64_t *sampleTimeUs);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t getSampleFlags(uint32_t *sampleFlags);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)protected:
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    virtual ~NuMediaExtractor();
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)private:
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    enum TrackFlags {
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kIsVorbis       = 1,
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    };
69424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    struct TrackInfo {
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        sp<MediaSource> mSource;
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        size_t mTrackIndex;
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        status_t mFinalResult;
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        MediaBuffer *mSample;
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        int64_t mSampleTimeUs;
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        uint32_t mSampleFlags;
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        uint32_t mTrackFlags;  // bitmask of "TrackFlags"
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    };
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    sp<MediaExtractor> mImpl;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Vector<TrackInfo> mSelectedTracks;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    ssize_t fetchTrackSamples(int64_t seekTimeUs = -1ll);
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    void releaseTrackSamples();
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DISALLOW_EVIL_CONSTRUCTORS(NuMediaExtractor);
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
91424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}  // namespace android
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // NU_MEDIA_EXTRACTOR_H_
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
95