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

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: DKIF 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
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/base/bit_reader.h"
xhwang 2015/08/06 21:56:10 Do you actually use this?
kcwu 2015/08/07 06:20:08 Done.
8 #include "media/filters/ivf_parser.h"
9
10 namespace media {
11
12 void IvfFileHeader::ByteSwap() {
13 version = base::ByteSwapToLE16(version);
14 header_size = base::ByteSwapToLE16(header_size);
15 fourcc = base::ByteSwapToLE32(fourcc);
16 width = base::ByteSwapToLE16(width);
17 height = base::ByteSwapToLE16(height);
18 timebase_denum = base::ByteSwapToLE32(timebase_denum);
19 timebase_num = base::ByteSwapToLE32(timebase_num);
20 num_frames = base::ByteSwapToLE32(num_frames);
21 unused = base::ByteSwapToLE32(unused);
22 }
23
24 void IvfFrameHeader::ByteSwap() {
25 frame_size = base::ByteSwapToLE32(frame_size);
26 timestamp = base::ByteSwapToLE64(timestamp);
27 }
28
29 IvfParser::IvfParser() : ptr_(nullptr), end_(nullptr) {}
30
31 bool IvfParser::Initialize(const uint8_t* stream,
32 size_t size,
33 IvfFileHeader* file_header) {
34 DCHECK(stream);
35 DCHECK(file_header);
36 ptr_ = stream;
37 end_ = stream + size;
38
39 if (size < sizeof(IvfFileHeader)) {
40 DLOG(ERROR) << "EOF before file header";
41 return false;
42 }
43
44 memcpy(file_header, ptr_, sizeof(IvfFileHeader));
45 file_header->ByteSwap();
46
47 if (memcmp(file_header->signature, kIvfHeaderSignature,
48 sizeof(file_header->signature)) != 0) {
49 DLOG(ERROR) << "IVF signature mismatch";
50 return false;
51 }
52 DLOG_IF(WARNING, file_header->version != 0)
53 << "IVF version unknown: " << file_header->version
54 << ", the parser may not be able to parse correctly";
55 if (file_header->header_size != sizeof(IvfFileHeader)) {
56 DLOG(ERROR) << "IVF file header size mismatch";
57 return false;
58 }
59
60 ptr_ += sizeof(IvfFileHeader);
61
62 return true;
63 }
64
65 bool IvfParser::ParseNextFrame(IvfFrameHeader* frame_header,
66 const uint8_t** payload) {
67 DCHECK(ptr_);
68 DCHECK(payload);
69
70 if (end_ < ptr_ + sizeof(IvfFrameHeader)) {
71 DLOG_IF(ERROR, ptr_ != end_) << "Incomplete frame header";
72 return false;
73 }
74
75 memcpy(frame_header, ptr_, sizeof(IvfFrameHeader));
76 frame_header->ByteSwap();
77 ptr_ += sizeof(IvfFrameHeader);
78
79 if (end_ < ptr_ + frame_header->frame_size) {
80 DLOG(ERROR) << "Not enough frame data";
81 return false;
82 }
83
84 *payload = ptr_;
85 ptr_ += frame_header->frame_size;
86
87 return true;
88 }
89
90 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698