Publish function_video_(en|de)coder_factory into api

Bug: None
Change-Id: Ibdae580c085cfc4b063fdc7f1edb8312de438722
Reviewed-on: https://webrtc-review.googlesource.com/c/107705
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25360}
This commit is contained in:
Danil Chapovalov 2018-10-24 17:01:58 +02:00 committed by Commit Bot
parent 23524ced41
commit ddc84e9819
6 changed files with 150 additions and 91 deletions

24
api/test/video/BUILD.gn Normal file
View File

@ -0,0 +1,24 @@
# Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
import("../../../webrtc.gni")
rtc_source_set("function_video_factory") {
visibility = [ "*" ]
testonly = true
public = [
"function_video_decoder_factory.h",
"function_video_encoder_factory.h",
]
deps = [
"../../../rtc_base:checks",
"../../video_codecs:video_codecs_api",
"//third_party/abseil-cpp/absl/memory",
]
}

View File

@ -0,0 +1,56 @@
/*
* Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef API_TEST_VIDEO_FUNCTION_VIDEO_DECODER_FACTORY_H_
#define API_TEST_VIDEO_FUNCTION_VIDEO_DECODER_FACTORY_H_
#include <functional>
#include <memory>
#include <utility>
#include <vector>
#include "api/video_codecs/sdp_video_format.h"
#include "api/video_codecs/video_decoder_factory.h"
#include "rtc_base/checks.h"
namespace webrtc {
namespace test {
// A decoder factory producing decoders by calling a supplied create function.
class FunctionVideoDecoderFactory final : public VideoDecoderFactory {
public:
explicit FunctionVideoDecoderFactory(
std::function<std::unique_ptr<VideoDecoder>()> create)
: create_([create](const SdpVideoFormat&) { return create(); }) {}
explicit FunctionVideoDecoderFactory(
std::function<std::unique_ptr<VideoDecoder>(const SdpVideoFormat&)>
create)
: create_(std::move(create)) {}
// Unused by tests.
std::vector<SdpVideoFormat> GetSupportedFormats() const override {
RTC_NOTREACHED();
return {};
}
std::unique_ptr<VideoDecoder> CreateVideoDecoder(
const SdpVideoFormat& format) override {
return create_(format);
}
private:
const std::function<std::unique_ptr<VideoDecoder>(const SdpVideoFormat&)>
create_;
};
} // namespace test
} // namespace webrtc
#endif // API_TEST_VIDEO_FUNCTION_VIDEO_DECODER_FACTORY_H_

View File

@ -0,0 +1,65 @@
/*
* Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef API_TEST_VIDEO_FUNCTION_VIDEO_ENCODER_FACTORY_H_
#define API_TEST_VIDEO_FUNCTION_VIDEO_ENCODER_FACTORY_H_
#include <functional>
#include <memory>
#include <utility>
#include <vector>
#include "api/video_codecs/sdp_video_format.h"
#include "api/video_codecs/video_encoder_factory.h"
#include "rtc_base/checks.h"
namespace webrtc {
namespace test {
// An encoder factory producing encoders by calling a supplied create
// function.
class FunctionVideoEncoderFactory final : public VideoEncoderFactory {
public:
explicit FunctionVideoEncoderFactory(
std::function<std::unique_ptr<VideoEncoder>()> create)
: create_([create](const SdpVideoFormat&) { return create(); }) {}
explicit FunctionVideoEncoderFactory(
std::function<std::unique_ptr<VideoEncoder>(const SdpVideoFormat&)>
create)
: create_(std::move(create)) {}
// Unused by tests.
std::vector<SdpVideoFormat> GetSupportedFormats() const override {
RTC_NOTREACHED();
return {};
}
CodecInfo QueryVideoEncoder(
const SdpVideoFormat& /* format */) const override {
CodecInfo codec_info;
codec_info.is_hardware_accelerated = false;
codec_info.has_internal_source = false;
return codec_info;
}
std::unique_ptr<VideoEncoder> CreateVideoEncoder(
const SdpVideoFormat& format) override {
return create_(format);
}
private:
const std::function<std::unique_ptr<VideoEncoder>(const SdpVideoFormat&)>
create_;
};
} // namespace test
} // namespace webrtc
#endif // API_TEST_VIDEO_FUNCTION_VIDEO_ENCODER_FACTORY_H_

View File

@ -662,6 +662,7 @@ rtc_source_set("test_common") {
"../api:transport_api",
"../api/audio_codecs:builtin_audio_decoder_factory",
"../api/audio_codecs:builtin_audio_encoder_factory",
"../api/test/video:function_video_factory",
"../api/video:video_frame",
"../api/video_codecs:video_codecs_api",
"../audio",

View File

@ -11,46 +11,7 @@
#ifndef TEST_FUNCTION_VIDEO_DECODER_FACTORY_H_
#define TEST_FUNCTION_VIDEO_DECODER_FACTORY_H_
#include <functional>
#include <memory>
#include <utility>
#include <vector>
#include "api/video_codecs/sdp_video_format.h"
#include "api/video_codecs/video_decoder_factory.h"
#include "rtc_base/checks.h"
namespace webrtc {
namespace test {
// A decoder factory producing decoders by calling a supplied create function.
class FunctionVideoDecoderFactory final : public VideoDecoderFactory {
public:
explicit FunctionVideoDecoderFactory(
std::function<std::unique_ptr<VideoDecoder>()> create)
: create_([create](const SdpVideoFormat&) { return create(); }) {}
explicit FunctionVideoDecoderFactory(
std::function<std::unique_ptr<VideoDecoder>(const SdpVideoFormat&)>
create)
: create_(std::move(create)) {}
// Unused by tests.
std::vector<SdpVideoFormat> GetSupportedFormats() const override {
RTC_NOTREACHED();
return {};
}
std::unique_ptr<VideoDecoder> CreateVideoDecoder(
const SdpVideoFormat& format) override {
return create_(format);
}
private:
const std::function<std::unique_ptr<VideoDecoder>(const SdpVideoFormat&)>
create_;
};
} // namespace test
} // namespace webrtc
// TODO(danilchap): Remove this file when all users include api header directly.
#include "api/test/video/function_video_decoder_factory.h"
#endif // TEST_FUNCTION_VIDEO_DECODER_FACTORY_H_

View File

@ -11,55 +11,7 @@
#ifndef TEST_FUNCTION_VIDEO_ENCODER_FACTORY_H_
#define TEST_FUNCTION_VIDEO_ENCODER_FACTORY_H_
#include <functional>
#include <memory>
#include <utility>
#include <vector>
#include "api/video_codecs/sdp_video_format.h"
#include "api/video_codecs/video_encoder_factory.h"
#include "rtc_base/checks.h"
namespace webrtc {
namespace test {
// An encoder factory producing encoders by calling a supplied create
// function.
class FunctionVideoEncoderFactory final : public VideoEncoderFactory {
public:
explicit FunctionVideoEncoderFactory(
std::function<std::unique_ptr<VideoEncoder>()> create)
: create_([create](const SdpVideoFormat&) { return create(); }) {}
explicit FunctionVideoEncoderFactory(
std::function<std::unique_ptr<VideoEncoder>(const SdpVideoFormat&)>
create)
: create_(std::move(create)) {}
// Unused by tests.
std::vector<SdpVideoFormat> GetSupportedFormats() const override {
RTC_NOTREACHED();
return {};
}
CodecInfo QueryVideoEncoder(
const SdpVideoFormat& /* format */) const override {
CodecInfo codec_info;
codec_info.is_hardware_accelerated = false;
codec_info.has_internal_source = false;
return codec_info;
}
std::unique_ptr<VideoEncoder> CreateVideoEncoder(
const SdpVideoFormat& format) override {
return create_(format);
}
private:
const std::function<std::unique_ptr<VideoEncoder>(const SdpVideoFormat&)>
create_;
};
} // namespace test
} // namespace webrtc
// TODO(danilchap): Remove this file when all users include api header directly.
#include "api/test/video/function_video_encoder_factory.h"
#endif // TEST_FUNCTION_VIDEO_ENCODER_FACTORY_H_