1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49

media / audio / audio_handler.h [blame]

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef MEDIA_AUDIO_AUDIO_HANDLER_H_
#define MEDIA_AUDIO_AUDIO_HANDLER_H_

#include "base/time/time.h"
#include "media/base/media_export.h"

namespace media {

class AudioBus;

// The implementations of the class are expected to return the decoded audio
// data in order starting from the beginning of the stream via `CopyTo()` until
// reaching the end of the stream.
class MEDIA_EXPORT AudioHandler {
 public:
  AudioHandler() = default;
  AudioHandler(const AudioHandler&) = delete;
  AudioHandler& operator=(const AudioHandler&) = delete;
  virtual ~AudioHandler() = default;

  // The number of frames of `bus` in `CopyTo()`.
  static constexpr int kDefaultFrameCount = 1024;

  // Returns true if the instance of this class can be initialized successfully.
  virtual bool Initialize() = 0;
  virtual int GetNumChannels() const = 0;
  virtual int GetSampleRate() const = 0;
  virtual base::TimeDelta GetDuration() const = 0;

  // Returns true once `CopyTo()` has reached end of stream.
  virtual bool AtEnd() const = 0;

  // Fills `bus` with available audio data. If bus can't be completely filled,
  // this will be reflected in `frames_written`.
  // Notes that this is a stateful function and each call to it will resume
  // where the previous `CopyTo()` stops.
  virtual bool CopyTo(AudioBus* bus, size_t* frames_written) = 0;

  // Restores initial state to the head of the stream.
  virtual void Reset() = 0;
};

}  // namespace media

#endif  // MEDIA_AUDIO_AUDIO_HANDLER_H_