1 /*
2 * Copyright(c) 2019 Intel Corporation
3 * Copyright (c) 2019, Alliance for Open Media. All rights reserved
4 *
5 * This source code is subject to the terms of the BSD 2 Clause License and
6 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
7 * was not distributed with this source code in the LICENSE file, you can
8 * obtain it at https://www.aomedia.org/license/software-license. If the Alliance for Open
9 * Media Patent License 1.0 was not distributed with this source code in the
10 * PATENTS file, you can obtain it at https://www.aomedia.org/license/patent-license.
11 */
12 
13 #ifndef EbPictureOperators_h
14 #define EbPictureOperators_h
15 
16 #include "EbPictureOperators_C.h"
17 #include "EbDefinitions.h"
18 #include "EbPictureBufferDesc.h"
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 extern EbErrorType picture_full_distortion32_bits(
24     EbPictureBufferDesc *coeff, uint32_t coeff_luma_origin_index,
25     uint32_t coeff_chroma_origin_index, EbPictureBufferDesc *recon_coeff,
26     uint32_t recon_coeff_luma_origin_index, uint32_t recon_coeff_chroma_origin_index,
27     uint32_t bwidth, uint32_t bheight, uint32_t bwidth_uv, uint32_t bheight_uv,
28     uint64_t y_distortion[DIST_CALC_TOTAL], uint64_t cb_distortion[DIST_CALC_TOTAL],
29     uint64_t cr_distortion[DIST_CALC_TOTAL], uint32_t y_count_non_zero_coeffs,
30     uint32_t cb_count_non_zero_coeffs, uint32_t cr_count_non_zero_coeffs,
31     COMPONENT_TYPE component_type);
32 //Residual Data
33 
34 void compressed_pack_sb(uint8_t *in8_bit_buffer, uint32_t in8_stride, uint8_t *inn_bit_buffer,
35                         uint32_t inn_stride, uint16_t *out16_bit_buffer, uint32_t out_stride,
36                         uint32_t width, uint32_t height);
37 
38 void pack2d_src(uint8_t *in8_bit_buffer, uint32_t in8_stride, uint8_t *inn_bit_buffer,
39                 uint32_t inn_stride, uint16_t *out16_bit_buffer, uint32_t out_stride,
40                 uint32_t width, uint32_t height);
41 
42 void un_pack2d(uint16_t *in16_bit_buffer, uint32_t in_stride, uint8_t *out8_bit_buffer,
43                uint32_t out8_stride, uint8_t *outn_bit_buffer, uint32_t outn_stride, uint32_t width,
44                uint32_t height);
45 
memset16bit(uint16_t * in_ptr,uint16_t value,uint64_t num_of_elements)46 static INLINE void memset16bit(uint16_t *in_ptr, uint16_t value, uint64_t num_of_elements) {
47     uint64_t i;
48 
49     for (i = 0; i < num_of_elements; i++) in_ptr[i] = value;
50 }
51 
memset32bit(uint32_t * in_ptr,uint32_t value,uint64_t num_of_elements)52 static INLINE void memset32bit(uint32_t *in_ptr, uint32_t value, uint64_t num_of_elements) {
53     uint64_t i;
54 
55     for (i = 0; i < num_of_elements; i++) in_ptr[i] = value;
56 }
57 
58 void svt_full_distortion_kernel_cbf_zero32_bits_c(int32_t *coeff, uint32_t coeff_stride,
59                                                   uint64_t distortion_result[DIST_CALC_TOTAL],
60                                                   uint32_t area_width, uint32_t area_height);
61 
62 void svt_full_distortion_kernel32_bits_c(int32_t *coeff, uint32_t coeff_stride,
63                                          int32_t *recon_coeff, uint32_t recon_coeff_stride,
64                                          uint64_t distortion_result[DIST_CALC_TOTAL],
65                                          uint32_t area_width, uint32_t area_height);
66 
67 uint64_t svt_full_distortion_kernel16_bits_c(uint8_t *input, uint32_t input_offset,
68                                              uint32_t input_stride, uint8_t *pred,
69                                              int32_t pred_offset, uint32_t pred_stride,
70                                              uint32_t area_width, uint32_t area_height);
71 
72 void svt_residual_kernel16bit_c(uint16_t *input, uint32_t input_stride, uint16_t *pred,
73                                 uint32_t pred_stride, int16_t *residual, uint32_t residual_stride,
74                                 uint32_t area_width, uint32_t area_height);
75 
76 void svt_residual_kernel8bit_c(uint8_t *input, uint32_t input_stride, uint8_t *pred,
77                                uint32_t pred_stride, int16_t *residual, uint32_t residual_stride,
78                                uint32_t area_width, uint32_t area_height);
79 void pic_copy_kernel_8bit(EbByte src, uint32_t src_stride, EbByte dst, uint32_t dst_stride,
80                           uint32_t area_width, uint32_t area_height);
81 
82 void pic_copy_kernel_16bit(uint16_t *src, uint32_t src_stride, uint16_t *dst, uint32_t dst_stride,
83                            uint32_t width, uint32_t height);
84 
85 EbErrorType svt_av1_picture_copy(EbPictureBufferDesc *src, uint32_t src_luma_origin_index,
86                                  uint32_t src_chroma_origin_index, EbPictureBufferDesc *dst,
87                                  uint32_t dst_luma_origin_index, uint32_t dst_chroma_origin_index,
88                                  uint32_t area_width, uint32_t area_height,
89                                  uint32_t chroma_area_width, uint32_t chroma_area_height,
90                                  uint32_t component_mask, uint8_t hbd);
91 
92 #ifdef __cplusplus
93 }
94 #endif
95 #endif // EbPictureOperators_h
96