/*
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */


#include "vpx_ports/config.h"
#include "vp9/encoder/variance.h"
#include "vp9/encoder/onyx_int.h"


void vp9_arch_x86_encoder_init(VP9_COMP *cpi);
void vp9_arch_arm_encoder_init(VP9_COMP *cpi);

void (*vp9_yv12_copy_partial_frame_ptr)(YV12_BUFFER_CONFIG *src_ybc,
                                        YV12_BUFFER_CONFIG *dst_ybc,
                                        int fraction);
extern void vp9_yv12_copy_partial_frame(YV12_BUFFER_CONFIG *src_ybc,
                                        YV12_BUFFER_CONFIG *dst_ybc,
                                        int fraction);

void vp9_cmachine_specific_config(VP9_COMP *cpi) {
#if CONFIG_RUNTIME_CPU_DETECT
  cpi->rtcd.common                    = &cpi->common.rtcd;
  cpi->rtcd.temporal.apply                 = vp9_temporal_filter_apply_c;
#endif

  vp9_yv12_copy_partial_frame_ptr = vp9_yv12_copy_partial_frame;

#if ARCH_X86 || ARCH_X86_64
  vp9_arch_x86_encoder_init(cpi);
#endif

#if ARCH_ARM
  vp9_arch_arm_encoder_init(cpi);
#endif


}
