1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 113f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org#include <stdlib.h> // NULL 123f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org 13c4e10b884294e4622e2470235489809a7bd73a1epbos@webrtc.org#include "webrtc/modules/video_processing/main/source/color_enhancement.h" 14c4e10b884294e4622e2470235489809a7bd73a1epbos@webrtc.org#include "webrtc/modules/video_processing/main/source/color_enhancement_private.h" 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 17b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgnamespace VideoProcessing { 18064085032faed5598251710a3790b4ceaba5b192mikhal@webrtc.org 19064085032faed5598251710a3790b4ceaba5b192mikhal@webrtc.orgint32_t ColorEnhancement(I420VideoFrame* frame) { 209402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org assert(frame); 219402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org // Pointers to U and V color pixels. 229402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org uint8_t* ptr_u; 239402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org uint8_t* ptr_v; 249402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org uint8_t temp_chroma; 259402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org if (frame->IsZeroSize()) { 269402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org return VPM_GENERAL_ERROR; 279402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org } 289402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org if (frame->width() == 0 || frame->height() == 0) { 299402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org return VPM_GENERAL_ERROR; 309402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org } 319402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org 329402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org // Set pointers to first U and V pixels (skip luminance). 339402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org ptr_u = frame->buffer(kUPlane); 349402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org ptr_v = frame->buffer(kVPlane); 359402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org int size_uv = ((frame->width() + 1) / 2) * ((frame->height() + 1) / 2); 369402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org 379402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org // Loop through all chrominance pixels and modify color. 389402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org for (int ix = 0; ix < size_uv; ix++) { 399402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org temp_chroma = colorTable[*ptr_u][*ptr_v]; 409402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org *ptr_v = colorTable[*ptr_v][*ptr_u]; 419402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org *ptr_u = temp_chroma; 429402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org 439402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org ptr_u++; 449402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org ptr_v++; 459402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org } 469402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org return VPM_OK; 47064085032faed5598251710a3790b4ceaba5b192mikhal@webrtc.org} 48064085032faed5598251710a3790b4ceaba5b192mikhal@webrtc.org 49064085032faed5598251710a3790b4ceaba5b192mikhal@webrtc.org} // namespace VideoProcessing 503b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace webrtc 51