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

Unified Diff: media/cdm/simple_cdm_allocator_unittest.cc

Issue 1673383002: Add allocator interface for use by cdm_adapter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add MEDIA_CDM_EXPORT for Windows Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/cdm/simple_cdm_allocator.cc ('k') | media/cdm/simple_cdm_buffer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cdm/simple_cdm_allocator_unittest.cc
diff --git a/media/cdm/simple_cdm_allocator_unittest.cc b/media/cdm/simple_cdm_allocator_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..e602d9e50f754600078e6b87377fc6bd1172dc84
--- /dev/null
+++ b/media/cdm/simple_cdm_allocator_unittest.cc
@@ -0,0 +1,105 @@
+// Copyright 2016 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.
+
+#include <stdint.h>
+
+#include "base/macros.h"
+#include "media/base/video_frame.h"
+#include "media/cdm/api/content_decryption_module.h"
+#include "media/cdm/cdm_helpers.h"
+#include "media/cdm/simple_cdm_allocator.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace media {
+
+class TestCdmBuffer : public cdm::Buffer {
+ public:
+ static TestCdmBuffer* Create(uint32_t capacity) {
+ return new TestCdmBuffer(capacity);
+ }
+
+ // cdm::Buffer implementation.
+ void Destroy() {
+ DestroyCalled();
+ delete this;
+ }
+ uint32_t Capacity() const { return buffer_.size(); }
+ uint8_t* Data() { return buffer_.data(); }
+ void SetSize(uint32_t size) { size_ = size > Capacity() ? 0 : size; }
+ uint32_t Size() const { return size_; }
+
+ private:
+ TestCdmBuffer(uint32_t capacity) : buffer_(capacity), size_(0) {
+ // Verify that Destroy() is called on this object.
+ EXPECT_CALL(*this, DestroyCalled());
+ }
+ ~TestCdmBuffer() final {}
+
+ MOCK_METHOD0(DestroyCalled, void());
+
+ std::vector<uint8_t> buffer_;
+ uint32_t size_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestCdmBuffer);
+};
+
+class SimpleCdmAllocatorTest : public testing::Test {
+ public:
+ SimpleCdmAllocatorTest() {}
+ ~SimpleCdmAllocatorTest() override {}
+
+ protected:
+ SimpleCdmAllocator allocator_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(SimpleCdmAllocatorTest);
+};
+
+TEST_F(SimpleCdmAllocatorTest, CreateCdmBuffer) {
+ cdm::Buffer* buffer = allocator_.CreateCdmBuffer(100);
+ EXPECT_GE(buffer->Capacity(), 100u);
+ buffer->Destroy();
+}
+
+TEST_F(SimpleCdmAllocatorTest, CreateCdmVideoFrame) {
+ scoped_ptr<VideoFrameImpl> video_frame = allocator_.CreateCdmVideoFrame();
+ EXPECT_EQ(video_frame->FrameBuffer(), nullptr);
+ video_frame->SetFrameBuffer(TestCdmBuffer::Create(100));
+ EXPECT_NE(video_frame->FrameBuffer(), nullptr);
+
+ // Releasing |video_frame| should free the cdm::Buffer created above
+ // (verified by the mock method TestCdmBuffer::DestroyCalled).
+ video_frame.reset();
+}
+
+TEST_F(SimpleCdmAllocatorTest, TransformToVideoFrame) {
+ // For this test we need to pretend we have valid video data. So create
+ // a small video frame of size 2x2.
+ gfx::Size size(2, 2);
+ size_t memory_needed = VideoFrame::AllocationSize(PIXEL_FORMAT_YV12, size);
+
+ // Now create a VideoFrameImpl.
+ scoped_ptr<VideoFrameImpl> video_frame = allocator_.CreateCdmVideoFrame();
+ EXPECT_EQ(video_frame->FrameBuffer(), nullptr);
+
+ // Fill VideoFrameImpl as if it was a small video frame.
+ video_frame->SetFormat(cdm::kI420);
+ video_frame->SetSize(cdm::Size(size.width(), size.height()));
+ video_frame->SetFrameBuffer(TestCdmBuffer::Create(memory_needed));
+ video_frame->FrameBuffer()->SetSize(memory_needed);
+
+ // Now transform VideoFrameImpl to a VideoFrame, and make sure that
+ // FrameBuffer() is transferred to the new object.
+ EXPECT_NE(video_frame->FrameBuffer(), nullptr);
+ scoped_refptr<media::VideoFrame> transformed_frame =
+ video_frame->TransformToVideoFrame(size);
+ EXPECT_EQ(video_frame->FrameBuffer(), nullptr);
+
+ // Releasing |transformed_frame| should free the cdm::Buffer created above
+ // (verified by the mock method TestCdmBuffer::DestroyCalled).
+ transformed_frame = nullptr;
+}
+
+} // namespace media
« no previous file with comments | « media/cdm/simple_cdm_allocator.cc ('k') | media/cdm/simple_cdm_buffer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698