// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Implements the Demuxer interface using FFmpeg's libavformat. At this time // will support demuxing any audio/video format thrown at it. The streams // output mime types audio/x-ffmpeg and video/x-ffmpeg and include an integer // key FFmpegCodecID which contains the CodecID enumeration value. The CodecIDs // can be used to create and initialize the corresponding FFmpeg decoder. // // FFmpegDemuxer sets the duration of pipeline during initialization by using // the duration of the longest audio/video stream. // // NOTE: since FFmpegDemuxer reads packets sequentially without seeking, media // files with very large drift between audio/video streams may result in // excessive memory consumption. // // When stopped, FFmpegDemuxer and FFmpegDemuxerStream release all callbacks // and buffered packets. Reads from a stopped FFmpegDemuxerStream will not be // replied to. #ifndef MEDIA_FILTERS_FFMPEG_DEMUXER_H_ #define MEDIA_FILTERS_FFMPEG_DEMUXER_H_ #include <stddef.h> #include <stdint.h> #include <memory> #include <string> #include <vector> #include "base/containers/flat_map.h" #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/task/sequenced_task_runner.h" #include "base/time/time.h" #include "media/base/audio_decoder_config.h" #include "media/base/decoder_buffer_queue.h" #include "media/base/demuxer.h" #include "media/base/media_log.h" #include "media/base/pipeline_status.h" #include "media/base/timestamp_constants.h" #include "media/base/video_decoder_config.h" #include "media/ffmpeg/scoped_av_packet.h" #include "media/filters/blocking_url_protocol.h" #include "media/media_buildflags.h" // FFmpeg forward declarations. struct AVFormatContext; struct AVRational; struct AVStream; namespace media { class MediaLog; class FFmpegBitstreamConverter; class FFmpegDemuxer; class FFmpegGlue; class MEDIA_EXPORT FFmpegDemuxerStream : public DemuxerStream { … }; class MEDIA_EXPORT FFmpegDemuxer : public Demuxer { … }; } // namespace media #endif // MEDIA_FILTERS_FFMPEG_DEMUXER_H_