/*
 *  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;
#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


}
