@@ -331,28 +331,33 @@ int BetaCudaDeviceInterface::streamPropertyChange(CUVIDEOFORMAT* videoFormat) {
331331// Moral equivalent of avcodec_send_packet(). Here, we pass the AVPacket down to
332332// the NVCUVID parser.
333333int BetaCudaDeviceInterface::sendPacket (ReferenceAVPacket& packet) {
334+ TORCH_CHECK (
335+ packet.get () && packet->data && packet->size > 0 ,
336+ " sendPacket received an empty packet, this is unexpected, please report." );
337+
338+ applyBSF (packet);
339+
334340 CUVIDSOURCEDATAPACKET cuvidPacket = {};
341+ cuvidPacket.payload = packet->data ;
342+ cuvidPacket.payload_size = packet->size ;
343+ cuvidPacket.flags = CUVID_PKT_TIMESTAMP;
344+ cuvidPacket.timestamp = packet->pts ;
335345
336- if (packet. get () && packet-> data && packet-> size > 0 ) {
337- applyBSF (packet);
346+ return sendCuvidPacket (cuvidPacket);
347+ }
338348
339- // Regular packet with data
340- cuvidPacket.payload = packet->data ;
341- cuvidPacket.payload_size = packet->size ;
342- cuvidPacket.flags = CUVID_PKT_TIMESTAMP;
343- cuvidPacket.timestamp = packet->pts ;
349+ int BetaCudaDeviceInterface::sendEOFPacket () {
350+ CUVIDSOURCEDATAPACKET cuvidPacket = {};
351+ cuvidPacket.flags = CUVID_PKT_ENDOFSTREAM;
352+ eofSent_ = true ;
344353
345- } else {
346- // End of stream packet
347- cuvidPacket.flags = CUVID_PKT_ENDOFSTREAM;
348- eofSent_ = true ;
349- }
354+ return sendCuvidPacket (cuvidPacket);
355+ }
350356
357+ int BetaCudaDeviceInterface::sendCuvidPacket (
358+ CUVIDSOURCEDATAPACKET& cuvidPacket) {
351359 CUresult result = cuvidParseVideoData (videoParser_, &cuvidPacket);
352- if (result != CUDA_SUCCESS) {
353- return AVERROR_EXTERNAL;
354- }
355- return AVSUCCESS;
360+ return result == CUDA_SUCCESS ? AVSUCCESS : AVERROR_EXTERNAL;
356361}
357362
358363void BetaCudaDeviceInterface::applyBSF (ReferenceAVPacket& packet) {
@@ -541,17 +546,7 @@ UniqueAVFrame BetaCudaDeviceInterface::convertCudaFrameToAVFrame(
541546void BetaCudaDeviceInterface::flush () {
542547 isFlushing_ = true ;
543548
544- // TODONVDEC P0: simplify flushing and "eofSent_" logic. We should just have a
545- // "sendEofPacket()" function that does the right thing, instead of setting
546- // CUVID_PKT_ENDOFSTREAM in different places.
547- if (!eofSent_) {
548- CUVIDSOURCEDATAPACKET cuvidPacket = {};
549- cuvidPacket.flags = CUVID_PKT_ENDOFSTREAM;
550- CUresult result = cuvidParseVideoData (videoParser_, &cuvidPacket);
551- if (result == CUDA_SUCCESS) {
552- eofSent_ = true ;
553- }
554- }
549+ sendEOFPacket ();
555550
556551 isFlushing_ = false ;
557552
0 commit comments