@@ -436,7 +436,7 @@ void VideoDecoder::createFilterGraph(
436436}
437437
438438int VideoDecoder::getBestStreamIndex (AVMediaType mediaType) {
439- AVCodecPtr codec = nullptr ;
439+ AVCodecOnlyUseForCallingAVFindBestStream codec = nullptr ;
440440 int streamNumber =
441441 av_find_best_stream (formatContext_.get (), mediaType, -1 , -1 , &codec, 0 );
442442 return streamNumber;
@@ -452,7 +452,7 @@ void VideoDecoder::addVideoStreamDecoder(
452452 }
453453 TORCH_CHECK (formatContext_.get () != nullptr );
454454
455- AVCodecPtr codec = nullptr ;
455+ AVCodecOnlyUseForCallingAVFindBestStream codec = nullptr ;
456456 int streamNumber = av_find_best_stream (
457457 formatContext_.get (),
458458 AVMEDIA_TYPE_VIDEO,
@@ -465,14 +465,6 @@ void VideoDecoder::addVideoStreamDecoder(
465465 }
466466 TORCH_CHECK (codec != nullptr );
467467
468- StreamMetadata& streamMetadata = containerMetadata_.streams [streamNumber];
469- if (seekMode_ == SeekMode::approximate &&
470- !streamMetadata.averageFps .has_value ()) {
471- throw std::runtime_error (
472- " Seek mode is approximate, but stream " + std::to_string (streamNumber) +
473- " does not have an average fps in its metadata." );
474- }
475-
476468 StreamInfo& streamInfo = streams_[streamNumber];
477469 streamInfo.streamIndex = streamNumber;
478470 streamInfo.timeBase = formatContext_->streams [streamNumber]->time_base ;
@@ -485,8 +477,17 @@ void VideoDecoder::addVideoStreamDecoder(
485477 }
486478
487479 if (options.device .type () == torch::kCUDA ) {
488- codec = findCudaCodec (options.device , streamInfo.stream ->codecpar ->codec_id )
489- .value_or (codec);
480+ codec = makeAVCodecOnlyUseForCallingAVFindBestStream (
481+ findCudaCodec (options.device , streamInfo.stream ->codecpar ->codec_id )
482+ .value_or (codec));
483+ }
484+
485+ StreamMetadata& streamMetadata = containerMetadata_.streams [streamNumber];
486+ if (seekMode_ == SeekMode::approximate &&
487+ !streamMetadata.averageFps .has_value ()) {
488+ throw std::runtime_error (
489+ " Seek mode is approximate, but stream " + std::to_string (streamNumber) +
490+ " does not have an average fps in its metadata." );
490491 }
491492
492493 AVCodecContext* codecContext = avcodec_alloc_context3 (codec);
0 commit comments