1f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org/* 2f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * libjingle 3f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * Copyright 2013 Google Inc. 4f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * 5f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * Redistribution and use in source and binary forms, with or without 6f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * modification, are permitted provided that the following conditions are met: 7f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * 8f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 9f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * this list of conditions and the following disclaimer. 10f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 11f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * this list of conditions and the following disclaimer in the documentation 12f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * and/or other materials provided with the distribution. 13f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * 3. The name of the author may not be used to endorse or promote products 14f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * derived from this software without specific prior written permission. 15f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * 16f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org */ 27f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 28f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org#include "talk/media/webrtc/webrtctexturevideoframe.h" 29f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 302a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/common.h" 312a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/logging.h" 322a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/stream.h" 33f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 34f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org#define UNIMPLEMENTED \ 35f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org LOG(LS_ERROR) << "Call to unimplemented function "<< __FUNCTION__; \ 36f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org ASSERT(false) 37f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 38f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgnamespace cricket { 39f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 40f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgWebRtcTextureVideoFrame::WebRtcTextureVideoFrame( 41f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org webrtc::NativeHandle* handle, int width, int height, int64 elapsed_time, 42f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org int64 time_stamp) 43f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org : handle_(handle), width_(width), height_(height), 44f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org elapsed_time_(elapsed_time), time_stamp_(time_stamp) {} 45f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 46f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgWebRtcTextureVideoFrame::~WebRtcTextureVideoFrame() {} 47f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 48f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgbool WebRtcTextureVideoFrame::InitToBlack( 49f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org int w, int h, size_t pixel_width, size_t pixel_height, int64 elapsed_time, 50f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org int64 time_stamp) { 51f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 52f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return false; 53f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 54f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 55f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgbool WebRtcTextureVideoFrame::Reset( 56f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org uint32 fourcc, int w, int h, int dw, int dh, uint8* sample, 57f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org size_t sample_size, size_t pixel_width, size_t pixel_height, 58f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org int64 elapsed_time, int64 time_stamp, int rotation) { 59f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 60f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return false; 61f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 62f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 63f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgconst uint8* WebRtcTextureVideoFrame::GetYPlane() const { 64f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 65f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return NULL; 66f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 67f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 68f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgconst uint8* WebRtcTextureVideoFrame::GetUPlane() const { 69f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 70f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return NULL; 71f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 72f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 73f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgconst uint8* WebRtcTextureVideoFrame::GetVPlane() const { 74f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 75f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return NULL; 76f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 77f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 78f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orguint8* WebRtcTextureVideoFrame::GetYPlane() { 79f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 80f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return NULL; 81f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 82f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 83f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orguint8* WebRtcTextureVideoFrame::GetUPlane() { 84f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 85f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return NULL; 86f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 87f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 88f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orguint8* WebRtcTextureVideoFrame::GetVPlane() { 89f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 90f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return NULL; 91f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 92f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 93f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgint32 WebRtcTextureVideoFrame::GetYPitch() const { 94f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 95f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return width_; 96f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 97f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 98f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgint32 WebRtcTextureVideoFrame::GetUPitch() const { 99f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 100f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return (width_ + 1) / 2; 101f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 102f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 103f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgint32 WebRtcTextureVideoFrame::GetVPitch() const { 104f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 105f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return (width_ + 1) / 2; 106f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 107f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 108f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgVideoFrame* WebRtcTextureVideoFrame::Copy() const { 109f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return new WebRtcTextureVideoFrame( 110f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org handle_, width_, height_, elapsed_time_, time_stamp_); 111f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 112f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 113f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgbool WebRtcTextureVideoFrame::MakeExclusive() { 114f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 115f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return false; 116f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 117f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 118f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgsize_t WebRtcTextureVideoFrame::CopyToBuffer(uint8* buffer, size_t size) const { 119f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 120f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return 0; 121f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 122f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 123f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgsize_t WebRtcTextureVideoFrame::ConvertToRgbBuffer( 124f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org uint32 to_fourcc, uint8* buffer, size_t size, int stride_rgb) const { 125f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 126f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return 0; 127f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 128f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 129f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgbool WebRtcTextureVideoFrame::CopyToPlanes( 130f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org uint8* dst_y, uint8* dst_u, uint8* dst_v, int32 dst_pitch_y, 131f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org int32 dst_pitch_u, int32 dst_pitch_v) const { 132f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 133f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return false; 134f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 135f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 136f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgvoid WebRtcTextureVideoFrame::CopyToFrame(VideoFrame* dst) const { 137f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 138f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 139f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 1402a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.orgrtc::StreamResult WebRtcTextureVideoFrame::Write( 1412a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::StreamInterface* stream, int* error) { 142f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 1432a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org return rtc::SR_ERROR; 144f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 145f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgvoid WebRtcTextureVideoFrame::StretchToPlanes( 146f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org uint8* dst_y, uint8* dst_u, uint8* dst_v, int32 dst_pitch_y, 147f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org int32 dst_pitch_u, int32 dst_pitch_v, size_t width, size_t height, 148f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org bool interpolate, bool vert_crop) const { 149f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 150f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 151f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 152f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgsize_t WebRtcTextureVideoFrame::StretchToBuffer( 153f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org size_t dst_width, size_t dst_height, uint8* dst_buffer, size_t size, 154f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org bool interpolate, bool vert_crop) const { 155f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 156f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return 0; 157f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 158f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 159f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgvoid WebRtcTextureVideoFrame::StretchToFrame( 160f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org VideoFrame* dst, bool interpolate, bool vert_crop) const { 161f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 162f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 163f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 164f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgVideoFrame* WebRtcTextureVideoFrame::Stretch( 165f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org size_t dst_width, size_t dst_height, bool interpolate, 166f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org bool vert_crop) const { 167f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 168f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return NULL; 169f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 170f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 171f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgbool WebRtcTextureVideoFrame::SetToBlack() { 172f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 173f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return false; 174f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 175f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 176f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.orgVideoFrame* WebRtcTextureVideoFrame::CreateEmptyFrame( 177f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org int w, int h, size_t pixel_width, size_t pixel_height, int64 elapsed_time, 178f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org int64 time_stamp) const { 179f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org UNIMPLEMENTED; 180f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return NULL; 181f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} 182f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org 183f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org} // namespace cricket 184