Skip to content

Commit 4be7ffd

Browse files
committed
Fix max payload size to clip at 1023
1 parent 3499aa2 commit 4be7ffd

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/class/video/video_device.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,8 @@ static bool _update_streaming_parameters(videod_streaming_interface_t const *stm
419419
uint_fast32_t interval_ms = interval / 10000;
420420
TU_ASSERT(interval_ms);
421421
uint_fast32_t payload_size = (frame_size + interval_ms - 1) / interval_ms + 2;
422+
if (CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE < payload_size)
423+
payload_size = CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE;
422424
param->dwMaxPayloadTransferSize = payload_size;
423425
return true;
424426
}
@@ -478,10 +480,10 @@ static bool _negotiate_streaming_parameters(videod_streaming_interface_t const *
478480
break;
479481
default: return false;
480482
}
481-
param->bFrameIndex = (uint8_t) frmnum;
483+
param->bFrameIndex = (uint8_t)frmnum;
482484
/* Set the parameters determined by the frame */
483485
tusb_desc_cs_video_frm_uncompressed_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum);
484-
param->dwMaxVideoFrameSize = (uint32_t) (frm->wWidth * frm->wHeight * fmt->bBitsPerPixel / 8);
486+
param->dwMaxVideoFrameSize = (uint32_t)(frm->wWidth * frm->wHeight * fmt->bBitsPerPixel / 8);
485487
return true;
486488
}
487489

@@ -536,11 +538,15 @@ static bool _negotiate_streaming_parameters(videod_streaming_interface_t const *
536538
param->dwMaxPayloadTransferSize = 0;
537539
} else {
538540
uint_fast32_t frame_size = param->dwMaxVideoFrameSize;
541+
uint_fast32_t payload_size;
539542
if (!interval_ms) {
540-
param->dwMaxPayloadTransferSize = frame_size + 2;
543+
payload_size = frame_size + 2;
541544
} else {
542-
param->dwMaxPayloadTransferSize = (frame_size + interval_ms - 1) / interval_ms + 2;
545+
payload_size = (frame_size + interval_ms - 1) / interval_ms + 2;
543546
}
547+
if (CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE < payload_size)
548+
payload_size = CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE;
549+
param->dwMaxPayloadTransferSize = payload_size;
544550
}
545551
return true;
546552
}

0 commit comments

Comments
 (0)