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