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; 36da7ff5321539ac07ec76d0d03bd1b9b09a1823bfAndreas Huber 37da7ff5321539ac07ec76d0d03bd1b9b09a1823bfAndreas Huber enum { 38da7ff5321539ac07ec76d0d03bd1b9b09a1823bfAndreas Huber // Video PES packets contain exactly one (aligned) access unit. 39da7ff5321539ac07ec76d0d03bd1b9b09a1823bfAndreas Huber kFlagAlignedVideoData = 1, 40da7ff5321539ac07ec76d0d03bd1b9b09a1823bfAndreas Huber }; 41da7ff5321539ac07ec76d0d03bd1b9b09a1823bfAndreas Huber virtual uint32_t flags() const { return 0; } 42e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber}; 43e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 44e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huberstruct IStreamListener : public IInterface { 45e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber DECLARE_META_INTERFACE(StreamListener); 46e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 47e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber enum Command { 4814acc736e336cbd6026df781d4f411e908831815Andreas Huber EOS, 49e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber DISCONTINUITY, 50e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber }; 51e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 52e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber virtual void queueBuffer(size_t index, size_t size) = 0; 5314acc736e336cbd6026df781d4f411e908831815Andreas Huber 5432f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber // When signalling a discontinuity you can optionally 5532f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber // specify an int64_t PTS timestamp in "msg". 5632f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber // If present, rendering of data following the discontinuity 5732f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber // will be suppressed until media time reaches this timestamp. 5832f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber static const char *const kKeyResumeAtPTS; 5932f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber 6042e549e4ab54802d788c43e3a04a85b7a1a95e97Andreas Huber // When signalling a discontinuity you can optionally 61bfcc8d8ab7c56bc013bd221a29e1ecf3a6390813Andreas Huber // specify the type(s) of discontinuity, i.e. if the 62bfcc8d8ab7c56bc013bd221a29e1ecf3a6390813Andreas Huber // audio format has changed, the video format has changed, 63bfcc8d8ab7c56bc013bd221a29e1ecf3a6390813Andreas Huber // time has jumped or any combination thereof. 64bfcc8d8ab7c56bc013bd221a29e1ecf3a6390813Andreas Huber // To do so, include a non-zero int32_t value 65bfcc8d8ab7c56bc013bd221a29e1ecf3a6390813Andreas Huber // under the key "kKeyDiscontinuityMask" when issuing the DISCONTINUITY 6642e549e4ab54802d788c43e3a04a85b7a1a95e97Andreas Huber // command. 67bfcc8d8ab7c56bc013bd221a29e1ecf3a6390813Andreas Huber // If there is a change in audio/video format, The new logical stream 68bfcc8d8ab7c56bc013bd221a29e1ecf3a6390813Andreas Huber // must start with proper codec initialization 6942e549e4ab54802d788c43e3a04a85b7a1a95e97Andreas Huber // information for playback to continue, i.e. SPS and PPS in the case 7042e549e4ab54802d788c43e3a04a85b7a1a95e97Andreas Huber // of AVC video etc. 71bfcc8d8ab7c56bc013bd221a29e1ecf3a6390813Andreas Huber // If this key is not present, only a time discontinuity is assumed. 72bfcc8d8ab7c56bc013bd221a29e1ecf3a6390813Andreas Huber // The value should be a bitmask of values from 73bfcc8d8ab7c56bc013bd221a29e1ecf3a6390813Andreas Huber // ATSParser::DiscontinuityType. 74bfcc8d8ab7c56bc013bd221a29e1ecf3a6390813Andreas Huber static const char *const kKeyDiscontinuityMask; 7542e549e4ab54802d788c43e3a04a85b7a1a95e97Andreas Huber 76b7c8e91880463ff4981e3e53e98e45d68e2fe374Andreas Huber // Optionally signalled as part of a discontinuity that includes 77b7c8e91880463ff4981e3e53e98e45d68e2fe374Andreas Huber // DISCONTINUITY_TIME. It indicates the media time (in us) to be associated 78b7c8e91880463ff4981e3e53e98e45d68e2fe374Andreas Huber // with the next PTS occuring in the stream. The value is of type int64_t. 79b7c8e91880463ff4981e3e53e98e45d68e2fe374Andreas Huber static const char *const kKeyMediaTimeUs; 80b7c8e91880463ff4981e3e53e98e45d68e2fe374Andreas Huber 8114acc736e336cbd6026df781d4f411e908831815Andreas Huber virtual void issueCommand( 8214acc736e336cbd6026df781d4f411e908831815Andreas Huber Command cmd, bool synchronous, const sp<AMessage> &msg = NULL) = 0; 83e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber}; 84e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 85e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber//////////////////////////////////////////////////////////////////////////////// 86e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 87e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huberstruct BnStreamSource : public BnInterface<IStreamSource> { 88e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber virtual status_t onTransact( 89e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 90e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber uint32_t flags = 0); 91e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber}; 92e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 93e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huberstruct BnStreamListener : public BnInterface<IStreamListener> { 94e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber virtual status_t onTransact( 95e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 96e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber uint32_t flags = 0); 97e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber}; 98e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 99e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber} // namespace android 100e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 101e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber#endif // ANDROID_ISTREAMSOURCE_H_ 102