webrtcvideoencoderfactory.h revision 52cd828e1731266272e671020c353f5f89992a83
1be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik/* 2be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * libjingle 3be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * Copyright 2013 Google Inc. 4be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * 5be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * Redistribution and use in source and binary forms, with or without 6be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * modification, are permitted provided that the following conditions are met: 7be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * 8be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * 1. Redistributions of source code must retain the above copyright notice, 9be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * this list of conditions and the following disclaimer. 10be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * 2. Redistributions in binary form must reproduce the above copyright notice, 11be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * this list of conditions and the following disclaimer in the documentation 12a23c9e9f6fc22fe5611def685e1984062b13b560Chris Craik * and/or other materials provided with the distribution. 13be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * 3. The name of the author may not be used to endorse or promote products 14be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * derived from this software without specific prior written permission. 15be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * 16a23c9e9f6fc22fe5611def685e1984062b13b560Chris Craik * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18a23c9e9f6fc22fe5611def685e1984062b13b560Chris Craik * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik */ 27be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik 28be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik#ifndef TALK_MEDIA_WEBRTC_WEBRTCVIDEOENCODERFACTORY_H_ 29be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik#define TALK_MEDIA_WEBRTC_WEBRTCVIDEOENCODERFACTORY_H_ 30eeb03f366d148f92337cfd7577087ade44ab9285John Reck 31eeb03f366d148f92337cfd7577087ade44ab9285John Reck#include "talk/media/base/codec.h" 32be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik#include "webrtc/base/refcount.h" 335ad62731e62b9eb8d13f6e66dd1b57deaebdee11Chris Craik#include "webrtc/common_types.h" 345ad62731e62b9eb8d13f6e66dd1b57deaebdee11Chris Craik 35a23c9e9f6fc22fe5611def685e1984062b13b560Chris Craiknamespace webrtc { 36a23c9e9f6fc22fe5611def685e1984062b13b560Chris Craikclass VideoEncoder; 37be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik} 38a23c9e9f6fc22fe5611def685e1984062b13b560Chris Craik 39be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craiknamespace cricket { 40576fd2a645575980f16b6731dab0f4f150100657Chris Craik 41be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craikclass WebRtcVideoEncoderFactory { 42d0ebf633155e2d637d289933ef7dbc5d86f73881Chris Craik public: 43d0ebf633155e2d637d289933ef7dbc5d86f73881Chris Craik struct VideoCodec { 44be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik webrtc::VideoCodecType type; 45be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik std::string name; 46be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik int max_width; 47be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik int max_height; 48be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik int max_fps; 49be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik 50be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik VideoCodec(webrtc::VideoCodecType t, const std::string& nm, int w, int h, 51be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik int fr) 52be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik : type(t), name(nm), max_width(w), max_height(h), max_fps(fr) { 53be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik } 54be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik }; 55be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik 56be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik virtual ~WebRtcVideoEncoderFactory() {} 57be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik 58be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik // Caller takes the ownership of the returned object and it should be released 59be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik // by calling DestroyVideoEncoder(). 60be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik virtual webrtc::VideoEncoder* CreateVideoEncoder( 61be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik webrtc::VideoCodecType type) = 0; 62be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik 63be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik // Returns a list of supported codecs in order of preference. 64be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik virtual const std::vector<VideoCodec>& codecs() const = 0; 65be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik 66be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik // Returns true if encoders created by this factory of the given codec type 67be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik // will use internal camera sources, meaning that they don't require/expect 68be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik // frames to be delivered via webrtc::VideoEncoder::Encode. This flag is used 69be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik // as the internal_source parameter to 70be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik // webrtc::ViEExternalCodec::RegisterExternalSendCodec. 71be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik virtual bool EncoderTypeHasInternalSource(webrtc::VideoCodecType type) const { 72be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik return false; 73be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik } 74be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik 75be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik virtual void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) = 0; 76be1f909aea58dd8b153538c9fa19cb0bf50bdb17Chris Craik}; 77a23c9e9f6fc22fe5611def685e1984062b13b560Chris Craik 78a23c9e9f6fc22fe5611def685e1984062b13b560Chris Craik} // namespace cricket 79a23c9e9f6fc22fe5611def685e1984062b13b560Chris Craik 80a23c9e9f6fc22fe5611def685e1984062b13b560Chris Craik#endif // TALK_MEDIA_WEBRTC_WEBRTCVIDEOENCODERFACTORY_H_ 81a23c9e9f6fc22fe5611def685e1984062b13b560Chris Craik