From 79215589a1e771423ceeeab54da604d22a7fbff5 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Mon, 7 Apr 2025 16:15:54 +0100 Subject: [PATCH 1/2] Disable FFmpeg logs for encoder --- src/torchcodec/_core/Encoder.cpp | 4 +-- src/torchcodec/_core/FFMPEGCommon.cpp | 34 ++++++++++++++++++++ src/torchcodec/_core/FFMPEGCommon.h | 2 ++ src/torchcodec/_core/SingleStreamDecoder.cpp | 34 -------------------- src/torchcodec/_core/SingleStreamDecoder.h | 1 - 5 files changed, 38 insertions(+), 37 deletions(-) diff --git a/src/torchcodec/_core/Encoder.cpp b/src/torchcodec/_core/Encoder.cpp index 9d5c1dea8..b397a16d8 100644 --- a/src/torchcodec/_core/Encoder.cpp +++ b/src/torchcodec/_core/Encoder.cpp @@ -5,8 +5,6 @@ namespace facebook::torchcodec { AudioEncoder::~AudioEncoder() {} -// TODO-ENCODING: disable ffmpeg logs by default - AudioEncoder::AudioEncoder( const torch::Tensor wf, int sampleRate, @@ -18,6 +16,8 @@ AudioEncoder::AudioEncoder( wf_.dtype()); TORCH_CHECK( wf_.dim() == 2, "waveform must have 2 dimensions, got ", wf_.dim()); + + setFFmpegLogLevel(); AVFormatContext* avFormatContext = nullptr; auto status = avformat_alloc_output_context2( &avFormatContext, nullptr, nullptr, fileName.data()); diff --git a/src/torchcodec/_core/FFMPEGCommon.cpp b/src/torchcodec/_core/FFMPEGCommon.cpp index 64e4da70a..8a3116d3b 100644 --- a/src/torchcodec/_core/FFMPEGCommon.cpp +++ b/src/torchcodec/_core/FFMPEGCommon.cpp @@ -5,6 +5,7 @@ // LICENSE file in the root directory of this source tree. #include "src/torchcodec/_core/FFMPEGCommon.h" +#include #include @@ -158,4 +159,37 @@ SwrContext* allocateSwrContext( return swrContext; } +void setFFmpegLogLevel() { + auto logLevel = AV_LOG_QUIET; + const char* logLevelEnv = std::getenv("TORCHCODEC_FFMPEG_LOG_LEVEL"); + if (logLevelEnv != nullptr) { + if (std::strcmp(logLevelEnv, "QUIET") == 0) { + logLevel = AV_LOG_QUIET; + } else if (std::strcmp(logLevelEnv, "PANIC") == 0) { + logLevel = AV_LOG_PANIC; + } else if (std::strcmp(logLevelEnv, "FATAL") == 0) { + logLevel = AV_LOG_FATAL; + } else if (std::strcmp(logLevelEnv, "ERROR") == 0) { + logLevel = AV_LOG_ERROR; + } else if (std::strcmp(logLevelEnv, "WARNING") == 0) { + logLevel = AV_LOG_WARNING; + } else if (std::strcmp(logLevelEnv, "INFO") == 0) { + logLevel = AV_LOG_INFO; + } else if (std::strcmp(logLevelEnv, "VERBOSE") == 0) { + logLevel = AV_LOG_VERBOSE; + } else if (std::strcmp(logLevelEnv, "DEBUG") == 0) { + logLevel = AV_LOG_DEBUG; + } else if (std::strcmp(logLevelEnv, "TRACE") == 0) { + logLevel = AV_LOG_TRACE; + } else { + TORCH_CHECK( + false, + "Invalid TORCHCODEC_FFMPEG_LOG_LEVEL: ", + logLevelEnv, + ". Use e.g. 'QUIET', 'PANIC', 'VERBOSE', etc."); + } + } + av_log_set_level(logLevel); +} + } // namespace facebook::torchcodec diff --git a/src/torchcodec/_core/FFMPEGCommon.h b/src/torchcodec/_core/FFMPEGCommon.h index fdb30962d..81a9fb8f2 100644 --- a/src/torchcodec/_core/FFMPEGCommon.h +++ b/src/torchcodec/_core/FFMPEGCommon.h @@ -168,4 +168,6 @@ SwrContext* allocateSwrContext( // Returns true if sws_scale can handle unaligned data. bool canSwsScaleHandleUnalignedData(); +void setFFmpegLogLevel(); + } // namespace facebook::torchcodec diff --git a/src/torchcodec/_core/SingleStreamDecoder.cpp b/src/torchcodec/_core/SingleStreamDecoder.cpp index c7c714da3..7ffdda7b9 100644 --- a/src/torchcodec/_core/SingleStreamDecoder.cpp +++ b/src/torchcodec/_core/SingleStreamDecoder.cpp @@ -7,7 +7,6 @@ #include "src/torchcodec/_core/SingleStreamDecoder.h" #include #include -#include #include #include #include @@ -185,39 +184,6 @@ void SingleStreamDecoder::initializeDecoder() { initialized_ = true; } -void SingleStreamDecoder::setFFmpegLogLevel() { - auto logLevel = AV_LOG_QUIET; - const char* logLevelEnv = std::getenv("TORCHCODEC_FFMPEG_LOG_LEVEL"); - if (logLevelEnv != nullptr) { - if (std::strcmp(logLevelEnv, "QUIET") == 0) { - logLevel = AV_LOG_QUIET; - } else if (std::strcmp(logLevelEnv, "PANIC") == 0) { - logLevel = AV_LOG_PANIC; - } else if (std::strcmp(logLevelEnv, "FATAL") == 0) { - logLevel = AV_LOG_FATAL; - } else if (std::strcmp(logLevelEnv, "ERROR") == 0) { - logLevel = AV_LOG_ERROR; - } else if (std::strcmp(logLevelEnv, "WARNING") == 0) { - logLevel = AV_LOG_WARNING; - } else if (std::strcmp(logLevelEnv, "INFO") == 0) { - logLevel = AV_LOG_INFO; - } else if (std::strcmp(logLevelEnv, "VERBOSE") == 0) { - logLevel = AV_LOG_VERBOSE; - } else if (std::strcmp(logLevelEnv, "DEBUG") == 0) { - logLevel = AV_LOG_DEBUG; - } else if (std::strcmp(logLevelEnv, "TRACE") == 0) { - logLevel = AV_LOG_TRACE; - } else { - TORCH_CHECK( - false, - "Invalid TORCHCODEC_FFMPEG_LOG_LEVEL: ", - logLevelEnv, - ". Use e.g. 'QUIET', 'PANIC', 'VERBOSE', etc."); - } - } - av_log_set_level(logLevel); -} - int SingleStreamDecoder::getBestStreamIndex(AVMediaType mediaType) { AVCodecOnlyUseForCallingAVFindBestStream avCodec = nullptr; int streamIndex = diff --git a/src/torchcodec/_core/SingleStreamDecoder.h b/src/torchcodec/_core/SingleStreamDecoder.h index 4879a3b7d..15548bb5d 100644 --- a/src/torchcodec/_core/SingleStreamDecoder.h +++ b/src/torchcodec/_core/SingleStreamDecoder.h @@ -363,7 +363,6 @@ class SingleStreamDecoder { // -------------------------------------------------------------------------- void initializeDecoder(); - void setFFmpegLogLevel(); // -------------------------------------------------------------------------- // DECODING APIS AND RELATED UTILS // -------------------------------------------------------------------------- From 73bdc85ca3871412c6982d1606238f8f46d20830 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Tue, 8 Apr 2025 11:14:38 +0100 Subject: [PATCH 2/2] Use c++ strings --- src/torchcodec/_core/FFMPEGCommon.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/torchcodec/_core/FFMPEGCommon.cpp b/src/torchcodec/_core/FFMPEGCommon.cpp index 8a3116d3b..aad3c23c1 100644 --- a/src/torchcodec/_core/FFMPEGCommon.cpp +++ b/src/torchcodec/_core/FFMPEGCommon.cpp @@ -5,7 +5,6 @@ // LICENSE file in the root directory of this source tree. #include "src/torchcodec/_core/FFMPEGCommon.h" -#include #include @@ -161,25 +160,26 @@ SwrContext* allocateSwrContext( void setFFmpegLogLevel() { auto logLevel = AV_LOG_QUIET; - const char* logLevelEnv = std::getenv("TORCHCODEC_FFMPEG_LOG_LEVEL"); - if (logLevelEnv != nullptr) { - if (std::strcmp(logLevelEnv, "QUIET") == 0) { + const char* logLevelEnvPtr = std::getenv("TORCHCODEC_FFMPEG_LOG_LEVEL"); + if (logLevelEnvPtr != nullptr) { + std::string logLevelEnv(logLevelEnvPtr); + if (logLevelEnv == "QUIET") { logLevel = AV_LOG_QUIET; - } else if (std::strcmp(logLevelEnv, "PANIC") == 0) { + } else if (logLevelEnv == "PANIC") { logLevel = AV_LOG_PANIC; - } else if (std::strcmp(logLevelEnv, "FATAL") == 0) { + } else if (logLevelEnv == "FATAL") { logLevel = AV_LOG_FATAL; - } else if (std::strcmp(logLevelEnv, "ERROR") == 0) { + } else if (logLevelEnv == "ERROR") { logLevel = AV_LOG_ERROR; - } else if (std::strcmp(logLevelEnv, "WARNING") == 0) { + } else if (logLevelEnv == "WARNING") { logLevel = AV_LOG_WARNING; - } else if (std::strcmp(logLevelEnv, "INFO") == 0) { + } else if (logLevelEnv == "INFO") { logLevel = AV_LOG_INFO; - } else if (std::strcmp(logLevelEnv, "VERBOSE") == 0) { + } else if (logLevelEnv == "VERBOSE") { logLevel = AV_LOG_VERBOSE; - } else if (std::strcmp(logLevelEnv, "DEBUG") == 0) { + } else if (logLevelEnv == "DEBUG") { logLevel = AV_LOG_DEBUG; - } else if (std::strcmp(logLevelEnv, "TRACE") == 0) { + } else if (logLevelEnv == "TRACE") { logLevel = AV_LOG_TRACE; } else { TORCH_CHECK(