1 /* 2 * Support for Intel Camera Imaging ISP subsystem. 3 * Copyright (c) 2015, Intel Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms and conditions of the GNU General Public License, 7 * version 2, as published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 */ 14 15 #include <assert_support.h> 16 #include <ia_css_frame_public.h> 17 #include <ia_css_frame.h> 18 #include <ia_css_binary.h> 19 #define IA_CSS_INCLUDE_CONFIGURATIONS 20 #include "ia_css_isp_configs.h" 21 #include "isp.h" 22 #include "ia_css_ref.host.h" 23 24 void 25 ia_css_ref_config( 26 struct sh_css_isp_ref_isp_config *to, 27 const struct ia_css_ref_configuration *from, 28 unsigned int size) 29 { 30 unsigned int elems_a = ISP_VEC_NELEMS, i; 31 32 if (from->ref_frames[0]) { 33 ia_css_dma_configure_from_info(&to->port_b, &from->ref_frames[0]->info); 34 to->width_a_over_b = elems_a / to->port_b.elems; 35 to->dvs_frame_delay = from->dvs_frame_delay; 36 } else { 37 to->width_a_over_b = 1; 38 to->dvs_frame_delay = 0; 39 to->port_b.elems = elems_a; 40 } 41 for (i = 0; i < MAX_NUM_VIDEO_DELAY_FRAMES; i++) { 42 if (from->ref_frames[i]) { 43 to->ref_frame_addr_y[i] = from->ref_frames[i]->data + 44 from->ref_frames[i]->planes.yuv.y.offset; 45 to->ref_frame_addr_c[i] = from->ref_frames[i]->data + 46 from->ref_frames[i]->planes.yuv.u.offset; 47 } else { 48 to->ref_frame_addr_y[i] = 0; 49 to->ref_frame_addr_c[i] = 0; 50 } 51 } 52 53 /* Assume divisiblity here, may need to generalize to fixed point. */ 54 assert(elems_a % to->port_b.elems == 0); 55 } 56 57 void 58 ia_css_ref_configure( 59 const struct ia_css_binary *binary, 60 const struct ia_css_frame * const *ref_frames, 61 const uint32_t dvs_frame_delay) 62 { 63 struct ia_css_ref_configuration config; 64 unsigned int i; 65 66 for (i = 0; i < MAX_NUM_VIDEO_DELAY_FRAMES; i++) 67 config.ref_frames[i] = ref_frames[i]; 68 config.dvs_frame_delay = dvs_frame_delay; 69 ia_css_configure_ref(binary, &config); 70 } 71 72 void 73 ia_css_init_ref_state( 74 struct sh_css_isp_ref_dmem_state *state, 75 unsigned int size) 76 { 77 (void)size; 78 assert(MAX_NUM_VIDEO_DELAY_FRAMES >= 2); 79 state->ref_in_buf_idx = 0; 80 state->ref_out_buf_idx = 1; 81 } 82