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