1eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström/*
2eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström *
4eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström *  Use of this source code is governed by a BSD-style license
5eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström *  that can be found in the LICENSE file in the root of the source
6eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström *  tree. An additional intellectual property rights grant can be found
7eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström *  in the file PATENTS.  All contributing project authors may
8eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström *  be found in the AUTHORS file in the root of the source tree.
9eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström */
10eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström#ifndef WEBRTC_TEST_FAKE_TEXTURE_FRAME_H_
11eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström#define WEBRTC_TEST_FAKE_TEXTURE_FRAME_H_
12eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström
13eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström#include "webrtc/base/checks.h"
146f8ce060a21fcdc1c951fbf06768eb0cc0083b2fkjellander#include "webrtc/common_video/include/video_frame_buffer.h"
15eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström#include "webrtc/video_frame.h"
16eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström
17eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boströmnamespace webrtc {
18eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boströmnamespace test {
19eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström
2013f61dfea59a546e4e0081eb79e38c542ec51cf6Peter Boströmclass FakeNativeHandle {
2113f61dfea59a546e4e0081eb79e38c542ec51cf6Peter Boström public:
2213f61dfea59a546e4e0081eb79e38c542ec51cf6Peter Boström  static VideoFrame CreateFrame(FakeNativeHandle* native_handle,
2313f61dfea59a546e4e0081eb79e38c542ec51cf6Peter Boström                                int width,
2413f61dfea59a546e4e0081eb79e38c542ec51cf6Peter Boström                                int height,
2513f61dfea59a546e4e0081eb79e38c542ec51cf6Peter Boström                                uint32_t timestamp,
2613f61dfea59a546e4e0081eb79e38c542ec51cf6Peter Boström                                int64_t render_time_ms,
2713f61dfea59a546e4e0081eb79e38c542ec51cf6Peter Boström                                VideoRotation rotation);
2813f61dfea59a546e4e0081eb79e38c542ec51cf6Peter Boström};
29eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström
30eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boströmclass FakeNativeHandleBuffer : public NativeHandleBuffer {
31eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström public:
32eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström  FakeNativeHandleBuffer(void* native_handle, int width, int height)
33eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström      : NativeHandleBuffer(native_handle, width, height) {}
34eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström
35eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström  ~FakeNativeHandleBuffer() {
36eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström    delete reinterpret_cast<FakeNativeHandle*>(native_handle_);
37eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström  }
38eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström
39eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström private:
40eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström  rtc::scoped_refptr<VideoFrameBuffer> NativeToI420Buffer() override {
41eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström    rtc::scoped_refptr<VideoFrameBuffer> buffer(
42eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström        new rtc::RefCountedObject<I420Buffer>(width_, height_));
43eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström    int half_height = (height_ + 1) / 2;
44eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström    int half_width = (width_ + 1) / 2;
453318f984cd7f51d24da4726665c05f5f06f82e6dMagnus Jedvert    memset(buffer->MutableData(kYPlane), 0, height_ * width_);
463318f984cd7f51d24da4726665c05f5f06f82e6dMagnus Jedvert    memset(buffer->MutableData(kUPlane), 0, half_height * half_width);
473318f984cd7f51d24da4726665c05f5f06f82e6dMagnus Jedvert    memset(buffer->MutableData(kVPlane), 0, half_height * half_width);
48eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström    return buffer;
49eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström  }
50eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström};
51eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström
52eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström}  // namespace test
53eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström}  // namespace webrtc
54eb66e800d1f5f74ab366715d2618fbede8cf3e12Peter Boström#endif  //  WEBRTC_TEST_FAKE_TEXTURE_FRAME_H_
55