Home | History | Annotate | Download | only in mp4
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef MEDIA_FORMATS_MP4_AVC_H_
      6 #define MEDIA_FORMATS_MP4_AVC_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/basictypes.h"
     11 #include "media/base/media_export.h"
     12 
     13 namespace media {
     14 
     15 struct SubsampleEntry;
     16 
     17 namespace mp4 {
     18 
     19 struct AVCDecoderConfigurationRecord;
     20 
     21 class MEDIA_EXPORT AVC {
     22  public:
     23   static bool ConvertFrameToAnnexB(int length_size, std::vector<uint8>* buffer);
     24 
     25   // Inserts the SPS & PPS data from |avc_config| into |buffer|.
     26   // |buffer| is expected to contain AnnexB conformant data.
     27   // |subsamples| contains the SubsampleEntry info if |buffer| contains
     28   // encrypted data.
     29   // Returns true if the param sets were successfully inserted.
     30   static bool InsertParamSetsAnnexB(
     31       const AVCDecoderConfigurationRecord& avc_config,
     32       std::vector<uint8>* buffer,
     33       std::vector<SubsampleEntry>* subsamples);
     34 
     35   static bool ConvertConfigToAnnexB(
     36       const AVCDecoderConfigurationRecord& avc_config,
     37       std::vector<uint8>* buffer,
     38       std::vector<SubsampleEntry>* subsamples);
     39 
     40   // Verifies that the contents of |buffer| conform to
     41   // Section 7.4.1.2.3 of ISO/IEC 14496-10.
     42   // |subsamples| contains the information about what parts of the buffer are
     43   // encrypted and which parts are clear.
     44   // Returns true if |buffer| contains conformant Annex B data
     45   // TODO(acolwell): Remove the std::vector version when we can use,
     46   // C++11's std::vector<T>::data() method.
     47   static bool IsValidAnnexB(const std::vector<uint8>& buffer,
     48                             const std::vector<SubsampleEntry>& subsamples);
     49   static bool IsValidAnnexB(const uint8* buffer, size_t size,
     50                             const std::vector<SubsampleEntry>& subsamples);
     51 };
     52 
     53 }  // namespace mp4
     54 }  // namespace media
     55 
     56 #endif  // MEDIA_FORMATS_MP4_AVC_H_
     57