VideoStreamDecoder skeleton.
Initial commit for the public VideoStreamDecoder. To get some initial feedback about structuring within WebRTC this CL only contains the skeleton of the class. Bug: webrtc:8909 Change-Id: I076bb45dd30a450b3f7ef239e69ff872dc34dcf2 Reviewed-on: https://webrtc-review.googlesource.com/62080 Reviewed-by: Niels Moller <nisse@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Commit-Queue: Philip Eliasson <philipel@webrtc.org> Cr-Commit-Position: refs/heads/master@{#22560}
This commit is contained in:
33
api/BUILD.gn
33
api/BUILD.gn
@ -250,6 +250,39 @@ rtc_source_set("encoded_frame_api") {
|
||||
]
|
||||
}
|
||||
|
||||
rtc_source_set("video_stream_decoder") {
|
||||
visibility = [ "*" ]
|
||||
sources = [
|
||||
"video/video_stream_decoder.h",
|
||||
]
|
||||
|
||||
deps = [
|
||||
":encoded_frame_api",
|
||||
":optional",
|
||||
":video_frame_api",
|
||||
"../api/video_codecs:video_codecs_api",
|
||||
]
|
||||
}
|
||||
|
||||
rtc_source_set("video_stream_decoder_create") {
|
||||
visibility = [ "*" ]
|
||||
sources = [
|
||||
"video/video_stream_decoder_create.cc",
|
||||
"video/video_stream_decoder_create.h",
|
||||
]
|
||||
|
||||
deps = [
|
||||
":video_stream_decoder",
|
||||
"../rtc_base:rtc_base_approved",
|
||||
"../video:video_stream_decoder_impl",
|
||||
]
|
||||
|
||||
if (!build_with_chromium && is_clang) {
|
||||
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
|
||||
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
|
||||
}
|
||||
}
|
||||
|
||||
rtc_source_set("video_frame_api_i420") {
|
||||
visibility = [ "*" ]
|
||||
sources = [
|
||||
|
@ -5,4 +5,7 @@ specific_include_rules = {
|
||||
"encoded_frame.h": [
|
||||
"+modules/video_coding/encoded_frame.h",
|
||||
],
|
||||
"video_stream_decoder_create.cc": [
|
||||
"+video/video_stream_decoder_impl.h",
|
||||
],
|
||||
}
|
||||
|
54
api/video/video_stream_decoder.h
Normal file
54
api/video/video_stream_decoder.h
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* 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_VIDEO_VIDEO_STREAM_DECODER_H_
|
||||
#define API_VIDEO_VIDEO_STREAM_DECODER_H_
|
||||
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "api/video/encoded_frame.h"
|
||||
#include "api/video/video_frame.h"
|
||||
#include "api/video_codecs/sdp_video_format.h"
|
||||
#include "api/video_codecs/video_decoder_factory.h"
|
||||
|
||||
namespace webrtc {
|
||||
// TODO(philipel): #include instead of forward declare when the relevant CL has
|
||||
// landed.
|
||||
class FrameKey;
|
||||
|
||||
// NOTE: This class is still under development and may change without notice.
|
||||
class VideoStreamDecoder {
|
||||
public:
|
||||
class Callbacks {
|
||||
public:
|
||||
virtual ~Callbacks() = default;
|
||||
|
||||
// Called when the VideoStreamDecoder enters a non-decodable state.
|
||||
virtual void OnNonDecodableState() = 0;
|
||||
|
||||
// Called with the last continuous frame.
|
||||
virtual void OnContinuousUntil(const FrameKey& key) = 0;
|
||||
|
||||
// Called with the decoded frame.
|
||||
virtual void OnDecodedFrame(VideoFrame decodedImage,
|
||||
rtc::Optional<int> decode_time_ms,
|
||||
rtc::Optional<int> qp) = 0;
|
||||
};
|
||||
|
||||
virtual ~VideoStreamDecoder() = default;
|
||||
|
||||
virtual void OnFrame(std::unique_ptr<video_coding::EncodedFrame> frame) = 0;
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // API_VIDEO_VIDEO_STREAM_DECODER_H_
|
24
api/video/video_stream_decoder_create.cc
Normal file
24
api/video/video_stream_decoder_create.cc
Normal 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.
|
||||
*/
|
||||
|
||||
#include "api/video/video_stream_decoder_create.h"
|
||||
|
||||
#include "rtc_base/ptr_util.h"
|
||||
#include "video/video_stream_decoder_impl.h"
|
||||
|
||||
namespace webrtc {
|
||||
std::unique_ptr<VideoStreamDecoder> CreateVideoStreamDecoder(
|
||||
VideoStreamDecoder::Callbacks* callbacks,
|
||||
VideoDecoderFactory* decoder_factory,
|
||||
std::map<int, std::pair<SdpVideoFormat, int>> decoder_settings) {
|
||||
return rtc::MakeUnique<VideoStreamDecoderImpl>(callbacks, decoder_factory,
|
||||
std::move(decoder_settings));
|
||||
}
|
||||
} // namespace webrtc
|
32
api/video/video_stream_decoder_create.h
Normal file
32
api/video/video_stream_decoder_create.h
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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_VIDEO_VIDEO_STREAM_DECODER_CREATE_H_
|
||||
#define API_VIDEO_VIDEO_STREAM_DECODER_CREATE_H_
|
||||
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "api/video/video_stream_decoder.h"
|
||||
|
||||
namespace webrtc {
|
||||
// The |decoder_settings| parameter is a map between:
|
||||
// <payload type> --> <<video format>, <number of cores>>.
|
||||
// The video format is used when instantiating a decoder, and
|
||||
// the number of cores is used when initializing the decoder.
|
||||
std::unique_ptr<VideoStreamDecoder> CreateVideoStreamDecoder(
|
||||
VideoStreamDecoder::Callbacks* callbacks,
|
||||
VideoDecoderFactory* decoder_factory,
|
||||
std::map<int, std::pair<SdpVideoFormat, int>> decoder_settings);
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // API_VIDEO_VIDEO_STREAM_DECODER_CREATE_H_
|
@ -102,6 +102,28 @@ rtc_static_library("video") {
|
||||
}
|
||||
}
|
||||
|
||||
rtc_source_set("video_stream_decoder_impl") {
|
||||
visibility = [ "*" ]
|
||||
sources = [
|
||||
"video_stream_decoder_impl.cc",
|
||||
"video_stream_decoder_impl.h",
|
||||
]
|
||||
|
||||
deps = [
|
||||
"../api:encoded_frame_api",
|
||||
"../api:optional",
|
||||
"../api:video_frame_api",
|
||||
"../api:video_stream_decoder",
|
||||
"../api/video_codecs:video_codecs_api",
|
||||
"../rtc_base:rtc_base_approved",
|
||||
]
|
||||
|
||||
if (!build_with_chromium && is_clang) {
|
||||
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
|
||||
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
|
||||
}
|
||||
}
|
||||
|
||||
if (rtc_include_tests) {
|
||||
rtc_source_set("video_quality_test") {
|
||||
testonly = true
|
||||
|
28
video/video_stream_decoder_impl.cc
Normal file
28
video/video_stream_decoder_impl.cc
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "video/video_stream_decoder_impl.h"
|
||||
|
||||
#include "rtc_base/ptr_util.h"
|
||||
|
||||
namespace webrtc {
|
||||
VideoStreamDecoderImpl::VideoStreamDecoderImpl(
|
||||
VideoStreamDecoder::Callbacks* callbacks,
|
||||
VideoDecoderFactory* decoder_factory,
|
||||
std::map<int, std::pair<SdpVideoFormat, int>> decoder_settings)
|
||||
: callbacks_(callbacks),
|
||||
decoder_factory_(decoder_factory),
|
||||
decoder_settings_(std::move(decoder_settings)) {}
|
||||
|
||||
VideoStreamDecoderImpl::~VideoStreamDecoderImpl() {}
|
||||
|
||||
void VideoStreamDecoderImpl::OnFrame(
|
||||
std::unique_ptr<video_coding::EncodedFrame> frame) {}
|
||||
} // namespace webrtc
|
55
video/video_stream_decoder_impl.h
Normal file
55
video/video_stream_decoder_impl.h
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* 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 VIDEO_VIDEO_STREAM_DECODER_IMPL_H_
|
||||
#define VIDEO_VIDEO_STREAM_DECODER_IMPL_H_
|
||||
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "api/optional.h"
|
||||
#include "api/video/encoded_frame.h"
|
||||
#include "api/video/video_frame.h"
|
||||
#include "api/video/video_stream_decoder.h"
|
||||
#include "api/video_codecs/sdp_video_format.h"
|
||||
#include "api/video_codecs/video_decoder_factory.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
class VideoStreamDecoderImpl : public VideoStreamDecoder,
|
||||
private DecodedImageCallback {
|
||||
public:
|
||||
VideoStreamDecoderImpl(
|
||||
VideoStreamDecoder::Callbacks* callbacks,
|
||||
VideoDecoderFactory* decoder_factory,
|
||||
std::map<int, std::pair<SdpVideoFormat, int>> decoder_settings);
|
||||
|
||||
~VideoStreamDecoderImpl() override;
|
||||
|
||||
void OnFrame(std::unique_ptr<video_coding::EncodedFrame> frame) override;
|
||||
|
||||
private:
|
||||
// Implements DecodedImageCallback interface
|
||||
int32_t Decoded(VideoFrame& decodedImage) override;
|
||||
int32_t Decoded(VideoFrame& decodedImage, int64_t decode_time_ms) override;
|
||||
void Decoded(VideoFrame& decodedImage,
|
||||
rtc::Optional<int32_t> decode_time_ms,
|
||||
rtc::Optional<uint8_t> qp) override;
|
||||
|
||||
VideoStreamDecoder::Callbacks* callbacks_;
|
||||
VideoDecoderFactory* decoder_factory_;
|
||||
std::map<int, std::pair<SdpVideoFormat, int>> decoder_settings_;
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // VIDEO_VIDEO_STREAM_DECODER_IMPL_H_
|
Reference in New Issue
Block a user