NuMediaExtractor.h revision 5778822d86b0337407514b9372562b86edfa91cd
15778822d86b0337407514b9372562b86edfa91cdAndreas Huber/* 25778822d86b0337407514b9372562b86edfa91cdAndreas Huber * Copyright 2012, The Android Open Source Project 35778822d86b0337407514b9372562b86edfa91cdAndreas Huber * 45778822d86b0337407514b9372562b86edfa91cdAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 55778822d86b0337407514b9372562b86edfa91cdAndreas Huber * you may not use this file except in compliance with the License. 65778822d86b0337407514b9372562b86edfa91cdAndreas Huber * You may obtain a copy of the License at 75778822d86b0337407514b9372562b86edfa91cdAndreas Huber * 85778822d86b0337407514b9372562b86edfa91cdAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 95778822d86b0337407514b9372562b86edfa91cdAndreas Huber * 105778822d86b0337407514b9372562b86edfa91cdAndreas Huber * Unless required by applicable law or agreed to in writing, software 115778822d86b0337407514b9372562b86edfa91cdAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 125778822d86b0337407514b9372562b86edfa91cdAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135778822d86b0337407514b9372562b86edfa91cdAndreas Huber * See the License for the specific language governing permissions and 145778822d86b0337407514b9372562b86edfa91cdAndreas Huber * limitations under the License. 155778822d86b0337407514b9372562b86edfa91cdAndreas Huber */ 165778822d86b0337407514b9372562b86edfa91cdAndreas Huber 175778822d86b0337407514b9372562b86edfa91cdAndreas Huber#ifndef NU_MEDIA_EXTRACTOR_H_ 185778822d86b0337407514b9372562b86edfa91cdAndreas Huber#define NU_MEDIA_EXTRACTOR_H_ 195778822d86b0337407514b9372562b86edfa91cdAndreas Huber 205778822d86b0337407514b9372562b86edfa91cdAndreas Huber#include <media/stagefright/foundation/ABase.h> 215778822d86b0337407514b9372562b86edfa91cdAndreas Huber#include <utils/Errors.h> 225778822d86b0337407514b9372562b86edfa91cdAndreas Huber#include <utils/RefBase.h> 235778822d86b0337407514b9372562b86edfa91cdAndreas Huber#include <utils/Vector.h> 245778822d86b0337407514b9372562b86edfa91cdAndreas Huber 255778822d86b0337407514b9372562b86edfa91cdAndreas Hubernamespace android { 265778822d86b0337407514b9372562b86edfa91cdAndreas Huber 275778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct ABuffer; 285778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct AMessage; 295778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct MediaBuffer; 305778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct MediaExtractor; 315778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct MediaSource; 325778822d86b0337407514b9372562b86edfa91cdAndreas Huber 335778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct NuMediaExtractor : public RefBase { 345778822d86b0337407514b9372562b86edfa91cdAndreas Huber NuMediaExtractor(); 355778822d86b0337407514b9372562b86edfa91cdAndreas Huber 365778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t setDataSource(const char *path); 375778822d86b0337407514b9372562b86edfa91cdAndreas Huber 385778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t countTracks() const; 395778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t getTrackFormat(size_t index, sp<AMessage> *format) const; 405778822d86b0337407514b9372562b86edfa91cdAndreas Huber 415778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t selectTrack(size_t index); 425778822d86b0337407514b9372562b86edfa91cdAndreas Huber 435778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t seekTo(int64_t timeUs); 445778822d86b0337407514b9372562b86edfa91cdAndreas Huber 455778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t advance(); 465778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t readSampleData(const sp<ABuffer> &buffer); 475778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t getSampleTrackIndex(size_t *trackIndex); 485778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t getSampleTime(int64_t *sampleTimeUs); 495778822d86b0337407514b9372562b86edfa91cdAndreas Huber 505778822d86b0337407514b9372562b86edfa91cdAndreas Huberprotected: 515778822d86b0337407514b9372562b86edfa91cdAndreas Huber virtual ~NuMediaExtractor(); 525778822d86b0337407514b9372562b86edfa91cdAndreas Huber 535778822d86b0337407514b9372562b86edfa91cdAndreas Huberprivate: 545778822d86b0337407514b9372562b86edfa91cdAndreas Huber enum TrackFlags { 555778822d86b0337407514b9372562b86edfa91cdAndreas Huber kIsVorbis = 1, 565778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 575778822d86b0337407514b9372562b86edfa91cdAndreas Huber 585778822d86b0337407514b9372562b86edfa91cdAndreas Huber struct TrackInfo { 595778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<MediaSource> mSource; 605778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t mTrackIndex; 615778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t mFinalResult; 625778822d86b0337407514b9372562b86edfa91cdAndreas Huber MediaBuffer *mSample; 635778822d86b0337407514b9372562b86edfa91cdAndreas Huber int64_t mSampleTimeUs; 645778822d86b0337407514b9372562b86edfa91cdAndreas Huber uint32_t mFlags; // bitmask of "TrackFlags" 655778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 665778822d86b0337407514b9372562b86edfa91cdAndreas Huber 675778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<MediaExtractor> mImpl; 685778822d86b0337407514b9372562b86edfa91cdAndreas Huber 695778822d86b0337407514b9372562b86edfa91cdAndreas Huber Vector<TrackInfo> mSelectedTracks; 705778822d86b0337407514b9372562b86edfa91cdAndreas Huber 715778822d86b0337407514b9372562b86edfa91cdAndreas Huber ssize_t fetchTrackSamples(int64_t seekTimeUs = -1ll); 725778822d86b0337407514b9372562b86edfa91cdAndreas Huber void releaseTrackSamples(); 735778822d86b0337407514b9372562b86edfa91cdAndreas Huber 745778822d86b0337407514b9372562b86edfa91cdAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(NuMediaExtractor); 755778822d86b0337407514b9372562b86edfa91cdAndreas Huber}; 765778822d86b0337407514b9372562b86edfa91cdAndreas Huber 775778822d86b0337407514b9372562b86edfa91cdAndreas Huber} // namespace android 785778822d86b0337407514b9372562b86edfa91cdAndreas Huber 795778822d86b0337407514b9372562b86edfa91cdAndreas Huber#endif // NU_MEDIA_EXTRACTOR_H_ 805778822d86b0337407514b9372562b86edfa91cdAndreas Huber 81