MCPcopy Create free account
hub / github.com/NVIDIA/DALI / ReadNextFrameWithoutIndex

Method ReadNextFrameWithoutIndex

dali/operators/video/frames_decoder_gpu.cc:648–758  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

646}
647
648bool FramesDecoderGpu::ReadNextFrameWithoutIndex(uint8_t *data) {
649 current_copy_to_output_ = data != nullptr;
650 current_frame_output_ = data;
651
652 int64_t frame_to_return_index = -1;
653
654 // Handle the case, when packet has more frames that we have empty spots
655 // in the buffer.
656 // If so, we need to return frame from the buffer before sending last packet.
657 if (frame_index_if_no_pts_ != 0) {
658 if (NumEmptySpots() < (piped_pts_.size())) {
659 for (size_t i = 0; i < frame_buffer_.size(); ++i) {
660 if (frame_buffer_[i].pts_ == NextFrameIdx()) {
661 frame_to_return_index = i;
662 break;
663 }
664 }
665 }
666 }
667
668 // Initial fill of the buffer
669 frame_returned_ = false;
670 while (
671 // as we may enlarge the buffer make sure to not decode more than num_decode_surfaces_ frames
672 NumEmptySpots() > frame_buffer_.size() - num_decode_surfaces_ &&
673 more_frames_to_decode_ &&
674 !frame_returned_ &&
675 frame_to_return_index == -1) {
676 int ret = av_read_frame(ctx_, packet_);
677 auto packet = AVPacketScope(packet_, av_packet_unref);
678 if (ret == 0) {
679 if (!SendFrameToParser()) {
680 continue;
681 }
682 } else {
683 // Handle the case, when last packet has more frames that we have empty spots
684 // in the buffer.
685 // If so, we need to return frame from the buffer before sending last packet.
686 if (frame_index_if_no_pts_ != 0) {
687 if (NumEmptySpots() < (piped_pts_.size())) {
688 for (size_t i = 0; i < frame_buffer_.size(); ++i) {
689 if (frame_buffer_[i].pts_ == NextFrameIdx()) {
690 frame_to_return_index = i;
691 break;
692 }
693 }
694 }
695 }
696
697 if (frame_to_return_index == -1) {
698 SendLastPacket();
699 more_frames_to_decode_ = false;
700 } else {
701 break;
702 }
703 }
704 }
705

Callers

nothing calls this directly

Calls 5

NextFrameIdxFunction · 0.85
FrameSizeFunction · 0.85
copyD2DFunction · 0.85
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected