// Copyright 2014 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_FORMATS_WEBM_WEBM_AUDIO_CLIENT_H_
#define MEDIA_FORMATS_WEBM_WEBM_AUDIO_CLIENT_H_

#include <stdint.h>

#include <string>
#include <vector>

#include "base/macros.h"
#include "media/base/encryption_scheme.h"
#include "media/base/media_log.h"
#include "media/formats/webm/webm_parser.h"

namespace media {
class AudioDecoderConfig;

// Helper class used to parse an Audio element inside a TrackEntry element.
class WebMAudioClient : public WebMParserClient {
 public:
  explicit WebMAudioClient(MediaLog* media_log);

  WebMAudioClient(const WebMAudioClient&) = delete;
  WebMAudioClient& operator=(const WebMAudioClient&) = delete;

  ~WebMAudioClient() override;

  // Reset this object's state so it can process a new audio track element.
  void Reset();

  // Initialize |config| with the data in |codec_id|, |codec_private|,
  // |encryption_scheme| and the fields parsed from the last audio track element
  // this object was used to parse.
  // Returns true if |config| was successfully initialized.
  // Returns false if there was unexpected values in the provided parameters or
  // audio track element fields.
  bool InitializeConfig(const std::string& codec_id,
                        const std::vector<uint8_t>& codec_private,
                        const int64_t seek_preroll,
                        const int64_t codec_delay,
                        EncryptionScheme encryption_scheme,
                        AudioDecoderConfig* config);

 private:
  // WebMParserClient implementation.
  bool OnUInt(int id, int64_t val) override;
  bool OnFloat(int id, double val) override;

  MediaLog* media_log_;
  int channels_;
  double samples_per_second_;
  double output_samples_per_second_;
};

}  // namespace media

#endif  // MEDIA_FORMATS_WEBM_WEBM_AUDIO_CLIENT_H_
