{
unsigned int ret;
- if (buf_size & (PAGE_SIZE - 1)) {
+ if (PAGE_SHIFT < 0) {
+ camsrc_info("invalid page shift %ld, use original size %u", PAGE_SHIFT, buf_size);
+ ret = buf_size;
+ } else if (buf_size & (PAGE_SIZE - 1)) {
camsrc_info("buf_size(0x%08x) is not 4K aligned", buf_size);
ret = buf_size + PAGE_SIZE;
ret &= PAGE_MASK;
/* emit capture signal */
GST_INFO(" read_capture:gst_camerasrc_emit_capture_signal");
ret = gst_camerasrc_emit_capture_signal(camerasrc, &main_buf, &thumb_buf, &scrnl_buf);
+ if (ret == FALSE) {
+ gst_buffer_unref(buf->buffer);
+ free(buf);
+ return GST_FLOW_ERROR;
+ }
/* free allocated memory
- interleaved data capture mode
goto _caps_info_failed;
}
- strncpy(camerasrc->format_name, caps_format_name, sizeof(camerasrc->format_name));
+ strncpy(camerasrc->format_name, caps_format_name, sizeof(camerasrc->format_name) - 1);
caps_fourcc = MAKE_FOURCC_FROM_STRING(camerasrc->format_name);
_gst_camerasrc_get_frame_size(caps_fourcc, w, h, size);
_gst_camerasrc_get_raw_pixel_info(caps_fourcc, &(camerasrc->pix_format), &(camerasrc->colorspace));