summaryrefslogtreecommitdiffstats
path: root/media/base/mock_ffmpeg.h
diff options
context:
space:
mode:
Diffstat (limited to 'media/base/mock_ffmpeg.h')
-rw-r--r--media/base/mock_ffmpeg.h162
1 files changed, 162 insertions, 0 deletions
diff --git a/media/base/mock_ffmpeg.h b/media/base/mock_ffmpeg.h
new file mode 100644
index 0000000..df5e69b4
--- /dev/null
+++ b/media/base/mock_ffmpeg.h
@@ -0,0 +1,162 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_BASE_MOCK_FFMPEG_H_
+#define MEDIA_BASE_MOCK_FFMPEG_H_
+
+// TODO(scherkus): See if we can remove ffmpeg_common from this file.
+#include "media/ffmpeg/ffmpeg_common.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace media {
+
+class MockFFmpeg {
+ public:
+ MockFFmpeg();
+ virtual ~MockFFmpeg();
+
+ // TODO(ajwong): Organize this class, and make sure that all mock entrypoints
+ // are still used.
+ MOCK_METHOD0(AVCodecInit, void());
+ MOCK_METHOD2(AVRegisterProtocol2, int(URLProtocol* protocol, int size));
+ MOCK_METHOD0(AVRegisterAll, void());
+ MOCK_METHOD1(AVRegisterLockManager, int(int (*cb)(void**, enum AVLockOp)));
+
+ MOCK_METHOD1(AVCodecFindDecoder, AVCodec*(enum CodecID id));
+ MOCK_METHOD2(AVCodecOpen, int(AVCodecContext* avctx, AVCodec* codec));
+ MOCK_METHOD1(AVCodecClose, int(AVCodecContext* avctx));
+ MOCK_METHOD2(AVCodecThreadInit, int(AVCodecContext* avctx, int threads));
+ MOCK_METHOD1(AVCodecFlushBuffers, void(AVCodecContext* avctx));
+ MOCK_METHOD0(AVCodecAllocContext, AVCodecContext*());
+ MOCK_METHOD0(AVCodecAllocFrame, AVFrame*());
+ MOCK_METHOD4(AVCodecDecodeVideo2,
+ int(AVCodecContext* avctx, AVFrame* picture,
+ int* got_picture_ptr, AVPacket* avpkt));
+ MOCK_METHOD1(AVBitstreamFilterInit,
+ AVBitStreamFilterContext*(const char *name));
+ MOCK_METHOD8(AVBitstreamFilterFilter,
+ int(AVBitStreamFilterContext* bsfc, AVCodecContext* avctx,
+ const char* args, uint8_t** poutbuf, int* poutbuf_size,
+ const uint8_t* buf, int buf_size, int keyframe));
+ MOCK_METHOD1(AVBitstreamFilterClose, void(AVBitStreamFilterContext* bsf));
+ MOCK_METHOD1(AVDestructPacket, void(AVPacket* packet));
+
+ MOCK_METHOD5(AVOpenInputFile, int(AVFormatContext** format,
+ const char* filename,
+ AVInputFormat* input_format,
+ int buffer_size,
+ AVFormatParameters* parameters));
+ MOCK_METHOD1(AVCloseInputFile, void(AVFormatContext* format));
+ MOCK_METHOD1(AVFindStreamInfo, int(AVFormatContext* format));
+ MOCK_METHOD2(AVReadFrame, int(AVFormatContext* format, AVPacket* packet));
+ MOCK_METHOD4(AVSeekFrame, int(AVFormatContext *format,
+ int stream_index,
+ int64_t timestamp,
+ int flags));
+
+ MOCK_METHOD1(AVInitPacket, void(AVPacket* pkt));
+ MOCK_METHOD2(AVNewPacket, int(AVPacket* packet, int size));
+ MOCK_METHOD1(AVFreePacket, void(AVPacket* packet));
+ MOCK_METHOD1(AVFree, void(void* ptr));
+ MOCK_METHOD1(AVDupPacket, int(AVPacket* packet));
+
+ MOCK_METHOD1(AVLogSetLevel, void(int level));
+
+ // Used for verifying check points during tests.
+ MOCK_METHOD1(CheckPoint, void(int id));
+
+ // Returns the current MockFFmpeg instance.
+ static MockFFmpeg* get();
+
+ // Returns the URLProtocol registered by the FFmpegGlue singleton.
+ static URLProtocol* protocol();
+
+ // AVPacket destructor for packets allocated by av_new_packet().
+ static void DestructPacket(AVPacket* packet);
+
+ // Modifies the number of outstanding packets.
+ void inc_outstanding_packets();
+ void dec_outstanding_packets();
+
+ private:
+ static MockFFmpeg* instance_;
+ static URLProtocol* protocol_;
+
+ // Tracks the number of packets allocated by calls to av_read_frame() and
+ // av_free_packet(). We crash the unit test if this is not zero at time of
+ // destruction.
+ int outstanding_packets_;
+};
+
+// Used for simulating av_read_frame().
+ACTION_P3(CreatePacket, stream_index, data, size) {
+ // Confirm we're dealing with AVPacket so we can safely const_cast<>.
+ ::testing::StaticAssertTypeEq<AVPacket*, arg1_type>();
+ memset(arg1, 0, sizeof(*arg1));
+ arg1->stream_index = stream_index;
+ arg1->data = const_cast<uint8*>(data);
+ arg1->size = size;
+
+ // Increment number of packets allocated.
+ MockFFmpeg::get()->inc_outstanding_packets();
+
+ return 0;
+}
+
+// Used for simulating av_read_frame().
+ACTION_P3(CreatePacketNoCount, stream_index, data, size) {
+ // Confirm we're dealing with AVPacket so we can safely const_cast<>.
+ ::testing::StaticAssertTypeEq<AVPacket*, arg1_type>();
+ memset(arg1, 0, sizeof(*arg1));
+ arg1->stream_index = stream_index;
+ arg1->data = const_cast<uint8*>(data);
+ arg1->size = size;
+
+ return 0;
+}
+
+// Used for simulating av_read_frame().
+ACTION_P4(CreatePacketTimeNoCount, stream_index, data, size, pts) {
+ // Confirm we're dealing with AVPacket so we can safely const_cast<>.
+ ::testing::StaticAssertTypeEq<AVPacket*, arg1_type>();
+ memset(arg1, 0, sizeof(*arg1));
+ arg1->stream_index = stream_index;
+ arg1->data = const_cast<uint8*>(data);
+ arg1->size = size;
+ arg1->pts = pts;
+
+ return 0;
+}
+
+// Used for simulating av_new_packet().
+ACTION(NewPacket) {
+ ::testing::StaticAssertTypeEq<AVPacket*, arg0_type>();
+ int size = arg1;
+ memset(arg0, 0, sizeof(*arg0));
+ arg0->data = new uint8[size];
+ arg0->size = size;
+ arg0->destruct = &MockFFmpeg::DestructPacket;
+
+ // Increment number of packets allocated.
+ MockFFmpeg::get()->inc_outstanding_packets();
+
+ return 0;
+}
+
+// Used for simulating av_free_packet().
+ACTION(FreePacket) {
+ ::testing::StaticAssertTypeEq<AVPacket*, arg0_type>();
+
+ // Call the destructor if present, such as the one assigned in NewPacket().
+ if (arg0->destruct) {
+ arg0->destruct(arg0);
+ }
+
+ // Decrement number of packets allocated.
+ MockFFmpeg::get()->dec_outstanding_packets();
+}
+
+} // namespace media
+
+#endif // MEDIA_BASE_MOCK_FFMPEG_H_