static void uvc_video_encode_isoc(struct usb_request *req, struct uvc_video *video, struct uvc_buffer *buf) { void *mem = req->buf; int len = video->req_size; int ret; /* */ ret = uvc_video_encode_header(video, buf, mem, len); mem += ret; len -= ret; /* */ ret = uvc_video_encode_data(video, buf, mem, len); len -= ret; req->length = video->req_size - len; if (buf->buf.bytesused == video->queue.buf_used) { video->queue.buf_used = 0; buf->state = UVC_BUF_STATE_DONE; uvc_queue_next_buffer(&video->queue, buf); video->fid ^= UVC_STREAM_FID; } }
static void uvc_video_encode_bulk(struct urb *urb, struct uvc_streaming *stream, struct uvc_buffer *buf) { u8 *mem = urb->transfer_buffer; int len = stream->urb_size, ret; if (buf == NULL) { urb->transfer_buffer_length = 0; return; } /* If the URB is the first of its payload, add the header. */ if (stream->bulk.header_size == 0) { ret = uvc_video_encode_header(stream, buf, mem, len); stream->bulk.header_size = ret; stream->bulk.payload_size += ret; mem += ret; len -= ret; } /* Process video data. */ ret = uvc_video_encode_data(stream, buf, mem, len); stream->bulk.payload_size += ret; len -= ret; if (buf->bytesused == stream->queue.buf_used || stream->bulk.payload_size == stream->bulk.max_payload_size) { if (buf->bytesused == stream->queue.buf_used) { stream->queue.buf_used = 0; buf->state = UVC_BUF_STATE_READY; buf->buf.v4l2_buf.sequence = ++stream->sequence; uvc_queue_next_buffer(&stream->queue, buf); stream->last_fid ^= UVC_STREAM_FID; } stream->bulk.header_size = 0; stream->bulk.payload_size = 0; } urb->transfer_buffer_length = stream->urb_size - len; }
static void uvc_video_encode_bulk(struct usb_request *req, struct uvc_video *video, struct uvc_buffer *buf) { void *mem = req->buf; int len = video->req_size; int ret; /* */ if (video->payload_size == 0) { ret = uvc_video_encode_header(video, buf, mem, len); video->payload_size += ret; mem += ret; len -= ret; } /* */ len = min((int)(video->max_payload_size - video->payload_size), len); ret = uvc_video_encode_data(video, buf, mem, len); video->payload_size += ret; len -= ret; req->length = video->req_size - len; req->zero = video->payload_size == video->max_payload_size; if (buf->buf.bytesused == video->queue.buf_used) { video->queue.buf_used = 0; buf->state = UVC_BUF_STATE_DONE; uvc_queue_next_buffer(&video->queue, buf); video->fid ^= UVC_STREAM_FID; video->payload_size = 0; } if (video->payload_size == video->max_payload_size || buf->buf.bytesused == video->queue.buf_used) video->payload_size = 0; }