@@ -337,28 +337,33 @@ int BetaCudaDeviceInterface::streamPropertyChange(CUVIDEOFORMAT* videoFormat) {
337337// Moral equivalent of avcodec_send_packet(). Here, we pass the AVPacket down to
338338// the NVCUVID parser.
339339int 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+
340346 CUVIDSOURCEDATAPACKET cuvidPacket = {};
347+ cuvidPacket.payload = packet->data ;
348+ cuvidPacket.payload_size = packet->size ;
349+ cuvidPacket.flags = CUVID_PKT_TIMESTAMP;
350+ cuvidPacket.timestamp = packet->pts ;
341351
342- if (packet. get () && packet-> data && packet-> size > 0 ) {
343- applyBSF (packet);
352+ return sendCuvidPacket (cuvidPacket);
353+ }
344354
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 ;
350359
351- } else {
352- // End of stream packet
353- cuvidPacket.flags = CUVID_PKT_ENDOFSTREAM;
354- eofSent_ = true ;
355- }
360+ return sendCuvidPacket (cuvidPacket);
361+ }
356362
363+ int BetaCudaDeviceInterface::sendCuvidPacket (
364+ CUVIDSOURCEDATAPACKET& cuvidPacket) {
357365 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;
362367}
363368
364369void BetaCudaDeviceInterface::applyBSF (ReferenceAVPacket& packet) {
@@ -551,17 +556,7 @@ UniqueAVFrame BetaCudaDeviceInterface::convertCudaFrameToAVFrame(
551556void BetaCudaDeviceInterface::flush () {
552557 isFlushing_ = true ;
553558
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 ();
565560
566561 isFlushing_ = false ;
567562
0 commit comments