| Index: services/media/framework/parts/demux.h
|
| diff --git a/services/media/framework/parts/demux.h b/services/media/framework/parts/demux.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a522cda0925ce6a714d2d267a8dbaf68b713935e
|
| --- /dev/null
|
| +++ b/services/media/framework/parts/demux.h
|
| @@ -0,0 +1,77 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef SERVICES_MEDIA_FRAMEWORK_PARTS_DEMUX_H_
|
| +#define SERVICES_MEDIA_FRAMEWORK_PARTS_DEMUX_H_
|
| +
|
| +#include <memory>
|
| +#include <vector>
|
| +
|
| +#include "services/media/framework/metadata.h"
|
| +#include "services/media/framework/models/multistream_packet_source.h"
|
| +#include "services/media/framework/packet.h"
|
| +#include "services/media/framework/parts/reader.h"
|
| +#include "services/media/framework/result.h"
|
| +#include "services/media/framework/stream_type.h"
|
| +
|
| +namespace mojo {
|
| +namespace media {
|
| +
|
| +class Demux;
|
| +
|
| +typedef SharedPtr<Demux, MultiStreamPacketSource> DemuxPtr;
|
| +
|
| +// Abstract base class for sources that parse input from a reader and
|
| +// produce one or more output streams.
|
| +class Demux : public MultiStreamPacketSource {
|
| + public:
|
| + // Represents a stream produced by the demux.
|
| + class DemuxStream {
|
| + // TODO(dalesat): Replace this class with stream_type_, unless more stuff
|
| + // needs to be added.
|
| + public:
|
| + virtual ~DemuxStream() {}
|
| +
|
| + virtual uint32_t index() const = 0;
|
| +
|
| + virtual StreamTypePtr stream_type() const = 0;
|
| + };
|
| +
|
| + // Creates a Demux object for a given reader.
|
| + static Result Create(ReaderPtr reader, DemuxPtr* demux_out);
|
| +
|
| + ~Demux() override {}
|
| +
|
| + // TODO(dalesat): Don't let the demux talk to the reader. We're doing it this
|
| + // way now because of ffmpeg's synchronous read call. Ideally, the demux
|
| + // would tell its owner how much data it needs from the reader, and the
|
| + // owner would later hand over the data and possibly get a packet back.
|
| +
|
| + // TODO(dalesat): Implement seek, etc.
|
| +
|
| + // TODO(dalesat): Make the demux use an allocator. Ffmpeg demuxes don't
|
| + // support this.
|
| +
|
| + // Initializes the demux.
|
| + virtual Result Init(ReaderPtr reader) = 0;
|
| +
|
| + // Gets the current metadata.
|
| + virtual MetadataPtr metadata() const = 0;
|
| +
|
| + // Gets the stream collection.
|
| + virtual const std::vector<DemuxStream*>& streams() const = 0;
|
| +
|
| + // MultiStreamProducer implementation (deferred to subclasses).
|
| + // bool can_accept_allocator(uint32_t stream_index) const override;
|
| + // void set_allocator(uint32_t stream_index, Allocator* allocator) override;
|
| +
|
| + // MultiStreamPacketSource implementation (deferred to subclasses).
|
| + // uint32_t stream_count() const override;
|
| + // PacketPtr PullPacket(uint32_t* stream_index_out) override;
|
| +};
|
| +
|
| +} // namespace media
|
| +} // namespace mojo
|
| +
|
| +#endif // SERVICES_MEDIA_FRAMEWORK_PARTS_DEMUX_H_
|
|
|