// 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.

#ifndef GARNET_BIN_MEDIAPLAYER_FFMPEG_FFMPEG_DEMUX_FACTORY_H_
#define GARNET_BIN_MEDIAPLAYER_FFMPEG_FFMPEG_DEMUX_FACTORY_H_

#include "garnet/bin/mediaplayer/demux/demux.h"
#include "garnet/bin/mediaplayer/demux/reader_cache.h"

namespace media_player {

class FfmpegDemuxFactory : public DemuxFactory {
 public:
  // Creates an ffmpeg demux factory.
  static std::unique_ptr<DemuxFactory> Create(
      component::StartupContext* startup_context);

  FfmpegDemuxFactory();

  ~FfmpegDemuxFactory() override;

  // Creates a |Demux| object for a given reader.
  Result CreateDemux(std::shared_ptr<ReaderCache> reader_cache,
                     std::shared_ptr<Demux>* demux_out) override;
};

}  // namespace media_player

#endif  // GARNET_BIN_MEDIAPLAYER_FFMPEG_FFMPEG_DEMUX_FACTORY_H_
