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