12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // 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 "media/base/media_export.h"
- #include "third_party/abseil-cpp/absl/types/optional.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
- // absl::optional<>.
- struct MEDIA_EXPORT AnalysisResult {
- AnalysisResult();
- AnalysisResult(const AnalysisResult&);
- ~AnalysisResult();
- absl::optional<bool> is_conformant;
- absl::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_
|