IStreamSource.h revision 32f3cefa373cd55e63deda36ca9d07c7fe22eaaf
1e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber/*
2e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber * Copyright (C) 2010 The Android Open Source Project
3e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber *
4e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber * you may not use this file except in compliance with the License.
6e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber * You may obtain a copy of the License at
7e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber *
8e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber *
10e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber * Unless required by applicable law or agreed to in writing, software
11e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber * See the License for the specific language governing permissions and
14e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber * limitations under the License.
15e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber */
16e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
17e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber#ifndef ANDROID_ISTREAMSOURCE_H_
18e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
19e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber#define ANDROID_ISTREAMSOURCE_H_
20e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
21e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber#include <binder/IInterface.h>
22e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
23e2b1028852120bcfded33b8f06f66b780437fe92Andreas Hubernamespace android {
24e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
2514acc736e336cbd6026df781d4f411e908831815Andreas Huberstruct AMessage;
26e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huberstruct IMemory;
27e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huberstruct IStreamListener;
28e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
29e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huberstruct IStreamSource : public IInterface {
30e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber    DECLARE_META_INTERFACE(StreamSource);
31e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
32e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber    virtual void setListener(const sp<IStreamListener> &listener) = 0;
33e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber    virtual void setBuffers(const Vector<sp<IMemory> > &buffers) = 0;
34e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
35e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber    virtual void onBufferAvailable(size_t index) = 0;
36e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber};
37e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
38e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huberstruct IStreamListener : public IInterface {
39e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber    DECLARE_META_INTERFACE(StreamListener);
40e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
41e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber    enum Command {
4214acc736e336cbd6026df781d4f411e908831815Andreas Huber        EOS,
43e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber        DISCONTINUITY,
44e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber    };
45e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
46e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber    virtual void queueBuffer(size_t index, size_t size) = 0;
4714acc736e336cbd6026df781d4f411e908831815Andreas Huber
4832f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber    // When signalling a discontinuity you can optionally
4932f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber    // specify an int64_t PTS timestamp in "msg".
5032f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber    // If present, rendering of data following the discontinuity
5132f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber    // will be suppressed until media time reaches this timestamp.
5232f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber    static const char *const kKeyResumeAtPTS;
5332f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber
5414acc736e336cbd6026df781d4f411e908831815Andreas Huber    virtual void issueCommand(
5514acc736e336cbd6026df781d4f411e908831815Andreas Huber            Command cmd, bool synchronous, const sp<AMessage> &msg = NULL) = 0;
56e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber};
57e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
58e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber////////////////////////////////////////////////////////////////////////////////
59e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
60e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huberstruct BnStreamSource : public BnInterface<IStreamSource> {
61e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber    virtual status_t onTransact(
62e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber            uint32_t code, const Parcel &data, Parcel *reply,
63e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber            uint32_t flags = 0);
64e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber};
65e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
66e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huberstruct BnStreamListener : public BnInterface<IStreamListener> {
67e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber    virtual status_t onTransact(
68e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber            uint32_t code, const Parcel &data, Parcel *reply,
69e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber            uint32_t flags = 0);
70e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber};
71e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
72e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber}  // namespace android
73e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber
74e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber#endif  // ANDROID_ISTREAMSOURCE_H_
75