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

Side by Side Diff: media/base/mock_ffmpeg.cc

Issue 7587012: Remove mock_ffmpeg and update media unittests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 "media/base/mock_ffmpeg.h"
6
7 #include "base/logging.h"
8 #include "media/ffmpeg/ffmpeg_common.h"
9
10 using ::testing::_;
11 using ::testing::AtMost;
12 using ::testing::DoAll;
13 using ::testing::Return;
14 using ::testing::SaveArg;
15
16 namespace media {
17
18 MockFFmpeg* MockFFmpeg::instance_ = NULL;
19 URLProtocol* MockFFmpeg::protocol_ = NULL;
20
21 MockFFmpeg::MockFFmpeg()
22 : outstanding_packets_(0) {
23 CHECK(instance_ == NULL) << "Only a single MockFFmpeg instance can exist";
24 instance_ = this;
25
26 // If we haven't assigned our static copy of URLProtocol, set up expectations
27 // to catch the URLProtocol registered when the singleton instance of
28 // FFmpegGlue is created.
29 //
30 // TODO(scherkus): this feels gross and I need to think of a way to better
31 // inject/mock singletons.
32 if (!protocol_) {
33 EXPECT_CALL(*this, AVLogSetLevel(AV_LOG_QUIET))
34 .Times(AtMost(1))
35 .WillOnce(Return());
36 EXPECT_CALL(*this, AVCodecInit())
37 .Times(AtMost(1))
38 .WillOnce(Return());
39 EXPECT_CALL(*this, AVRegisterProtocol2(_,_))
40 .Times(AtMost(1))
41 .WillOnce(DoAll(SaveArg<0>(&protocol_), Return(0)));
42 EXPECT_CALL(*this, AVRegisterAll())
43 .Times(AtMost(1))
44 .WillOnce(Return());
45 }
46 }
47
48 MockFFmpeg::~MockFFmpeg() {
49 CHECK(!outstanding_packets_)
50 << "MockFFmpeg destroyed with outstanding packets";
51 CHECK(instance_);
52 instance_ = NULL;
53 }
54
55 void MockFFmpeg::inc_outstanding_packets() {
56 ++outstanding_packets_;
57 }
58
59 void MockFFmpeg::dec_outstanding_packets() {
60 CHECK(outstanding_packets_ > 0);
61 --outstanding_packets_;
62 }
63
64 // static
65 MockFFmpeg* MockFFmpeg::get() {
66 return instance_;
67 }
68
69 // static
70 URLProtocol* MockFFmpeg::protocol() {
71 return protocol_;
72 }
73
74 // static
75 void MockFFmpeg::DestructPacket(AVPacket* packet) {
76 delete [] packet->data;
77 packet->data = NULL;
78 packet->size = 0;
79 }
80
81 // FFmpeg stubs that delegate to the FFmpegMock instance.
82 extern "C" {
83 void avcodec_init() {
84 MockFFmpeg::get()->AVCodecInit();
85 }
86
87 int av_register_protocol2(URLProtocol* protocol, int size) {
88 return MockFFmpeg::get()->AVRegisterProtocol2(protocol, size);
89 }
90
91 void av_register_all() {
92 MockFFmpeg::get()->AVRegisterAll();
93 }
94
95 int av_lockmgr_register(int (*cb)(void**, enum AVLockOp)) {
96 // Here |mock| may be NULL when this function is called from ~FFmpegGlue().
97 if (MockFFmpeg::get()) {
98 return MockFFmpeg::get()->AVRegisterLockManager(cb);
99 }
100 return 0;
101 }
102
103 AVCodec* avcodec_find_decoder(enum CodecID id) {
104 return MockFFmpeg::get()->AVCodecFindDecoder(id);
105 }
106
107 int avcodec_open(AVCodecContext* avctx, AVCodec* codec) {
108 return MockFFmpeg::get()->AVCodecOpen(avctx, codec);
109 }
110
111 int avcodec_close(AVCodecContext* avctx) {
112 return MockFFmpeg::get()->AVCodecClose(avctx);
113 }
114
115 void avcodec_flush_buffers(AVCodecContext* avctx) {
116 return MockFFmpeg::get()->AVCodecFlushBuffers(avctx);
117 }
118
119 AVCodecContext* avcodec_alloc_context() {
120 return MockFFmpeg::get()->AVCodecAllocContext();
121 }
122
123 AVFrame* avcodec_alloc_frame() {
124 return MockFFmpeg::get()->AVCodecAllocFrame();
125 }
126
127 int avcodec_decode_video2(AVCodecContext* avctx, AVFrame* picture,
128 int* got_picture_ptr, AVPacket* avpkt) {
129 return MockFFmpeg::get()->
130 AVCodecDecodeVideo2(avctx, picture, got_picture_ptr, avpkt);
131 }
132
133 AVBitStreamFilterContext* av_bitstream_filter_init(const char* name) {
134 return MockFFmpeg::get()->AVBitstreamFilterInit(name);
135 }
136
137 int av_bitstream_filter_filter(AVBitStreamFilterContext* bsfc,
138 AVCodecContext* avctx,
139 const char* args,
140 uint8_t** poutbuf,
141 int* poutbuf_size,
142 const uint8_t* buf,
143 int buf_size,
144 int keyframe) {
145 return MockFFmpeg::get()->
146 AVBitstreamFilterFilter(bsfc, avctx, args, poutbuf, poutbuf_size, buf,
147 buf_size, keyframe);
148 }
149
150 void av_bitstream_filter_close(AVBitStreamFilterContext* bsf) {
151 return MockFFmpeg::get()->AVBitstreamFilterClose(bsf);
152 }
153
154 int av_open_input_file(AVFormatContext** format, const char* filename,
155 AVInputFormat* input_format, int buffer_size,
156 AVFormatParameters* parameters) {
157 return MockFFmpeg::get()->AVOpenInputFile(format, filename,
158 input_format, buffer_size,
159 parameters);
160 }
161
162 void av_close_input_file(AVFormatContext* format) {
163 MockFFmpeg::get()->AVCloseInputFile(format);
164 }
165
166 int av_find_stream_info(AVFormatContext* format) {
167 return MockFFmpeg::get()->AVFindStreamInfo(format);
168 }
169
170 int64 av_rescale_q(int64 a, AVRational bq, AVRational cq) {
171 // Because this is a math function there's little point in mocking it, so we
172 // implement a cheap version that's capable of overflowing.
173 int64 num = bq.num * cq.den;
174 int64 den = cq.num * bq.den;
175
176 // Rescale a by num/den. The den / 2 is for rounding.
177 return (a * num + den / 2) / den;
178 }
179
180 int av_read_frame(AVFormatContext* format, AVPacket* packet) {
181 return MockFFmpeg::get()->AVReadFrame(format, packet);
182 }
183
184 int av_seek_frame(AVFormatContext *format, int stream_index, int64_t timestamp,
185 int flags) {
186 return MockFFmpeg::get()->AVSeekFrame(format, stream_index, timestamp,
187 flags);
188 }
189
190 void av_init_packet(AVPacket* pkt) {
191 return MockFFmpeg::get()->AVInitPacket(pkt);
192 }
193
194 int av_new_packet(AVPacket* packet, int size) {
195 return MockFFmpeg::get()->AVNewPacket(packet, size);
196 }
197
198 void av_free_packet(AVPacket* packet) {
199 MockFFmpeg::get()->AVFreePacket(packet);
200 }
201
202 void av_free(void* ptr) {
203 // Freeing NULL pointers are valid, but they aren't interesting from a mock
204 // perspective.
205 if (ptr) {
206 MockFFmpeg::get()->AVFree(ptr);
207 }
208 }
209
210 int av_dup_packet(AVPacket* packet) {
211 return MockFFmpeg::get()->AVDupPacket(packet);
212 }
213
214 void av_log_set_level(int level) {
215 MockFFmpeg::get()->AVLogSetLevel(level);
216 }
217
218 void av_destruct_packet(AVPacket *pkt) {
219 MockFFmpeg::get()->AVDestructPacket(pkt);
220 }
221
222 } // extern "C"
223
224 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698