diff --git a/src/torchcodec/_core/Encoder.cpp b/src/torchcodec/_core/Encoder.cpp index 41def296a..711be8b74 100644 --- a/src/torchcodec/_core/Encoder.cpp +++ b/src/torchcodec/_core/Encoder.cpp @@ -37,8 +37,6 @@ void validateSampleRate(const AVCodec& avCodec, int sampleRate) { AudioEncoder::~AudioEncoder() {} -// TODO-ENCODING: disable ffmpeg logs by default - AudioEncoder::AudioEncoder( const torch::Tensor wf, int sampleRate, @@ -51,6 +49,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..aad3c23c1 100644 --- a/src/torchcodec/_core/FFMPEGCommon.cpp +++ b/src/torchcodec/_core/FFMPEGCommon.cpp @@ -158,4 +158,38 @@ SwrContext* allocateSwrContext( return swrContext; } +void setFFmpegLogLevel() { + auto logLevel = AV_LOG_QUIET; + 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 (logLevelEnv == "PANIC") { + logLevel = AV_LOG_PANIC; + } else if (logLevelEnv == "FATAL") { + logLevel = AV_LOG_FATAL; + } else if (logLevelEnv == "ERROR") { + logLevel = AV_LOG_ERROR; + } else if (logLevelEnv == "WARNING") { + logLevel = AV_LOG_WARNING; + } else if (logLevelEnv == "INFO") { + logLevel = AV_LOG_INFO; + } else if (logLevelEnv == "VERBOSE") { + logLevel = AV_LOG_VERBOSE; + } else if (logLevelEnv == "DEBUG") { + logLevel = AV_LOG_DEBUG; + } else if (logLevelEnv == "TRACE") { + 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 c389242cd..02ea5ee1e 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 @@ -184,39 +183,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 7b275a209..d532675e8 100644 --- a/src/torchcodec/_core/SingleStreamDecoder.h +++ b/src/torchcodec/_core/SingleStreamDecoder.h @@ -249,7 +249,6 @@ class SingleStreamDecoder { // -------------------------------------------------------------------------- void initializeDecoder(); - void setFFmpegLogLevel(); // -------------------------------------------------------------------------- // DECODING APIS AND RELATED UTILS // --------------------------------------------------------------------------