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