mirror of
https://github.com/hathach/tinyusb.git
synced 2026-03-01 04:58:35 +00:00
Video class: Changed pararameters of payload request to a dedicated structure in order to meet coding guideliness
This commit is contained in:
@ -131,25 +131,25 @@ void tud_resume_cb(void) {
|
||||
#error Demo only supports YUV2 please define CFG_EXAMPLE_VIDEO_DISABLE_MJPEG
|
||||
#endif
|
||||
|
||||
void tud_video_prepare_payload_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, void* payload_buf, size_t payload_size, size_t offset)
|
||||
void tud_video_prepare_payload_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, tud_video_payload_request_t* request)
|
||||
{
|
||||
static uint32_t frame_counter = 0;
|
||||
(void)ctl_idx;
|
||||
(void)stm_idx;
|
||||
|
||||
/* Offset will be zero at the start of a new frame */
|
||||
if (!offset) frame_counter++;
|
||||
if (!request->offset) frame_counter++;
|
||||
|
||||
for (size_t buf_pos = 0; buf_pos < payload_size; buf_pos += 2) {
|
||||
for (size_t buf_pos = 0; buf_pos < request->length; buf_pos += 2) {
|
||||
|
||||
/* Position within the current line (pixel relative) */
|
||||
int line_pos = ((offset + buf_pos)>>1) % FRAME_WIDTH;
|
||||
int line_pos = ((request->offset + buf_pos)>>1) % FRAME_WIDTH;
|
||||
|
||||
/* Choose color based on the position and change the table offset every 4 frames */
|
||||
const uint8_t* color = bar_color[(line_pos/(FRAME_WIDTH / 8) + (frame_counter>>2)) % 8];
|
||||
|
||||
/* Copy pixel data for odd or even pixels */
|
||||
memcpy(&((uint8_t*)payload_buf)[buf_pos], &color[(line_pos & 1) ? 2 : 0], 2);
|
||||
memcpy(&((uint8_t*)request->buf)[buf_pos], &color[(line_pos & 1) ? 2 : 0], 2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -214,12 +214,10 @@ TU_ATTR_WEAK int tud_video_commit_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx,
|
||||
return VIDEO_ERROR_NONE;
|
||||
}
|
||||
|
||||
TU_ATTR_WEAK void tud_video_prepare_payload_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, void* payload_buf, size_t payload_size, size_t offset) {
|
||||
TU_ATTR_WEAK void tud_video_prepare_payload_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, tud_video_payload_request_t* request) {
|
||||
(void) ctl_idx;
|
||||
(void) stm_idx;
|
||||
(void) payload_buf;
|
||||
(void) payload_size;
|
||||
(void) offset;
|
||||
(void) request;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
@ -871,7 +869,12 @@ static uint_fast16_t _prepare_in_payload(videod_streaming_interface_t *stm, uint
|
||||
if (stm->buffer) {
|
||||
memcpy(&ep_buf[hdr_len], stm->buffer + stm->offset, data_len);
|
||||
} else {
|
||||
tud_video_prepare_payload_cb(stm->index_vc, stm->index_vs, &ep_buf[hdr_len], data_len, stm->offset);
|
||||
tud_video_payload_request_t rqst = {
|
||||
.buf = &ep_buf[hdr_len],
|
||||
.length = data_len,
|
||||
.offset = stm->offset
|
||||
};
|
||||
tud_video_prepare_payload_cb(stm->index_vc, stm->index_vs, &rqst);
|
||||
}
|
||||
stm->offset += data_len;
|
||||
remaining -= data_len;
|
||||
|
||||
@ -35,6 +35,16 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Payload request
|
||||
//--------------------------------------------------------------------+
|
||||
typedef struct TU_ATTR_PACKED {
|
||||
void* buf; /* Payload buffer to be filled */
|
||||
size_t length; /* Length of the requested data in bytes */
|
||||
size_t offset; /* Offset within the frame (in bytes) */
|
||||
} tud_video_payload_request_t;
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Application API (Multiple Ports)
|
||||
// CFG_TUD_VIDEO > 1
|
||||
@ -91,7 +101,7 @@ int tud_video_commit_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx,
|
||||
* @param[in] payload_size Size of payload_buf (requested data size)
|
||||
* @param[in] offset Current byte offset relative to given bufsize from tud_video_n_frame_xfer (framesize)
|
||||
* @return video_error_code_t */
|
||||
void tud_video_prepare_payload_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, void* payload_buf, size_t payload_size, size_t offset);
|
||||
void tud_video_prepare_payload_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, tud_video_payload_request_t* request);
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// INTERNAL USBD-CLASS DRIVER API
|
||||
|
||||
Reference in New Issue
Block a user