Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: media/filters/ivf_parser.cc

Issue 1269473002: Extract IVF parser from VP8 parser unittest (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compile Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/filters/ivf_parser.h ('k') | media/filters/ivf_parser_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 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 #include "base/logging.h"
6 #include "base/sys_byteorder.h"
7 #include "media/filters/ivf_parser.h"
8
9 namespace media {
10
11 void IvfFileHeader::ByteSwap() {
12 version = base::ByteSwapToLE16(version);
13 header_size = base::ByteSwapToLE16(header_size);
14 fourcc = base::ByteSwapToLE32(fourcc);
15 width = base::ByteSwapToLE16(width);
16 height = base::ByteSwapToLE16(height);
17 timebase_denum = base::ByteSwapToLE32(timebase_denum);
18 timebase_num = base::ByteSwapToLE32(timebase_num);
19 num_frames = base::ByteSwapToLE32(num_frames);
20 unused = base::ByteSwapToLE32(unused);
21 }
22
23 void IvfFrameHeader::ByteSwap() {
24 frame_size = base::ByteSwapToLE32(frame_size);
25 timestamp = base::ByteSwapToLE64(timestamp);
26 }
27
28 IvfParser::IvfParser() : ptr_(nullptr), end_(nullptr) {}
29
30 bool IvfParser::Initialize(const uint8_t* stream,
31 size_t size,
32 IvfFileHeader* file_header) {
33 DCHECK(stream);
34 DCHECK(file_header);
35 ptr_ = stream;
36 end_ = stream + size;
37
38 if (size < sizeof(IvfFileHeader)) {
39 DLOG(ERROR) << "EOF before file header";
40 return false;
41 }
42
43 memcpy(file_header, ptr_, sizeof(IvfFileHeader));
44 file_header->ByteSwap();
45
46 if (memcmp(file_header->signature, kIvfHeaderSignature,
47 sizeof(file_header->signature)) != 0) {
48 DLOG(ERROR) << "IVF signature mismatch";
49 return false;
50 }
51 DLOG_IF(WARNING, file_header->version != 0)
52 << "IVF version unknown: " << file_header->version
53 << ", the parser may not be able to parse correctly";
54 if (file_header->header_size != sizeof(IvfFileHeader)) {
55 DLOG(ERROR) << "IVF file header size mismatch";
56 return false;
57 }
58
59 ptr_ += sizeof(IvfFileHeader);
60
61 return true;
62 }
63
64 bool IvfParser::ParseNextFrame(IvfFrameHeader* frame_header,
65 const uint8_t** payload) {
66 DCHECK(ptr_);
67 DCHECK(payload);
68
69 if (end_ < ptr_ + sizeof(IvfFrameHeader)) {
70 DLOG_IF(ERROR, ptr_ != end_) << "Incomplete frame header";
71 return false;
72 }
73
74 memcpy(frame_header, ptr_, sizeof(IvfFrameHeader));
75 frame_header->ByteSwap();
76 ptr_ += sizeof(IvfFrameHeader);
77
78 if (end_ < ptr_ + frame_header->frame_size) {
79 DLOG(ERROR) << "Not enough frame data";
80 return false;
81 }
82
83 *payload = ptr_;
84 ptr_ += frame_header->frame_size;
85
86 return true;
87 }
88
89 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/ivf_parser.h ('k') | media/filters/ivf_parser_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698