webrtc_m130/webrtc/media/engine/webrtcvideoencoderfactory.h
magjed 1e45cc6ee0 Replace WebRtcVideoEncoderFactory::VideoCodec with cricket::VideoCodec
This CL introduces two new functions to the WebRtcVideoEncoderFactory
interface based on cricket::VideoFormat instead of
WebRtcVideoEncoderFactory::VideoCodec. The functions are:
WebRtcVideoEncoderFactory::CreateVideoEncoder() and
WebRtcVideoEncoderFactory::supported_codecs(). In order to make a smooth
transition to the new interface, the old functions are kept, and default
implementations are provided for both the old and new functions so that
external clients can switch from the old to the new functions in peace.
The default implementations will just convert between
cricket::VideoFormat and WebRtcVideoEncoderFactory::VideoCodec. Once all
external clients have updated their code, the plan is to remove the old
functions and all default implementations to make
WebRtcVideoEncoderFactory a pure interface again.

BUG=webrtc:6402,webrtc:6337

Review-Url: https://codereview.webrtc.org/2449993003
Cr-Commit-Position: refs/heads/master@{#14826}
2016-10-28 14:43:52 +00:00

90 lines
3.2 KiB
C++

/*
* Copyright (c) 2013 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 WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENCODERFACTORY_H_
#define WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENCODERFACTORY_H_
#include <vector>
#include "webrtc/common_types.h"
#include "webrtc/media/base/codec.h"
namespace webrtc {
class VideoEncoder;
}
namespace cricket {
class WebRtcVideoEncoderFactory {
public:
// This VideoCodec class is deprecated. Use cricket::VideoCodec directly
// instead and the corresponding factory function. See
// http://crbug/webrtc/6402 for more info.
struct VideoCodec {
webrtc::VideoCodecType type;
std::string name;
VideoCodec(webrtc::VideoCodecType t, const std::string& nm)
: type(t), name(nm) {}
VideoCodec(webrtc::VideoCodecType t,
const std::string& nm,
int w,
int h,
int fr)
: type(t), name(nm) {}
};
virtual ~WebRtcVideoEncoderFactory() {}
// TODO(magjed): Make these functions pure virtual when every external client
// implements it. See http://crbug/webrtc/6402 for more info.
// Caller takes the ownership of the returned object and it should be released
// by calling DestroyVideoEncoder().
virtual webrtc::VideoEncoder* CreateVideoEncoder(
const cricket::VideoCodec& codec);
// Returns a list of supported codecs in order of preference.
virtual const std::vector<cricket::VideoCodec>& supported_codecs() const;
// Caller takes the ownership of the returned object and it should be released
// by calling DestroyVideoEncoder().
// Deprecated: Use cricket::VideoCodec as argument instead. See
// http://crbug/webrtc/6402 for more info.
virtual webrtc::VideoEncoder* CreateVideoEncoder(webrtc::VideoCodecType type);
// Returns a list of supported codecs in order of preference.
// Deprecated: Return cricket::VideoCodecs instead. See
// http://crbug/webrtc/6402 for more info.
virtual const std::vector<VideoCodec>& codecs() const;
// Returns true if encoders created by this factory of the given codec type
// will use internal camera sources, meaning that they don't require/expect
// frames to be delivered via webrtc::VideoEncoder::Encode. This flag is used
// as the internal_source parameter to
// webrtc::ViEExternalCodec::RegisterExternalSendCodec.
virtual bool EncoderTypeHasInternalSource(webrtc::VideoCodecType type) const {
return false;
}
virtual void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) = 0;
private:
// TODO(magjed): Remove these. They are necessary in order to return a const
// reference to a std::vector in the default implementations of codecs() and
// supported_codecs(). See http://crbug/webrtc/6402 for more info.
mutable std::vector<VideoCodec> encoder_codecs_;
mutable std::vector<cricket::VideoCodec> codecs_;
};
} // namespace cricket
#endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENCODERFACTORY_H_