blob: a8b871bd01460de88a5b1141cb5f9c1c14a00b79 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.media;
// Manages a set of payload buffers for a stream.
// Ordinal range: 0x0200-0x2ff
[FragileBase]
interface StreamBufferSet {
// Adds a payload buffer for stream packets. StreamPacket structs reference
// a payload buffer by ID using the StreamPacket.payload_buffer_id field.
0x0201: AddPayloadBuffer(uint32 id, handle<vmo> payload_buffer);
// Removes a payload buffer.
0x0202: RemovePayloadBuffer(uint32 id);
};
// Consumes a stream of packets.
// Ordinal range: 0x0300-03ff
[FragileBase]
interface StreamSink {
// Sends a packet to this object. The response is sent when this object is
// done with the associated payload memory.
0x0301: SendPacket(StreamPacket packet) -> ();
// Sends a packet to this object. This interface doesn't define how the client
// knows when the sink is done with the associated payload memory. The
// inheriting interface must define that.
0x0302: SendPacketNoReply(StreamPacket packet);
// Indicates the stream has ended.
0x0303: EndOfStream();
// Discards packets previously sent via SendPacket or SendPacketNoReply.
0x0304: DiscardAllPackets() -> ();
0x0305: DiscardAllPacketsNoReply();
};
// Produces a stream of packets.
// Ordinal range: 0x0400-04ff
[FragileBase]
interface StreamSource {
// Delivers a packet produced by this object. Each packet delivered via this
// event must be released with a call to ReleasePacket.
0x0401: -> OnPacketProduced(StreamPacket packet);
// Indicates that the stream has ended.
0x0402: -> OnEndOfStream();
// Releases a packet delivered via OnPacketProduced.
0x0403: ReleasePacket(StreamPacket packet);
// Discards queued packets.
0x0404: DiscardAllPackets() -> ();
0x0405: DiscardAllPacketsNoReply();
};
// A StreamSink that uses StreamBufferSet for buffer management.
interface SimpleStreamSink : StreamSink, StreamBufferSet {
////////////////////////////////////////////////////////////////////////////
// StreamBufferSet methods
////////////////////////////////////////////////////////////////////////////
// StreamSink methods
};
// Describes a packet consumed by StreamSink or produced by StreamSource.
struct StreamPacket {
// Time at which the packet is to be presented, according to the presentation
// clock.
int64 pts = NO_TIMESTAMP;
// ID of the payload buffer used for this packet. When this struct is used
// with StreamBufferSet, this field is the ID of a payload buffer provided
// via StreamBufferSet.AddPayloadBuffer. Other interfaces may define other
// semantics for this field.
uint32 payload_buffer_id;
// Offset of the packet payload in the payload buffer.
uint64 payload_offset;
// Size in bytes of the payload.
uint64 payload_size;
// A collection of flags (see constants below) describing properties of this
// packet.
uint32 flags = 0;
// The buffer configuration associated with this packet. The semantics of
// this field depend on the the interface with which this struct is used.
// In many contexts, this field is not used.
uint64 buffer_config = 0;
// The stream associated with this packet. The semantics of this field
// depend on the the interface with which this struct is used. In many
// contexts, this field is not used.
uint64 stream_id = 0;
};
const uint32 STREAM_PACKET_FLAG_KEY_FRAME = 0x01;
const uint32 STREAM_PACKET_FLAG_DROPPABLE = 0x02;
const uint32 STREAM_PACKET_FLAG_DISCONTINUITY = 0x04;
const int64 NO_TIMESTAMP = 0x7fffffffffffffff;