Lines Matching refs:frame

38 static void frame_init_single_plane(struct ia_css_frame *frame,
45 struct ia_css_frame *frame,
51 static void frame_init_nv_planes(struct ia_css_frame *frame,
56 static void frame_init_yuv_planes(struct ia_css_frame *frame,
62 static void frame_init_rgb_planes(struct ia_css_frame *frame,
65 static void frame_init_qplane6_planes(struct ia_css_frame *frame);
67 static int frame_allocate_buffer_data(struct ia_css_frame *frame);
69 static int frame_allocate_with_data(struct ia_css_frame **frame,
91 int ia_css_frame_allocate_from_info(struct ia_css_frame **frame,
96 if (!frame || !info)
101 ia_css_frame_allocate(frame, info->res.width, info->res.height,
109 int ia_css_frame_allocate(struct ia_css_frame **frame,
118 if (!frame || width == 0 || height == 0)
125 err = frame_allocate_with_data(frame, width, height, format,
128 if ((*frame) && err == 0)
130 "ia_css_frame_allocate() leave: frame=%p, data(DDR address)=0x%x\n", *frame,
131 (*frame)->data);
134 "ia_css_frame_allocate() leave: frame=%p, data(DDR address)=0x%x\n",
140 void ia_css_frame_free(struct ia_css_frame *frame)
142 IA_CSS_ENTER_PRIVATE("frame = %p", frame);
144 if (frame) {
145 hmm_free(frame->data);
146 kvfree(frame);
164 int ia_css_frame_init_planes(struct ia_css_frame *frame)
166 assert(frame);
168 switch (frame->frame_info.format) {
174 frame_init_raw_single_plane(frame, &frame->planes.raw,
175 frame->frame_info.res.height,
176 frame->frame_info.padded_width,
177 frame->frame_info.raw_bit_depth);
180 frame_init_single_plane(frame, &frame->planes.raw,
181 frame->frame_info.res.height,
182 frame->frame_info.padded_width,
183 frame->frame_info.raw_bit_depth <= 8 ? 1 : 2);
186 frame_init_single_plane(frame, &frame->planes.rgb,
187 frame->frame_info.res.height,
188 frame->frame_info.padded_width, 2);
191 frame_init_single_plane(frame, &frame->planes.rgb,
192 frame->frame_info.res.height,
193 frame->frame_info.padded_width * 4, 1);
196 frame_init_rgb_planes(frame, 1);
198 /* yuyv and uyvu have the same frame layout, only the data
205 frame_init_single_plane(frame, &frame->planes.yuyv,
206 frame->frame_info.res.height,
207 frame->frame_info.padded_width * 2, 1);
211 frame_init_single_plane(frame, &frame->planes.yuyv,
212 frame->frame_info.res.height * 3 / 2 + 3,
213 frame->frame_info.padded_width, 1);
216 frame_init_nv_planes(frame, 4, 1, 1);
218 /* nv12 and nv21 have the same frame layout, only the data
224 frame_init_nv_planes(frame, 2, 2, 1);
227 frame_init_nv_planes(frame, 2, 2, 2);
229 /* nv16 and nv61 have the same frame layout, only the data
234 frame_init_nv_planes(frame, 2, 1, 1);
237 frame_init_yuv_planes(frame, 2, 2, false, 1);
240 frame_init_yuv_planes(frame, 2, 1, false, 1);
243 frame_init_yuv_planes(frame, 1, 1, false, 1);
246 frame_init_yuv_planes(frame, 2, 2, false, 2);
249 frame_init_yuv_planes(frame, 2, 1, false, 2);
252 frame_init_yuv_planes(frame, 2, 2, true, 1);
255 frame_init_yuv_planes(frame, 2, 1, true, 1);
258 frame_init_qplane6_planes(frame);
261 frame_init_single_plane(frame, &frame->planes.binary.data,
262 frame->frame_info.res.height,
263 frame->frame_info.padded_width, 1);
264 frame->planes.binary.size = 0;
362 int ia_css_frame_allocate_with_buffer_size(struct ia_css_frame **frame,
384 *frame = me;
462 static void frame_init_single_plane(struct ia_css_frame *frame,
477 frame->data_bytes = stride * CEIL_MUL2(height, 2);
483 struct ia_css_frame *frame,
491 assert(frame);
496 frame->data_bytes = stride * height;
501 static void frame_init_nv_planes(struct ia_css_frame *frame,
506 unsigned int y_width = frame->frame_info.padded_width;
507 unsigned int y_height = frame->frame_info.res.height;
520 if (frame->frame_info.format == IA_CSS_FRAME_FORMAT_NV12_TILEY) {
532 frame->data_bytes = y_bytes + uv_bytes;
533 frame_init_plane(&frame->planes.nv.y, y_width, y_stride, y_height, 0);
534 frame_init_plane(&frame->planes.nv.uv, uv_width,
539 static void frame_init_yuv_planes(struct ia_css_frame *frame,
545 unsigned int y_width = frame->frame_info.padded_width,
546 y_height = frame->frame_info.res.height,
556 frame->data_bytes = y_bytes + 2 * uv_bytes;
557 frame_init_plane(&frame->planes.yuv.y, y_width, y_stride, y_height, 0);
559 frame_init_plane(&frame->planes.yuv.v, uv_width, uv_stride,
561 frame_init_plane(&frame->planes.yuv.u, uv_width, uv_stride,
564 frame_init_plane(&frame->planes.yuv.u, uv_width, uv_stride,
566 frame_init_plane(&frame->planes.yuv.v, uv_width, uv_stride,
572 static void frame_init_rgb_planes(struct ia_css_frame *frame,
575 unsigned int width = frame->frame_info.res.width,
576 height = frame->frame_info.res.height, stride, bytes;
580 frame->data_bytes = 3 * bytes;
581 frame_init_plane(&frame->planes.planar_rgb.r, width, stride, height, 0);
582 frame_init_plane(&frame->planes.planar_rgb.g,
584 frame_init_plane(&frame->planes.planar_rgb.b,
589 static void frame_init_qplane6_planes(struct ia_css_frame *frame)
591 unsigned int width = frame->frame_info.padded_width / 2,
592 height = frame->frame_info.res.height / 2, bytes, stride;
597 frame->data_bytes = 6 * bytes;
598 frame_init_plane(&frame->planes.plane6.r,
600 frame_init_plane(&frame->planes.plane6.r_at_b,
602 frame_init_plane(&frame->planes.plane6.gr,
604 frame_init_plane(&frame->planes.plane6.gb,
606 frame_init_plane(&frame->planes.plane6.b,
608 frame_init_plane(&frame->planes.plane6.b_at_r,
613 static int frame_allocate_buffer_data(struct ia_css_frame *frame)
615 frame->data = hmm_alloc(frame->data_bytes);
616 if (frame->data == mmgr_NULL)
621 static int frame_allocate_with_data(struct ia_css_frame **frame,
646 *frame = NULL;
648 *frame = me;
675 /* To indicate it is not valid frame. */
734 int ia_css_frame_init_from_info(struct ia_css_frame *frame,
737 frame->frame_info.res.width = frame_info->res.width;
738 frame->frame_info.res.height = frame_info->res.height;
739 frame->frame_info.format = frame_info->format;
740 frame->frame_info.padded_width = frame_info->padded_width;
741 frame->frame_info.raw_bit_depth = frame_info->raw_bit_depth;
742 frame->valid = true;
743 /* To indicate it is not valid frame. */
744 frame->dynamic_queue_id = SH_CSS_INVALID_QUEUE_ID;
745 frame->buf_type = IA_CSS_BUFFER_TYPE_INVALID;
747 return ia_css_frame_init_planes(frame);