// Copyright 2015 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_BITSTREAM_CONVERTER_H_
#define MEDIA_FORMATS_MP4_BITSTREAM_CONVERTER_H_

#include <stdint.h>

#include <vector>

#include "base/memory/ref_counted.h"
#include "base/optional.h"
#include "media/base/media_export.h"

namespace media {

struct SubsampleEntry;

namespace mp4 {

// BitstreamConverter provides a unified interface for performing some common
// bitstream conversions (e.g. H.264 MP4 bitstream to Annex B, and elementary
// AAC stream to ADTS).
class MEDIA_EXPORT BitstreamConverter
    : public base::RefCountedThreadSafe<BitstreamConverter> {
 public:
  // Describes the result of Analyze(). Not all analyses are implemented or
  // enabled across mp4::BitstreamConverter implementations, hence the use of
  // base::Optional<>.
  struct MEDIA_EXPORT AnalysisResult {
    AnalysisResult();
    AnalysisResult(const AnalysisResult&);
    ~AnalysisResult();

    base::Optional<bool> is_conformant;
    base::Optional<bool> is_keyframe;
  };

  // Converts a single frame/buffer |frame_buf| into the output format.
  // Returns true iff the conversion was successful.
  // |frame_buf| is an input/output parameter, it contains input frame data and
  // contains converted output data if conversion was successful.
  // |is_keyframe| indicates whether it's a key frame or not.
  // |subsamples| is an input/output parameter that contains CENC subsample
  // information. The conversion code should |subsamples| to determine if parts
  // of input frame are encrypted and should update |subsamples| if necessary,
  // to make sure it correctly describes the converted output frame. See
  // SubsampleEntry definition in media/base/decrypt_config.h for more info.
  // |analysis_result| is an output parameter that contains the AnalysisResult
  // found during conversion.
  virtual bool ConvertAndAnalyzeFrame(
      std::vector<uint8_t>* frame_buf,
      bool is_keyframe,
      std::vector<SubsampleEntry>* subsamples,
      AnalysisResult* analysis_result) const = 0;

 protected:
  friend class base::RefCountedThreadSafe<BitstreamConverter>;
  virtual ~BitstreamConverter();

  // Inspects an already converted frame for conformance. If conformant,
  // inspects further to see if the converted frame appears to be a keyframe.
  // Note, the checks may not be exhaustive (or implemented at all).
  virtual AnalysisResult Analyze(
      std::vector<uint8_t>* frame_buf,
      std::vector<SubsampleEntry>* subsamples) const = 0;
};

}  // namespace mp4
}  // namespace media

#endif  // MEDIA_FORMATS_MP4_BITSTREAM_CONVERTER_H_
