17137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang/* 27137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * Copyright 2014 The Android Open Source Project 37137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * 47137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * Licensed under the Apache License, Version 2.0 (the "License"); 57137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * you may not use this file except in compliance with the License. 67137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * You may obtain a copy of the License at 77137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * 87137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * http://www.apache.org/licenses/LICENSE-2.0 97137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * 107137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * Unless required by applicable law or agreed to in writing, software 117137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * distributed under the License is distributed on an "AS IS" BASIS, 127137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * See the License for the specific language governing permissions and 147137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * limitations under the License. 157137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang */ 167137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 177137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang#ifndef NUPLAYER_CCDECODER_H_ 187137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 197137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang#define NUPLAYER_CCDECODER_H_ 207137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 217137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang#include "NuPlayer.h" 227137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 237137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangnamespace android { 247137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 257137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangstruct NuPlayer::CCDecoder : public RefBase { 267137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang enum { 277137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatClosedCaptionData, 287137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatTrackAdded, 297137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang }; 307137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 317137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang CCDecoder(const sp<AMessage> ¬ify); 327137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 337137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang size_t getTrackCount() const; 347137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang sp<AMessage> getTrackInfo(size_t index) const; 357137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang status_t selectTrack(size_t index, bool select); 367137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang bool isSelected() const; 377137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void decode(const sp<ABuffer> &accessUnit); 387137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void display(int64_t timeUs); 397137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void flush(); 407137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 417137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangprivate: 427137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang sp<AMessage> mNotify; 437137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang KeyedVector<int64_t, sp<ABuffer> > mCCMap; 447137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang size_t mCurrentChannel; 457137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang int32_t mSelectedTrack; 467137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang int32_t mTrackIndices[4]; 477137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang Vector<size_t> mFoundChannels; 487137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 497137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang bool isTrackValid(size_t index) const; 507137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang int32_t getTrackIndex(size_t channel) const; 517137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang bool extractFromSEI(const sp<ABuffer> &accessUnit); 5278acc89eae9789366b6384707861f4563addf2d3Chong Zhang bool parseSEINalUnit(int64_t timeUs, const uint8_t *nalStart, size_t nalSize); 537137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang sp<ABuffer> filterCCBuf(const sp<ABuffer> &ccBuf, size_t index); 547137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 557137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang DISALLOW_EVIL_CONSTRUCTORS(CCDecoder); 567137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang}; 577137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 587137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang} // namespace android 597137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 607137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang#endif // NUPLAYER_CCDECODER_H_ 61