123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- // Copyright (c) 2013 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 MEDIA_BASE_FAKE_DEMUXER_STREAM_H_
- #define MEDIA_BASE_FAKE_DEMUXER_STREAM_H_
- #include "base/memory/ref_counted.h"
- #include "base/time/time.h"
- #include "media/base/audio_decoder_config.h"
- #include "media/base/demuxer_stream.h"
- #include "media/base/media_resource.h"
- #include "media/base/video_decoder_config.h"
- namespace base {
- class SingleThreadTaskRunner;
- } // namespace base
- namespace media {
- class FakeDemuxerStream : public DemuxerStream {
- public:
- // Constructs an object that outputs |num_configs| different configs in
- // sequence with |num_frames_in_one_config| buffers for each config. The
- // output buffers are encrypted if |is_encrypted| is true.
- FakeDemuxerStream(int num_configs,
- int num_buffers_in_one_config,
- bool is_encrypted);
- // Constructs an object that outputs |num_configs| different configs in
- // sequence with |num_frames_in_one_config| buffers for each config. The
- // output buffers are encrypted if |is_encrypted| is true.
- // The starting config |coded_size| is specified by the
- // |start_coded_size| parameter, and each config change increases/decreases it
- // by the |coded_size_delta| parameter.
- // The returned config always has equal |coded_size| and |visible_rect|
- // properties.
- FakeDemuxerStream(int num_configs,
- int num_buffers_in_one_config,
- bool is_encrypted,
- gfx::Size start_coded_size,
- gfx::Vector2dF coded_size_delta);
- FakeDemuxerStream(const FakeDemuxerStream&) = delete;
- FakeDemuxerStream& operator=(const FakeDemuxerStream&) = delete;
- ~FakeDemuxerStream() override;
- // DemuxerStream implementation.
- void Read(ReadCB read_cb) override;
- AudioDecoderConfig audio_decoder_config() override;
- VideoDecoderConfig video_decoder_config() override;
- Type type() const override;
- bool SupportsConfigChanges() override;
- void Initialize();
- int num_buffers_returned() const { return num_buffers_returned_; }
- // Upon the next read, holds the read callback until SatisfyRead() or Reset()
- // is called.
- void HoldNextRead();
- // Upon the next config change read, holds the read callback until
- // SatisfyRead() or Reset() is called. If there is no config change any more,
- // no read will be held.
- void HoldNextConfigChangeRead();
- // Satisfies the pending read with the next scheduled status and buffer.
- void SatisfyRead();
- // Satisfies pending read request and then holds the following read.
- void SatisfyReadAndHoldNext();
- // Satisfies the pending read (if any) with kAborted and NULL. This call
- // always clears |hold_next_read_|.
- void Reset();
- // Satisfies the pending read (if any) with kError and NULL. This call
- // always clears |hold_next_read_|.
- void Error();
- // Reset() this demuxer stream and set the reading position to the start of
- // the stream.
- void SeekToStart();
- // Sets further read requests to return EOS buffers.
- void SeekToEndOfStream();
- base::TimeDelta duration() const { return duration_; }
- private:
- void UpdateVideoDecoderConfig();
- void DoRead();
- scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
- const int num_configs_;
- const int num_buffers_in_one_config_;
- const bool config_changes_;
- const bool is_encrypted_;
- const gfx::Size start_coded_size_;
- const gfx::Vector2dF coded_size_delta_;
- int num_configs_left_;
- // Number of frames left with the current decoder config.
- int num_buffers_left_in_current_config_;
- int num_buffers_returned_;
- base::TimeDelta current_timestamp_;
- base::TimeDelta duration_;
- gfx::Size next_size_;
- VideoDecoderConfig video_decoder_config_;
- ReadCB read_cb_;
- int next_read_num_;
- // Zero-based number indicating which read operation should be held. -1 means
- // no read shall be held.
- int read_to_hold_;
- };
- class FakeMediaResource : public MediaResource {
- public:
- // Note: FakeDemuxerStream currently only supports a fake video DemuxerStream.
- FakeMediaResource(int num_video_configs,
- int num_video_buffers_in_one_config,
- bool is_video_encrypted);
- FakeMediaResource(const FakeMediaResource&) = delete;
- FakeMediaResource& operator=(const FakeMediaResource&) = delete;
- ~FakeMediaResource() override;
- // MediaResource implementation.
- std::vector<DemuxerStream*> GetAllStreams() override;
- private:
- FakeDemuxerStream fake_video_stream_;
- };
- } // namespace media
- #endif // MEDIA_BASE_FAKE_DEMUXER_STREAM_H_
|