blob: b10e774a3ee974c68408f66e019279559448c306 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
pbos@webrtc.orgf5d4cb12013-05-17 13:44:48 +000011#include "webrtc/video_engine/vie_image_process_impl.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000012
pbos@webrtc.orgf5d4cb12013-05-17 13:44:48 +000013#include "webrtc/system_wrappers/interface/trace.h"
14#include "webrtc/video_engine/include/vie_errors.h"
15#include "webrtc/video_engine/vie_capturer.h"
16#include "webrtc/video_engine/vie_channel.h"
17#include "webrtc/video_engine/vie_channel_manager.h"
18#include "webrtc/video_engine/vie_defines.h"
19#include "webrtc/video_engine/vie_encoder.h"
20#include "webrtc/video_engine/vie_impl.h"
21#include "webrtc/video_engine/vie_input_manager.h"
22#include "webrtc/video_engine/vie_shared_data.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000023
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000024namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000025
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000026ViEImageProcess* ViEImageProcess::GetInterface(VideoEngine* video_engine) {
niklase@google.com470e71d2011-07-07 08:21:25 +000027#ifdef WEBRTC_VIDEO_ENGINE_IMAGE_PROCESS_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000028 if (!video_engine) {
niklase@google.com470e71d2011-07-07 08:21:25 +000029 return NULL;
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000030 }
andrew@webrtc.orgd72262d2013-05-09 02:12:07 +000031 VideoEngineImpl* vie_impl = static_cast<VideoEngineImpl*>(video_engine);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000032 ViEImageProcessImpl* vie_image_process_impl = vie_impl;
33 // Increase ref count.
34 (*vie_image_process_impl)++;
35 return vie_image_process_impl;
36#else
37 return NULL;
niklase@google.com470e71d2011-07-07 08:21:25 +000038#endif
39}
40
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000041int ViEImageProcessImpl::Release() {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000042 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, shared_data_->instance_id(),
niklase@google.com470e71d2011-07-07 08:21:25 +000043 "ViEImageProcess::Release()");
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000044 // Decrease ref count.
45 (*this)--;
niklase@google.com470e71d2011-07-07 08:21:25 +000046
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000047 int32_t ref_count = GetCount();
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000048 if (ref_count < 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000049 WEBRTC_TRACE(kTraceWarning, kTraceVideo, shared_data_->instance_id(),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000050 "ViEImageProcess release too many times");
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000051 shared_data_->SetLastError(kViEAPIDoesNotExist);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000052 return -1;
53 }
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000054 WEBRTC_TRACE(kTraceInfo, kTraceVideo, shared_data_->instance_id(),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000055 "ViEImageProcess reference count: %d", ref_count);
56 return ref_count;
niklase@google.com470e71d2011-07-07 08:21:25 +000057}
58
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000059ViEImageProcessImpl::ViEImageProcessImpl(ViESharedData* shared_data)
60 : shared_data_(shared_data) {
61 WEBRTC_TRACE(kTraceMemory, kTraceVideo, shared_data_->instance_id(),
niklase@google.com470e71d2011-07-07 08:21:25 +000062 "ViEImageProcessImpl::ViEImageProcessImpl() Ctor");
63}
64
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000065ViEImageProcessImpl::~ViEImageProcessImpl() {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000066 WEBRTC_TRACE(kTraceMemory, kTraceVideo, shared_data_->instance_id(),
niklase@google.com470e71d2011-07-07 08:21:25 +000067 "ViEImageProcessImpl::~ViEImageProcessImpl() Dtor");
68}
69
niklase@google.com470e71d2011-07-07 08:21:25 +000070int ViEImageProcessImpl::RegisterCaptureEffectFilter(
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000071 const int capture_id,
72 ViEEffectFilter& capture_filter) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000073 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000074 "%s(capture_id: %d)", __FUNCTION__, capture_id);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000075 ViEInputManagerScoped is(*(shared_data_->input_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000076 ViECapturer* vie_capture = is.Capture(capture_id);
77 if (!vie_capture) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000078 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000079 "%s: Capture device %d doesn't exist", __FUNCTION__,
80 capture_id);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000081 shared_data_->SetLastError(kViEImageProcessInvalidCaptureId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000082 return -1;
83 }
84 if (vie_capture->RegisterEffectFilter(&capture_filter) != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000085 shared_data_->SetLastError(kViEImageProcessFilterExists);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000086 return -1;
87 }
88 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000089}
90
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000091int ViEImageProcessImpl::DeregisterCaptureEffectFilter(const int capture_id) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000092 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000093 "%s(capture_id: %d)", __FUNCTION__, capture_id);
niklase@google.com470e71d2011-07-07 08:21:25 +000094
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000095 ViEInputManagerScoped is(*(shared_data_->input_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000096 ViECapturer* vie_capture = is.Capture(capture_id);
97 if (!vie_capture) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000098 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000099 "%s: Capture device %d doesn't exist", __FUNCTION__,
100 capture_id);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000101 shared_data_->SetLastError(kViEImageProcessInvalidCaptureId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000102 return -1;
103 }
104 if (vie_capture->RegisterEffectFilter(NULL) != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000105 shared_data_->SetLastError(kViEImageProcessFilterDoesNotExist);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000106 return -1;
107 }
108 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000109}
110
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000111int ViEImageProcessImpl::RegisterSendEffectFilter(
112 const int video_channel,
113 ViEEffectFilter& send_filter) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000114 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000115 "%s(video_channel: %d)", __FUNCTION__, video_channel);
niklase@google.com470e71d2011-07-07 08:21:25 +0000116
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000117 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000118 ViEEncoder* vie_encoder = cs.Encoder(video_channel);
119 if (vie_encoder == NULL) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000120 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000121 "%s: Channel %d doesn't exist", __FUNCTION__, video_channel);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000122 shared_data_->SetLastError(kViEImageProcessInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000123 return -1;
124 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000125
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000126 if (vie_encoder->RegisterEffectFilter(&send_filter) != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000127 shared_data_->SetLastError(kViEImageProcessFilterExists);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000128 return -1;
129 }
130 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000131}
132
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000133int ViEImageProcessImpl::DeregisterSendEffectFilter(const int video_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000134 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000135 "%s(video_channel: %d)", __FUNCTION__, video_channel);
niklase@google.com470e71d2011-07-07 08:21:25 +0000136
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000137 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000138 ViEEncoder* vie_encoder = cs.Encoder(video_channel);
139 if (vie_encoder == NULL) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000140 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000141 "%s: Channel %d doesn't exist", __FUNCTION__, video_channel);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000142 shared_data_->SetLastError(kViEImageProcessInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000143 return -1;
144 }
145 if (vie_encoder->RegisterEffectFilter(NULL) != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000146 shared_data_->SetLastError(kViEImageProcessFilterDoesNotExist);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000147 return -1;
148 }
149 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000150}
151
niklase@google.com470e71d2011-07-07 08:21:25 +0000152int ViEImageProcessImpl::RegisterRenderEffectFilter(
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000153 const int video_channel,
154 ViEEffectFilter& render_filter) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000155 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000156 "%s(video_channel: %d)", __FUNCTION__, video_channel);
niklase@google.com470e71d2011-07-07 08:21:25 +0000157
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000158 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000159 ViEChannel* vie_channel = cs.Channel(video_channel);
160 if (!vie_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000161 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000162 "%s: Channel %d doesn't exist", __FUNCTION__, video_channel);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000163 shared_data_->SetLastError(kViEImageProcessInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000164 return -1;
165 }
166 if (vie_channel->RegisterEffectFilter(&render_filter) != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000167 shared_data_->SetLastError(kViEImageProcessFilterExists);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000168 return -1;
169 }
170 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000171}
172
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000173int ViEImageProcessImpl::DeregisterRenderEffectFilter(const int video_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000174 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000175 "%s(video_channel: %d)", __FUNCTION__, video_channel);
niklase@google.com470e71d2011-07-07 08:21:25 +0000176
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000177 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000178 ViEChannel* vie_channel = cs.Channel(video_channel);
179 if (!vie_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000180 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000181 "%s: Channel %d doesn't exist", __FUNCTION__, video_channel);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000182 shared_data_->SetLastError(kViEImageProcessInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000183 return -1;
184 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000185
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000186 if (vie_channel->RegisterEffectFilter(NULL) != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000187 shared_data_->SetLastError(kViEImageProcessFilterDoesNotExist);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000188 return -1;
189 }
190 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000191}
192
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000193int ViEImageProcessImpl::EnableDeflickering(const int capture_id,
194 const bool enable) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000195 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000196 "%s(capture_id: %d, enable: %d)", __FUNCTION__, capture_id,
niklase@google.com470e71d2011-07-07 08:21:25 +0000197 enable);
198
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000199 ViEInputManagerScoped is(*(shared_data_->input_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000200 ViECapturer* vie_capture = is.Capture(capture_id);
201 if (!vie_capture) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000202 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000203 "%s: Capture device %d doesn't exist", __FUNCTION__,
204 capture_id);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000205 shared_data_->SetLastError(kViEImageProcessInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000206 return -1;
207 }
208
209 if (vie_capture->EnableDeflickering(enable) != 0) {
210 if (enable) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000211 shared_data_->SetLastError(kViEImageProcessAlreadyEnabled);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000212 } else {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000213 shared_data_->SetLastError(kViEImageProcessAlreadyDisabled);
niklase@google.com470e71d2011-07-07 08:21:25 +0000214 }
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000215 return -1;
216 }
217 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000218}
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000219
220int ViEImageProcessImpl::EnableDenoising(const int capture_id,
221 const bool enable) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000222 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000223 "%s(capture_id: %d, enable: %d)", __FUNCTION__, capture_id,
224 enable);
225
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000226 ViEInputManagerScoped is(*(shared_data_->input_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000227 ViECapturer* vie_capture = is.Capture(capture_id);
228 if (!vie_capture) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000229 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000230 "%s: Capture device %d doesn't exist", __FUNCTION__,
231 capture_id);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000232 shared_data_->SetLastError(kViEImageProcessInvalidCaptureId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000233 return -1;
234 }
235
236 if (vie_capture->EnableDenoising(enable) != 0) {
237 if (enable) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000238 shared_data_->SetLastError(kViEImageProcessAlreadyEnabled);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000239 } else {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000240 shared_data_->SetLastError(kViEImageProcessAlreadyDisabled);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000241 }
242 return -1;
243 }
244 return 0;
245}
246
247int ViEImageProcessImpl::EnableColorEnhancement(const int video_channel,
248 const bool enable) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000249 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000250 "%s(video_channel: %d, enable: %d)", __FUNCTION__, video_channel,
251 enable);
252
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000253 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000254 ViEChannel* vie_channel = cs.Channel(video_channel);
255 if (!vie_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000256 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000257 "%s: Channel %d doesn't exist", __FUNCTION__, video_channel);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000258 shared_data_->SetLastError(kViEImageProcessInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000259 return -1;
260 }
261 if (vie_channel->EnableColorEnhancement(enable) != 0) {
262 if (enable) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000263 shared_data_->SetLastError(kViEImageProcessAlreadyEnabled);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000264 } else {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000265 shared_data_->SetLastError(kViEImageProcessAlreadyDisabled);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000266 }
267 return -1;
268 }
269 return 0;
270}
271
pbos@webrtc.orgfe1ef932013-10-21 10:34:43 +0000272void ViEImageProcessImpl::RegisterPreEncodeCallback(
273 int video_channel,
274 I420FrameCallback* pre_encode_callback) {
275 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
276 ViEEncoder* vie_encoder = cs.Encoder(video_channel);
277 vie_encoder->RegisterPreEncodeCallback(pre_encode_callback);
278}
279
280void ViEImageProcessImpl::DeRegisterPreEncodeCallback(int video_channel) {
281 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
282 ViEEncoder* vie_encoder = cs.Encoder(video_channel);
283 assert(vie_encoder != NULL);
284 vie_encoder->DeRegisterPreEncodeCallback();
285}
286
sprang@webrtc.org40709352013-11-26 11:41:59 +0000287void ViEImageProcessImpl::RegisterPostEncodeImageCallback(
288 int video_channel,
289 EncodedImageCallback* post_encode_callback) {
290 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
291 ViEEncoder* vie_encoder = cs.Encoder(video_channel);
292 assert(vie_encoder != NULL);
293 vie_encoder->RegisterPostEncodeImageCallback(post_encode_callback);
294}
295
296void ViEImageProcessImpl::DeRegisterPostEncodeCallback(int video_channel) {
297 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
298 ViEEncoder* vie_encoder = cs.Encoder(video_channel);
299 assert(vie_encoder != NULL);
300 vie_encoder->DeRegisterPostEncodeImageCallback();
301}
302
303void ViEImageProcessImpl::RegisterPreDecodeImageCallback(
304 int video_channel,
305 EncodedImageCallback* pre_decode_callback) {
306 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
307 ViEChannel* channel = cs.Channel(video_channel);
308 channel->RegisterPreDecodeImageCallback(pre_decode_callback);
309}
310
311void ViEImageProcessImpl::DeRegisterPreDecodeCallback(int video_channel) {
312 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
313 ViEChannel* channel = cs.Channel(video_channel);
314 channel->RegisterPreDecodeImageCallback(NULL);
315}
316
pbos@webrtc.orgfe1ef932013-10-21 10:34:43 +0000317void ViEImageProcessImpl::RegisterPreRenderCallback(
318 int video_channel,
319 I420FrameCallback* pre_render_callback) {
320 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
321 ViEChannel* vie_channel = cs.Channel(video_channel);
322 assert(vie_channel != NULL);
323 vie_channel->RegisterPreRenderCallback(pre_render_callback);
324}
325
326void ViEImageProcessImpl::DeRegisterPreRenderCallback(int video_channel) {
327 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
328 ViEChannel* vie_channel = cs.Channel(video_channel);
329 assert(vie_channel != NULL);
330 vie_channel->RegisterPreRenderCallback(NULL);
331}
332
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000333} // namespace webrtc