@@ -337,28 +337,33 @@ int BetaCudaDeviceInterface::streamPropertyChange(CUVIDEOFORMAT* videoFormat) {
337
337
// Moral equivalent of avcodec_send_packet(). Here, we pass the AVPacket down to
338
338
// the NVCUVID parser.
339
339
int BetaCudaDeviceInterface::sendPacket (ReferenceAVPacket& packet) {
340
+ TORCH_CHECK (
341
+ packet.get () && packet->data && packet->size > 0 ,
342
+ " sendPacket received an empty packet, this is unexpected, please report." );
343
+
344
+ applyBSF (packet);
345
+
340
346
CUVIDSOURCEDATAPACKET cuvidPacket = {};
347
+ cuvidPacket.payload = packet->data ;
348
+ cuvidPacket.payload_size = packet->size ;
349
+ cuvidPacket.flags = CUVID_PKT_TIMESTAMP;
350
+ cuvidPacket.timestamp = packet->pts ;
341
351
342
- if (packet. get () && packet-> data && packet-> size > 0 ) {
343
- applyBSF (packet);
352
+ return sendCuvidPacket (cuvidPacket);
353
+ }
344
354
345
- // Regular packet with data
346
- cuvidPacket.payload = packet->data ;
347
- cuvidPacket.payload_size = packet->size ;
348
- cuvidPacket.flags = CUVID_PKT_TIMESTAMP;
349
- cuvidPacket.timestamp = packet->pts ;
355
+ int BetaCudaDeviceInterface::sendEOFPacket () {
356
+ CUVIDSOURCEDATAPACKET cuvidPacket = {};
357
+ cuvidPacket.flags = CUVID_PKT_ENDOFSTREAM;
358
+ eofSent_ = true ;
350
359
351
- } else {
352
- // End of stream packet
353
- cuvidPacket.flags = CUVID_PKT_ENDOFSTREAM;
354
- eofSent_ = true ;
355
- }
360
+ return sendCuvidPacket (cuvidPacket);
361
+ }
356
362
363
+ int BetaCudaDeviceInterface::sendCuvidPacket (
364
+ CUVIDSOURCEDATAPACKET& cuvidPacket) {
357
365
CUresult result = cuvidParseVideoData (videoParser_, &cuvidPacket);
358
- if (result != CUDA_SUCCESS) {
359
- return AVERROR_EXTERNAL;
360
- }
361
- return AVSUCCESS;
366
+ return result == CUDA_SUCCESS ? AVSUCCESS : AVERROR_EXTERNAL;
362
367
}
363
368
364
369
void BetaCudaDeviceInterface::applyBSF (ReferenceAVPacket& packet) {
@@ -551,17 +556,7 @@ UniqueAVFrame BetaCudaDeviceInterface::convertCudaFrameToAVFrame(
551
556
void BetaCudaDeviceInterface::flush () {
552
557
isFlushing_ = true ;
553
558
554
- // TODONVDEC P0: simplify flushing and "eofSent_" logic. We should just have a
555
- // "sendEofPacket()" function that does the right thing, instead of setting
556
- // CUVID_PKT_ENDOFSTREAM in different places.
557
- if (!eofSent_) {
558
- CUVIDSOURCEDATAPACKET cuvidPacket = {};
559
- cuvidPacket.flags = CUVID_PKT_ENDOFSTREAM;
560
- CUresult result = cuvidParseVideoData (videoParser_, &cuvidPacket);
561
- if (result == CUDA_SUCCESS) {
562
- eofSent_ = true ;
563
- }
564
- }
559
+ sendEOFPacket ();
565
560
566
561
isFlushing_ = false ;
567
562
0 commit comments