Enable and fix chromium clang warnings in sdk/android targets.

Targets:
base_jni, internal_jni, video_jni, vp8_jni and vp9_jni

Bug: webrtc:163
Change-Id: I4aa68c81e6e7cbe5fdf78c90e464b46c55633252
Reviewed-on: https://webrtc-review.googlesource.com/66820
Commit-Queue: Paulina Hensman <phensman@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22744}
This commit is contained in:
Paulina Hensman
2018-04-05 11:42:24 +02:00
committed by Commit Bot
parent 87c5463dfd
commit a680a6a4af
41 changed files with 111 additions and 66 deletions

View File

@ -13,6 +13,7 @@
namespace rtc {
VideoSinkWants::VideoSinkWants() = default;
VideoSinkWants::VideoSinkWants(const VideoSinkWants&) = default;
VideoSinkWants::~VideoSinkWants() = default;
} // namespace rtc

View File

@ -22,6 +22,7 @@ namespace rtc {
// should have when it is delivered to a certain sink.
struct VideoSinkWants {
VideoSinkWants();
VideoSinkWants(const VideoSinkWants&);
~VideoSinkWants();
// Tells the source whether the sink wants frames with rotation applied.
// By default, any rotation must be applied by the sink.

View File

@ -14,10 +14,14 @@
namespace webrtc {
I420BufferPool::I420BufferPool() : I420BufferPool(false) {}
I420BufferPool::I420BufferPool(bool zero_initialize)
: I420BufferPool(zero_initialize, std::numeric_limits<size_t>::max()) {}
I420BufferPool::I420BufferPool(bool zero_initialize,
size_t max_number_of_buffers)
: zero_initialize_(zero_initialize),
max_number_of_buffers_(max_number_of_buffers) {}
I420BufferPool::~I420BufferPool() = default;
void I420BufferPool::Release() {
buffers_.clear();

View File

@ -29,11 +29,10 @@ namespace webrtc {
// are created. This is to prevent memory leaks where frames are not returned.
class I420BufferPool {
public:
I420BufferPool()
: I420BufferPool(false) {}
explicit I420BufferPool(bool zero_initialize)
: I420BufferPool(zero_initialize, std::numeric_limits<size_t>::max()) {}
I420BufferPool();
explicit I420BufferPool(bool zero_initialize);
I420BufferPool(bool zero_initialze, size_t max_number_of_buffers);
~I420BufferPool();
// Returns a buffer from the pool. If no suitable buffer exist in the pool
// and there are less than |max_number_of_buffers| pending, a buffer is

View File

@ -34,6 +34,7 @@ class EncodedImage {
static size_t GetBufferPaddingBytes(VideoCodecType codec_type);
EncodedImage();
EncodedImage(const EncodedImage&);
EncodedImage(uint8_t* buffer, size_t length, size_t size);
void SetEncodeTime(int64_t encode_start_ms, int64_t encode_finish_ms);

View File

@ -45,6 +45,8 @@ size_t EncodedImage::GetBufferPaddingBytes(VideoCodecType codec_type) {
EncodedImage::EncodedImage() : EncodedImage(nullptr, 0, 0) {}
EncodedImage::EncodedImage(const EncodedImage&) = default;
EncodedImage::EncodedImage(uint8_t* buffer, size_t length, size_t size)
: _buffer(buffer), _length(length), _size(size) {}

View File

@ -22,6 +22,7 @@ AdaptedVideoTrackSource::AdaptedVideoTrackSource(int required_alignment)
: video_adapter_(required_alignment) {
thread_checker_.DetachFromThread();
}
AdaptedVideoTrackSource::~AdaptedVideoTrackSource() = default;
bool AdaptedVideoTrackSource::GetStats(Stats* stats) {
rtc::CritScope lock(&stats_crit_);

View File

@ -26,6 +26,7 @@ class AdaptedVideoTrackSource
: public webrtc::Notifier<webrtc::VideoTrackSourceInterface> {
public:
AdaptedVideoTrackSource();
~AdaptedVideoTrackSource() override;
protected:
// Allows derived classes to initialize |video_adapter_| with a custom

View File

@ -22,6 +22,7 @@
namespace cricket {
FeedbackParams::FeedbackParams() = default;
FeedbackParams::~FeedbackParams() = default;
bool FeedbackParam::operator==(const FeedbackParam& other) const {
return _stricmp(other.id().c_str(), id().c_str()) == 0 &&

View File

@ -36,6 +36,7 @@ class FeedbackParam {
: id_(id),
param_(kParamValueEmpty) {
}
bool operator==(const FeedbackParam& other) const;
const std::string& id() const { return id_; }
@ -49,6 +50,7 @@ class FeedbackParam {
class FeedbackParams {
public:
FeedbackParams();
~FeedbackParams();
bool operator==(const FeedbackParams& other) const;
bool Has(const FeedbackParam& param) const;

View File

@ -21,6 +21,7 @@ namespace rtc {
VideoBroadcaster::VideoBroadcaster() {
thread_checker_.DetachFromThread();
}
VideoBroadcaster::~VideoBroadcaster() = default;
void VideoBroadcaster::AddOrUpdateSink(
VideoSinkInterface<webrtc::VideoFrame>* sink,

View File

@ -33,6 +33,7 @@ class VideoBroadcaster : public VideoSourceBase,
public VideoSinkInterface<webrtc::VideoFrame> {
public:
VideoBroadcaster();
~VideoBroadcaster() override;
void AddOrUpdateSink(VideoSinkInterface<webrtc::VideoFrame>* sink,
const VideoSinkWants& wants) override;
void RemoveSink(VideoSinkInterface<webrtc::VideoFrame>* sink) override;

View File

@ -17,6 +17,7 @@ namespace rtc {
VideoSourceBase::VideoSourceBase() {
thread_checker_.DetachFromThread();
}
VideoSourceBase::~VideoSourceBase() = default;
void VideoSourceBase::AddOrUpdateSink(
VideoSinkInterface<webrtc::VideoFrame>* sink,

View File

@ -23,6 +23,7 @@ namespace rtc {
class VideoSourceBase : public VideoSourceInterface<webrtc::VideoFrame> {
public:
VideoSourceBase();
~VideoSourceBase() override;
void AddOrUpdateSink(VideoSinkInterface<webrtc::VideoFrame>* sink,
const VideoSinkWants& wants) override;
void RemoveSink(VideoSinkInterface<webrtc::VideoFrame>* sink) override;

View File

@ -31,6 +31,8 @@ VideoDecoderSoftwareFallbackWrapper::VideoDecoderSoftwareFallbackWrapper(
std::string(fallback_decoder_->ImplementationName()) +
" (fallback from: " + hw_decoder_->ImplementationName() + ")"),
callback_(nullptr) {}
VideoDecoderSoftwareFallbackWrapper::~VideoDecoderSoftwareFallbackWrapper() =
default;
int32_t VideoDecoderSoftwareFallbackWrapper::InitDecode(
const VideoCodec* codec_settings,

View File

@ -26,6 +26,7 @@ class VideoDecoderSoftwareFallbackWrapper : public VideoDecoder {
VideoDecoderSoftwareFallbackWrapper(
std::unique_ptr<VideoDecoder> sw_fallback_decoder,
std::unique_ptr<VideoDecoder> hw_decoder);
~VideoDecoderSoftwareFallbackWrapper() override;
int32_t InitDecode(const VideoCodec* codec_settings,
int32_t number_of_cores) override;

View File

@ -86,6 +86,8 @@ VideoEncoderSoftwareFallbackWrapper::VideoEncoderSoftwareFallbackWrapper(
1); // No HW below.
}
}
VideoEncoderSoftwareFallbackWrapper::~VideoEncoderSoftwareFallbackWrapper() =
default;
bool VideoEncoderSoftwareFallbackWrapper::InitFallbackEncoder() {
RTC_LOG(LS_WARNING) << "Encoder falling back to software encoding.";

View File

@ -28,6 +28,7 @@ class VideoEncoderSoftwareFallbackWrapper : public VideoEncoder {
VideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<webrtc::VideoEncoder> sw_encoder,
std::unique_ptr<webrtc::VideoEncoder> hw_encoder);
~VideoEncoderSoftwareFallbackWrapper() override;
int32_t InitEncode(const VideoCodec* codec_settings,
int32_t number_of_cores,

View File

@ -23,14 +23,14 @@ class VP8Encoder : public VideoEncoder {
public:
static std::unique_ptr<VP8Encoder> Create();
virtual ~VP8Encoder() {}
~VP8Encoder() override {}
}; // end of VP8Encoder class
class VP8Decoder : public VideoDecoder {
public:
static std::unique_ptr<VP8Decoder> Create();
virtual ~VP8Decoder() {}
~VP8Decoder() override {}
}; // end of VP8Decoder class
} // namespace webrtc

View File

@ -23,7 +23,7 @@ class VP9Encoder : public VideoEncoder {
static bool IsSupported();
static std::unique_ptr<VP9Encoder> Create();
virtual ~VP9Encoder() {}
~VP9Encoder() override {}
};
class VP9Decoder : public VideoDecoder {
@ -31,7 +31,7 @@ class VP9Decoder : public VideoDecoder {
static bool IsSupported();
static std::unique_ptr<VP9Decoder> Create();
virtual ~VP9Decoder() {}
~VP9Decoder() override {}
};
} // namespace webrtc

View File

@ -15,6 +15,7 @@
namespace webrtc {
MovingAverage::MovingAverage(size_t s) : sum_history_(s + 1, 0) {}
MovingAverage::~MovingAverage() = default;
void MovingAverage::AddSample(int sample) {
count_++;

View File

@ -19,6 +19,7 @@ namespace webrtc {
class MovingAverage {
public:
explicit MovingAverage(size_t s);
~MovingAverage();
void AddSample(int sample);
rtc::Optional<int> GetAverage() const;
rtc::Optional<int> GetAverage(size_t num_samples) const;

View File

@ -75,14 +75,6 @@ rtc_source_set("internal_jni") {
deps = [
"../../rtc_base:checks",
]
if (is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [
"//build/config/clang:extra_warnings",
"//build/config/clang:find_bad_constructs",
]
}
}
rtc_source_set("base_jni") {
@ -112,14 +104,6 @@ rtc_source_set("base_jni") {
"../../rtc_base:rtc_base_approved",
"../../system_wrappers:metrics_api",
]
if (is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [
"//build/config/clang:extra_warnings",
"//build/config/clang:find_bad_constructs",
]
}
}
rtc_static_library("audio_jni") {
@ -373,14 +357,6 @@ rtc_static_library("video_jni") {
configs += [ ":libjingle_peerconnection_jni_warnings_config" ]
if (is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [
"//build/config/clang:extra_warnings",
"//build/config/clang:find_bad_constructs",
]
}
# TODO(jschuh): Bug 1348: fix this warning.
configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
@ -462,14 +438,6 @@ rtc_static_library("vp8_jni") {
"src/jni/vp8codec.cc",
]
if (is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [
"//build/config/clang:extra_warnings",
"//build/config/clang:find_bad_constructs",
]
}
deps = [
":base_jni",
":generated_vp8_jni",
@ -492,14 +460,6 @@ rtc_static_library("vp9_jni") {
"src/jni/vp9codec.cc",
]
if (is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [
"//build/config/clang:extra_warnings",
"//build/config/clang:find_bad_constructs",
]
}
deps = [
":base_jni",
":generated_vp9_jni",

View File

@ -61,7 +61,7 @@ class MediaCodecVideoDecoder : public VideoDecoder, public rtc::MessageHandler {
public:
explicit MediaCodecVideoDecoder(
JNIEnv* jni, VideoCodecType codecType, jobject render_egl_context);
virtual ~MediaCodecVideoDecoder();
~MediaCodecVideoDecoder() override;
int32_t InitDecode(const VideoCodec* codecSettings, int32_t numberOfCores)
override;

View File

@ -24,7 +24,7 @@ class MediaCodecVideoDecoderFactory
: public cricket::WebRtcVideoDecoderFactory {
public:
MediaCodecVideoDecoderFactory();
virtual ~MediaCodecVideoDecoderFactory();
~MediaCodecVideoDecoderFactory() override;
void SetEGLContext(JNIEnv* jni, jobject render_egl_context);

View File

@ -93,7 +93,7 @@ namespace {
// this is the encoder queue from ViE encoder.
class MediaCodecVideoEncoder : public VideoEncoder {
public:
virtual ~MediaCodecVideoEncoder();
~MediaCodecVideoEncoder() override;
MediaCodecVideoEncoder(JNIEnv* jni,
const cricket::VideoCodec& codec,
jobject egl_context);

View File

@ -24,7 +24,7 @@ class MediaCodecVideoEncoderFactory
: public cricket::WebRtcVideoEncoderFactory {
public:
MediaCodecVideoEncoderFactory();
virtual ~MediaCodecVideoEncoderFactory();
~MediaCodecVideoEncoderFactory() override;
void SetEGLContext(JNIEnv* jni, jobject egl_context);

View File

@ -132,8 +132,18 @@ static NetworkInformation GetNetworkInformationFromJava(
NetworkInformation::NetworkInformation() = default;
NetworkInformation::NetworkInformation(const NetworkInformation&) = default;
NetworkInformation::NetworkInformation(NetworkInformation&&) = default;
NetworkInformation::~NetworkInformation() = default;
NetworkInformation& NetworkInformation::operator=(const NetworkInformation&) =
default;
NetworkInformation& NetworkInformation::operator=(NetworkInformation&&) =
default;
std::string NetworkInformation::ToString() const {
std::stringstream ss;
ss << "NetInfo[name " << interface_name << "; handle " << handle << "; type "

View File

@ -47,7 +47,11 @@ struct NetworkInformation {
std::vector<rtc::IPAddress> ip_addresses;
NetworkInformation();
NetworkInformation(const NetworkInformation&);
NetworkInformation(NetworkInformation&&);
~NetworkInformation();
NetworkInformation& operator=(const NetworkInformation&);
NetworkInformation& operator=(NetworkInformation&&);
std::string ToString() const;
};

View File

@ -31,7 +31,7 @@ VideoRotation jintToVideoRotation(jint rotation) {
}
AndroidVideoTrackSource* AndroidVideoTrackSourceFromJavaProxy(jlong j_proxy) {
auto proxy_source = reinterpret_cast<VideoTrackSourceProxy*>(j_proxy);
auto* proxy_source = reinterpret_cast<VideoTrackSourceProxy*>(j_proxy);
return reinterpret_cast<AndroidVideoTrackSource*>(proxy_source->internal());
}
@ -51,6 +51,15 @@ AndroidVideoTrackSource::AndroidVideoTrackSource(
RTC_LOG(LS_INFO) << "AndroidVideoTrackSource ctor";
camera_thread_checker_.DetachFromThread();
}
AndroidVideoTrackSource::~AndroidVideoTrackSource() = default;
bool AndroidVideoTrackSource::is_screencast() const {
return is_screencast_;
}
rtc::Optional<bool> AndroidVideoTrackSource::needs_denoising() const {
return false;
}
void AndroidVideoTrackSource::SetState(SourceState state) {
if (rtc::Thread::Current() != signaling_thread_) {
@ -66,6 +75,14 @@ void AndroidVideoTrackSource::SetState(SourceState state) {
}
}
AndroidVideoTrackSource::SourceState AndroidVideoTrackSource::state() const {
return state_;
}
bool AndroidVideoTrackSource::remote() const {
return false;
}
void AndroidVideoTrackSource::OnByteBufferFrameCaptured(const void* frame_data,
int length,
int width,
@ -213,6 +230,11 @@ void AndroidVideoTrackSource::OnOutputFormatRequest(int width,
video_adapter()->OnOutputFormatRequest(format);
}
rtc::scoped_refptr<SurfaceTextureHelper>
AndroidVideoTrackSource::surface_texture_helper() {
return surface_texture_helper_;
}
static void JNI_AndroidVideoTrackSourceObserver_OnByteBufferFrameCaptured(
JNIEnv* jni,
const JavaParamRef<jclass>&,

View File

@ -32,20 +32,21 @@ class AndroidVideoTrackSource : public rtc::AdaptedVideoTrackSource {
JNIEnv* jni,
const JavaRef<jobject>& j_surface_texture_helper,
bool is_screencast = false);
~AndroidVideoTrackSource() override;
bool is_screencast() const override { return is_screencast_; }
bool is_screencast() const override;
// Indicates that the encoder should denoise video before encoding it.
// If it is not set, the default configuration is used which is different
// depending on video codec.
rtc::Optional<bool> needs_denoising() const override { return false; }
rtc::Optional<bool> needs_denoising() const override;
// Called by the native capture observer
void SetState(SourceState state);
SourceState state() const override { return state_; }
SourceState state() const override;
bool remote() const override { return false; }
bool remote() const override;
void OnByteBufferFrameCaptured(const void* frame_data,
int length,
@ -69,9 +70,7 @@ class AndroidVideoTrackSource : public rtc::AdaptedVideoTrackSource {
void OnOutputFormatRequest(int width, int height, int fps);
rtc::scoped_refptr<SurfaceTextureHelper> surface_texture_helper() {
return surface_texture_helper_;
}
rtc::scoped_refptr<SurfaceTextureHelper> surface_texture_helper();
private:
rtc::Thread* signaling_thread_;

View File

@ -26,7 +26,7 @@ class JavaVideoRendererWrapper : public rtc::VideoSinkInterface<VideoFrame> {
JavaVideoRendererWrapper(JNIEnv* jni, const JavaRef<jobject>& j_callbacks)
: j_callbacks_(jni, j_callbacks) {}
virtual ~JavaVideoRendererWrapper() {}
~JavaVideoRendererWrapper() override {}
void OnFrame(const VideoFrame& video_frame) override {
JNIEnv* env = AttachCurrentThreadIfNeeded();

View File

@ -25,6 +25,7 @@ VideoDecoderFactoryWrapper::VideoDecoderFactoryWrapper(
JNIEnv* jni,
const JavaRef<jobject>& decoder_factory)
: decoder_factory_(jni, decoder_factory) {}
VideoDecoderFactoryWrapper::~VideoDecoderFactoryWrapper() = default;
std::unique_ptr<VideoDecoder> VideoDecoderFactoryWrapper::CreateVideoDecoder(
const SdpVideoFormat& format) {

View File

@ -25,6 +25,7 @@ class VideoDecoderFactoryWrapper : public VideoDecoderFactory {
public:
VideoDecoderFactoryWrapper(JNIEnv* jni,
const JavaRef<jobject>& decoder_factory);
~VideoDecoderFactoryWrapper() override;
std::vector<SdpVideoFormat> GetSupportedFormats() const override;
std::unique_ptr<VideoDecoder> CreateVideoDecoder(

View File

@ -50,6 +50,8 @@ VideoDecoderWrapper::VideoDecoderWrapper(JNIEnv* jni,
decoder_thread_checker_.DetachFromThread();
}
VideoDecoderWrapper::~VideoDecoderWrapper() = default;
int32_t VideoDecoderWrapper::InitDecode(const VideoCodec* codec_settings,
int32_t number_of_cores) {
RTC_DCHECK_RUN_ON(&decoder_thread_checker_);
@ -194,6 +196,11 @@ void VideoDecoderWrapper::OnDecodedFrame(
decoder_qp ? decoder_qp : frame_extra_info.qp);
}
VideoDecoderWrapper::FrameExtraInfo::FrameExtraInfo() = default;
VideoDecoderWrapper::FrameExtraInfo::FrameExtraInfo(const FrameExtraInfo&) =
default;
VideoDecoderWrapper::FrameExtraInfo::~FrameExtraInfo() = default;
int32_t VideoDecoderWrapper::HandleReturnCode(JNIEnv* jni,
const JavaRef<jobject>& j_value,
const char* method_name) {

View File

@ -28,6 +28,7 @@ namespace jni {
class VideoDecoderWrapper : public VideoDecoder {
public:
VideoDecoderWrapper(JNIEnv* jni, const JavaRef<jobject>& decoder);
~VideoDecoderWrapper() override;
int32_t InitDecode(const VideoCodec* codec_settings,
int32_t number_of_cores) override;
@ -67,6 +68,10 @@ class VideoDecoderWrapper : public VideoDecoder {
uint32_t timestamp_rtp;
int64_t timestamp_ntp;
rtc::Optional<uint8_t> qp;
FrameExtraInfo();
FrameExtraInfo(const FrameExtraInfo&);
~FrameExtraInfo();
};
int32_t InitDecodeInternal(JNIEnv* jni) RTC_RUN_ON(decoder_thread_checker_);

View File

@ -31,6 +31,7 @@ VideoEncoderFactoryWrapper::VideoEncoderFactoryWrapper(
supported_formats_ = JavaToNativeVector<SdpVideoFormat>(
jni, j_supported_codecs, &VideoCodecInfoToSdpVideoFormat);
}
VideoEncoderFactoryWrapper::~VideoEncoderFactoryWrapper() = default;
std::unique_ptr<VideoEncoder> VideoEncoderFactoryWrapper::CreateVideoEncoder(
const SdpVideoFormat& format) {
@ -44,6 +45,11 @@ std::unique_ptr<VideoEncoder> VideoEncoderFactoryWrapper::CreateVideoEncoder(
return JavaToNativeVideoEncoder(jni, encoder);
}
std::vector<SdpVideoFormat> VideoEncoderFactoryWrapper::GetSupportedFormats()
const {
return supported_formats_;
}
VideoEncoderFactory::CodecInfo VideoEncoderFactoryWrapper::QueryVideoEncoder(
const SdpVideoFormat& format) const {
JNIEnv* jni = AttachCurrentThreadIfNeeded();

View File

@ -27,14 +27,13 @@ class VideoEncoderFactoryWrapper : public VideoEncoderFactory {
public:
VideoEncoderFactoryWrapper(JNIEnv* jni,
const JavaRef<jobject>& encoder_factory);
~VideoEncoderFactoryWrapper() override;
std::unique_ptr<VideoEncoder> CreateVideoEncoder(
const SdpVideoFormat& format) override;
// Returns a list of supported codecs in order of preference.
std::vector<SdpVideoFormat> GetSupportedFormats() const override {
return supported_formats_;
}
std::vector<SdpVideoFormat> GetSupportedFormats() const override;
CodecInfo QueryVideoEncoder(const SdpVideoFormat& format) const override;

View File

@ -43,6 +43,7 @@ VideoEncoderWrapper::VideoEncoderWrapper(JNIEnv* jni,
picture_id_ = random.Rand<uint16_t>() & 0x7FFF;
tl0_pic_idx_ = random.Rand<uint8_t>();
}
VideoEncoderWrapper::~VideoEncoderWrapper() = default;
int32_t VideoEncoderWrapper::InitEncode(const VideoCodec* codec_settings,
int32_t number_of_cores,
@ -207,6 +208,10 @@ VideoEncoderWrapper::ScalingSettings VideoEncoderWrapper::GetScalingSettings()
}
}
bool VideoEncoderWrapper::SupportsNativeHandle() const {
return true;
}
const char* VideoEncoderWrapper::ImplementationName() const {
return implementation_name_.c_str();
}

View File

@ -30,6 +30,7 @@ namespace jni {
class VideoEncoderWrapper : public VideoEncoder {
public:
VideoEncoderWrapper(JNIEnv* jni, const JavaRef<jobject>& j_encoder);
~VideoEncoderWrapper() override;
int32_t InitEncode(const VideoCodec* codec_settings,
int32_t number_of_cores,
@ -51,7 +52,7 @@ class VideoEncoderWrapper : public VideoEncoder {
ScalingSettings GetScalingSettings() const override;
bool SupportsNativeHandle() const override { return true; }
bool SupportsNativeHandle() const override;
// Should only be called by JNI.
void OnEncodedFrame(JNIEnv* jni,

View File

@ -49,7 +49,7 @@ class AndroidVideoI420Buffer : public I420BufferInterface {
int width,
int height,
const JavaRef<jobject>& j_video_frame_buffer);
~AndroidVideoI420Buffer();
~AndroidVideoI420Buffer() override;
private:
const uint8_t* DataY() const override { return data_y_; }