// Copyright 2020 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_MP4_H264_ANNEX_B_TO_AVC_BITSTREAM_CONVERTER_H_
#define MEDIA_FORMATS_MP4_H264_ANNEX_B_TO_AVC_BITSTREAM_CONVERTER_H_

#include <stdint.h>

#include <vector>

#include "base/containers/flat_map.h"
#include "base/containers/span.h"
#include "base/macros.h"
#include "media/base/media_export.h"
#include "media/base/status.h"
#include "media/formats/mp4/box_definitions.h"
#include "media/video/h264_parser.h"

namespace media {

// H264AnnexBToAvcBitstreamConverter is a class to convert H.264 bitstream from
// Annex B (ISO/IEC 14496-10) to AVC (as specified in ISO/IEC 14496-15).
class MEDIA_EXPORT H264AnnexBToAvcBitstreamConverter {
 public:
  H264AnnexBToAvcBitstreamConverter();

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

  ~H264AnnexBToAvcBitstreamConverter();

  // Converts a video chunk from a format with in-place decoder configuration
  // into a format where configuration needs to be sent separately.
  //
  // |input| - where to read the data from
  // |output| - where to put the converted video data
  // If error kH264BufferTooSmall is returned, it means that |output| was not
  // big enough to contain a converted video chunk. In this case |size_out|
  // is populated.
  // |config_changed_out| is set to True if the video chunk
  // processed by this call contained decoder configuration information.
  // In this case latest configuration information can be obtained
  // from GetCurrentConfig().
  // |size_out| - number of bytes written to |output|, or desired size of
  // |output| if it's too small.
  Status ConvertChunk(base::span<const uint8_t> input,
                      base::span<uint8_t> output,
                      bool* config_changed_out,
                      size_t* size_out);

  // Returns the latest version of decoder configuration, found in converted
  // video chunks.
  const mp4::AVCDecoderConfigurationRecord& GetCurrentConfig();

 private:
  H264Parser parser_;
  mp4::AVCDecoderConfigurationRecord config_;

  using blob = std::vector<uint8_t>;
  base::flat_map<int, blob> id2sps_;
  base::flat_map<int, blob> id2pps_;

  int active_sps_id_ = -1;
  int active_pps_id_ = -1;
};

}  // namespace media

#endif  // MEDIA_FORMATS_MP4_H264_ANNEX_B_TO_AVC_BITSTREAM_CONVERTER_H_
