Merge pull request #496 from inodlite/unpad-mmal-frames

Handle padded MMAL frames
This commit is contained in:
Mr-Dave
2017-09-16 20:21:00 -06:00
committed by GitHub

View File

@@ -141,6 +141,15 @@ static int create_camera_component(mmalcam_context_ptr mmalcam, const char *mmal
set_video_port_format(mmalcam, video_port->format);
video_port->format->encoding = MMAL_ENCODING_I420;
// set buffer size for an aligned/padded frame
video_port->buffer_size = VCOS_ALIGN_UP(mmalcam->width, 32) *
VCOS_ALIGN_UP(mmalcam->height, 16) * 3 / 2;
if (mmal_port_parameter_set_boolean(video_port, MMAL_PARAMETER_NO_IMAGE_PADDING, 1)
!= MMAL_SUCCESS) {
MOTION_LOG(WRN, TYPE_VIDEO, NO_ERRNO, "MMAL no-padding setup failed");
}
status = mmal_port_format_commit(video_port);
if (status) {
@@ -373,13 +382,14 @@ int mmalcam_next(struct context *cnt, unsigned char *map)
MMAL_BUFFER_HEADER_T *camera_buffer = mmal_queue_wait(mmalcam->camera_buffer_queue);
if (camera_buffer->cmd == 0 && (camera_buffer->flags & MMAL_BUFFER_HEADER_FLAG_FRAME_END)
&& camera_buffer->length == cnt->imgs.size) {
&& camera_buffer->length >= cnt->imgs.size) {
mmal_buffer_header_mem_lock(camera_buffer);
memcpy(map, camera_buffer->data, cnt->imgs.size);
mmal_buffer_header_mem_unlock(camera_buffer);
} else {
MOTION_LOG(ERR, TYPE_VIDEO, NO_ERRNO, "cmd %d flags %08x size %d/%d at %08x",
camera_buffer->cmd, camera_buffer->flags, camera_buffer->length, camera_buffer->alloc_size, camera_buffer->data);
MOTION_LOG(ERR, TYPE_VIDEO, NO_ERRNO, "cmd %d flags %08x size %d/%d at %08x, img_size=%d",
camera_buffer->cmd, camera_buffer->flags, camera_buffer->length,
camera_buffer->alloc_size, camera_buffer->data, cnt->imgs.size);
}
mmal_buffer_header_release(camera_buffer);