| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2  *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 
| 3  * | 3  * | 
| 4  *  Use of this source code is governed by a BSD-style license | 4  *  Use of this source code is governed by a BSD-style license | 
| 5  *  that can be found in the LICENSE file in the root of the source | 5  *  that can be found in the LICENSE file in the root of the source | 
| 6  *  tree. An additional intellectual property rights grant can be found | 6  *  tree. An additional intellectual property rights grant can be found | 
| 7  *  in the file PATENTS.  All contributing project authors may | 7  *  in the file PATENTS.  All contributing project authors may | 
| 8  *  be found in the AUTHORS file in the root of the source tree. | 8  *  be found in the AUTHORS file in the root of the source tree. | 
| 9  */ | 9  */ | 
| 10 #include "webrtc/modules/video_coding/utility/vp8_header_parser.h" | 10 #include "webrtc/modules/video_coding/utility/vp8_header_parser.h" | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 36 } | 36 } | 
| 37 | 37 | 
| 38 static void VP8LoadNewBytes(VP8BitReader* const br) { | 38 static void VP8LoadNewBytes(VP8BitReader* const br) { | 
| 39   int BITS = 24; | 39   int BITS = 24; | 
| 40   // Read 'BITS' bits at a time. | 40   // Read 'BITS' bits at a time. | 
| 41   if (br->buf_ + sizeof(uint32_t) <= br->buf_end_) { | 41   if (br->buf_ + sizeof(uint32_t) <= br->buf_end_) { | 
| 42     uint32_t bits; | 42     uint32_t bits; | 
| 43     const uint32_t in_bits = *(const uint32_t*)(br->buf_); | 43     const uint32_t in_bits = *(const uint32_t*)(br->buf_); | 
| 44     br->buf_ += BITS >> 3; | 44     br->buf_ += BITS >> 3; | 
| 45 #if defined(WEBRTC_ARCH_BIG_ENDIAN) | 45 #if defined(WEBRTC_ARCH_BIG_ENDIAN) | 
| 46       bits = static_cast<uint32_t>(in_bits); | 46     bits = static_cast<uint32_t>(in_bits); | 
| 47       if (BITS != 8 * sizeof(uint32_t)) | 47     if (BITS != 8 * sizeof(uint32_t)) | 
| 48         bits >>= (8 * sizeof(uint32_t) - BITS); | 48       bits >>= (8 * sizeof(uint32_t) - BITS); | 
| 49 #else | 49 #else | 
| 50       bits = BSwap32(in_bits); | 50     bits = BSwap32(in_bits); | 
| 51       bits >>= 32 - BITS; | 51     bits >>= 32 - BITS; | 
| 52 #endif | 52 #endif | 
| 53     br->value_ = bits | (br->value_ << BITS); | 53     br->value_ = bits | (br->value_ << BITS); | 
| 54     br->bits_ += BITS; | 54     br->bits_ += BITS; | 
| 55   } else { | 55   } else { | 
| 56     VP8LoadFinalBytes(br); | 56     VP8LoadFinalBytes(br); | 
| 57   } | 57   } | 
| 58 } | 58 } | 
| 59 | 59 | 
| 60 static void VP8InitBitReader(VP8BitReader* const br, | 60 static void VP8InitBitReader(VP8BitReader* const br, | 
| 61                              const uint8_t* const start, | 61                              const uint8_t* const start, | 
| 62                              const uint8_t* const end) { | 62                              const uint8_t* const end) { | 
| 63   br->range_   = 255 - 1; | 63   br->range_ = 255 - 1; | 
| 64   br->buf_     = start; | 64   br->buf_ = start; | 
| 65   br->buf_end_ = end; | 65   br->buf_end_ = end; | 
| 66   br->value_   = 0; | 66   br->value_ = 0; | 
| 67   br->bits_    = -8;   // To load the very first 8bits. | 67   br->bits_ = -8;  // To load the very first 8bits. | 
| 68   br->eof_     = 0; | 68   br->eof_ = 0; | 
| 69   VP8LoadNewBytes(br); | 69   VP8LoadNewBytes(br); | 
| 70 } | 70 } | 
| 71 | 71 | 
| 72 // Read a bit with proba 'prob'. | 72 // Read a bit with proba 'prob'. | 
| 73 static int VP8GetBit(VP8BitReader* const br, int prob) { | 73 static int VP8GetBit(VP8BitReader* const br, int prob) { | 
| 74   uint8_t range = br->range_; | 74   uint8_t range = br->range_; | 
| 75   if (br->bits_ < 0) { | 75   if (br->bits_ < 0) { | 
| 76     VP8LoadNewBytes(br); | 76     VP8LoadNewBytes(br); | 
| 77   } | 77   } | 
| 78 | 78 | 
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 115 } | 115 } | 
| 116 | 116 | 
| 117 static void ParseSegmentHeader(VP8BitReader* br) { | 117 static void ParseSegmentHeader(VP8BitReader* br) { | 
| 118   int use_segment = VP8Get(br); | 118   int use_segment = VP8Get(br); | 
| 119   if (use_segment) { | 119   if (use_segment) { | 
| 120     int update_map = VP8Get(br); | 120     int update_map = VP8Get(br); | 
| 121     if (VP8Get(br)) { | 121     if (VP8Get(br)) { | 
| 122       int s; | 122       int s; | 
| 123       VP8Get(br); | 123       VP8Get(br); | 
| 124       for (s = 0; s < NUM_MB_SEGMENTS; ++s) { | 124       for (s = 0; s < NUM_MB_SEGMENTS; ++s) { | 
| 125        VP8Get(br) ? VP8GetSignedValue(br, 7) : 0; | 125         VP8Get(br) ? VP8GetSignedValue(br, 7) : 0; | 
| 126       } | 126       } | 
| 127       for (s = 0; s < NUM_MB_SEGMENTS; ++s) { | 127       for (s = 0; s < NUM_MB_SEGMENTS; ++s) { | 
| 128         VP8Get(br) ? VP8GetSignedValue(br, 6) : 0; | 128         VP8Get(br) ? VP8GetSignedValue(br, 6) : 0; | 
| 129       } | 129       } | 
| 130     } | 130     } | 
| 131     if (update_map) { | 131     if (update_map) { | 
| 132       int s; | 132       int s; | 
| 133       for (s = 0; s < MB_FEATURE_TREE_PROBS; ++s) { | 133       for (s = 0; s < MB_FEATURE_TREE_PROBS; ++s) { | 
| 134         VP8Get(br) ? VP8GetValue(br, 8) : 255; | 134         VP8Get(br) ? VP8GetValue(br, 8) : 255; | 
| 135       } | 135       } | 
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 195     LOG(LS_WARNING) << "Failed to get QP, end of file reached."; | 195     LOG(LS_WARNING) << "Failed to get QP, end of file reached."; | 
| 196     return false; | 196     return false; | 
| 197   } | 197   } | 
| 198   *qp = base_q0; | 198   *qp = base_q0; | 
| 199   return true; | 199   return true; | 
| 200 } | 200 } | 
| 201 | 201 | 
| 202 }  // namespace vp8 | 202 }  // namespace vp8 | 
| 203 | 203 | 
| 204 }  // namespace webrtc | 204 }  // namespace webrtc | 
| OLD | NEW | 
|---|