1ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang/* 2ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * Copyright 2017, The Android Open Source Project 3ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * 4ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * Licensed under the Apache License, Version 2.0 (the "License"); 5ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * you may not use this file except in compliance with the License. 6ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * You may obtain a copy of the License at 7ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * 8ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * http://www.apache.org/licenses/LICENSE-2.0 9ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * 10ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * Unless required by applicable law or agreed to in writing, software 11ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * distributed under the License is distributed on an "AS IS" BASIS, 12ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * See the License for the specific language governing permissions and 14ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang * limitations under the License. 15ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang */ 16ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang 17ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang#ifndef REMOTE_MEDIA_SOURCE_H_ 18ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang#define REMOTE_MEDIA_SOURCE_H_ 19ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang 20ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang#include <media/IMediaSource.h> 21d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang#include <media/MediaSource.h> 22ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang#include <media/stagefright/foundation/ABase.h> 23ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang 24ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kangnamespace android { 25ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang 26ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang// IMediaSrouce wrapper to the MediaSource. 27ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kangclass RemoteMediaSource : public BnMediaSource { 28ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kangpublic: 297d880c31d2079299000b036c6ae742dc695a5b19Marco Nelissen static sp<IMediaSource> wrap( 307d880c31d2079299000b036c6ae742dc695a5b19Marco Nelissen const sp<RemoteMediaExtractor> &extractor, 313d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen MediaTrack *source, 327d880c31d2079299000b036c6ae742dc695a5b19Marco Nelissen const sp<RefBase> &plugin); 33ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang virtual ~RemoteMediaSource(); 34ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang virtual status_t start(MetaData *params = NULL); 35ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang virtual status_t stop(); 36ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang virtual sp<MetaData> getFormat(); 37ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang virtual status_t read( 381889c3edad32995c0cf26ae2248fe7c957b7ec84Dongwon Kang MediaBufferBase **buffer, 39d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang const MediaSource::ReadOptions *options = NULL); 40ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang virtual status_t pause(); 41ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang virtual status_t setStopTimeUs(int64_t stopTimeUs); 42ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang 43ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kangprivate: 447d880c31d2079299000b036c6ae742dc695a5b19Marco Nelissen sp<RemoteMediaExtractor> mExtractor; 453d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen MediaTrack *mSource; 465e1897bbd25d8353d9567b746ce50d4b80d30564Dongwon Kang sp<RefBase> mExtractorPlugin; 47ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang 487d880c31d2079299000b036c6ae742dc695a5b19Marco Nelissen explicit RemoteMediaSource( 497d880c31d2079299000b036c6ae742dc695a5b19Marco Nelissen const sp<RemoteMediaExtractor> &extractor, 503d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen MediaTrack *source, 517d880c31d2079299000b036c6ae742dc695a5b19Marco Nelissen const sp<RefBase> &plugin); 52ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang 53ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang DISALLOW_EVIL_CONSTRUCTORS(RemoteMediaSource); 54ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang}; 55ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang 56ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang} // namespace android 57ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang 58ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang#endif // REMOTE_MEDIA_SOURCE_H_ 59