LCOV - code coverage report
Current view: top level - image/decoders - EXIF.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 9 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 4 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* This Source Code Form is subject to the terms of the Mozilla Public
       3             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       4             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       5             : 
       6             : #ifndef mozilla_image_decoders_EXIF_h
       7             : #define mozilla_image_decoders_EXIF_h
       8             : 
       9             : #include <stdint.h>
      10             : #include "nsDebug.h"
      11             : 
      12             : #include "Orientation.h"
      13             : 
      14             : namespace mozilla {
      15             : namespace image {
      16             : 
      17             : enum class ByteOrder : uint8_t {
      18             :   Unknown,
      19             :   LittleEndian,
      20             :   BigEndian
      21             : };
      22             : 
      23             : struct EXIFData
      24             : {
      25           0 :   EXIFData() { }
      26           0 :   explicit EXIFData(Orientation aOrientation) : orientation(aOrientation) { }
      27             : 
      28             :   const Orientation orientation;
      29             : };
      30             : 
      31             : class EXIFParser
      32             : {
      33             : public:
      34             :   static EXIFData
      35           0 :   Parse(const uint8_t* aData, const uint32_t aLength)
      36             :   {
      37           0 :     EXIFParser parser;
      38           0 :     return parser.ParseEXIF(aData, aLength);
      39             :   }
      40             : 
      41             : private:
      42           0 :   EXIFParser()
      43           0 :     : mStart(nullptr)
      44             :     , mCurrent(nullptr)
      45             :     , mLength(0)
      46             :     , mRemainingLength(0)
      47           0 :     , mByteOrder(ByteOrder::Unknown)
      48           0 :   { }
      49             : 
      50             :   EXIFData ParseEXIF(const uint8_t* aData, const uint32_t aLength);
      51             :   bool ParseEXIFHeader();
      52             :   bool ParseTIFFHeader(uint32_t& aIFD0OffsetOut);
      53             :   bool ParseIFD0(Orientation& aOrientationOut);
      54             :   bool ParseOrientation(uint16_t aType, uint32_t aCount, Orientation& aOut);
      55             : 
      56             :   bool Initialize(const uint8_t* aData, const uint32_t aLength);
      57             :   void Advance(const uint32_t aDistance);
      58             :   void JumpTo(const uint32_t aOffset);
      59             : 
      60             :   bool MatchString(const char* aString, const uint32_t aLength);
      61             :   bool MatchUInt16(const uint16_t aValue);
      62             :   bool ReadUInt16(uint16_t& aOut);
      63             :   bool ReadUInt32(uint32_t& aOut);
      64             : 
      65             :   const uint8_t* mStart;
      66             :   const uint8_t* mCurrent;
      67             :   uint32_t       mLength;
      68             :   uint32_t       mRemainingLength;
      69             :   ByteOrder      mByteOrder;
      70             : };
      71             : 
      72             : } // namespace image
      73             : } // namespace mozilla
      74             : 
      75             : #endif // mozilla_image_decoders_EXIF_h

Generated by: LCOV version 1.13