Skip to content

Commit 05454ef

Browse files
authored
Add TORCHCODEC_FFMPEG_LOG_LEVEL env variable to control level of FFmpeg logs (#575)
1 parent 23c73ea commit 05454ef

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

src/torchcodec/decoders/_core/VideoDecoder.cpp

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "src/torchcodec/decoders/_core/VideoDecoder.h"
88
#include <cstdint>
99
#include <cstdio>
10+
#include <cstdlib>
1011
#include <iostream>
1112
#include <limits>
1213
#include <sstream>
@@ -67,7 +68,7 @@ std::vector<std::string> splitStringWithDelimiters(
6768

6869
VideoDecoder::VideoDecoder(const std::string& videoFilePath, SeekMode seekMode)
6970
: seekMode_(seekMode) {
70-
av_log_set_level(AV_LOG_QUIET);
71+
setFFmpegLogLevel();
7172

7273
AVFormatContext* rawContext = nullptr;
7374
int status =
@@ -86,7 +87,7 @@ VideoDecoder::VideoDecoder(const void* data, size_t length, SeekMode seekMode)
8687
: seekMode_(seekMode) {
8788
TORCH_CHECK(data != nullptr, "Video data buffer cannot be nullptr!");
8889

89-
av_log_set_level(AV_LOG_QUIET);
90+
setFFmpegLogLevel();
9091

9192
constexpr int bufferSize = 64 * 1024;
9293
ioBytesContext_.reset(new AVIOBytesContext(data, length, bufferSize));
@@ -206,6 +207,39 @@ void VideoDecoder::initializeDecoder() {
206207
initialized_ = true;
207208
}
208209

210+
void VideoDecoder::setFFmpegLogLevel() {
211+
auto logLevel = AV_LOG_QUIET;
212+
const char* logLevelEnv = std::getenv("TORCHCODEC_FFMPEG_LOG_LEVEL");
213+
if (logLevelEnv != nullptr) {
214+
if (std::strcmp(logLevelEnv, "QUIET") == 0) {
215+
logLevel = AV_LOG_QUIET;
216+
} else if (std::strcmp(logLevelEnv, "PANIC") == 0) {
217+
logLevel = AV_LOG_PANIC;
218+
} else if (std::strcmp(logLevelEnv, "FATAL") == 0) {
219+
logLevel = AV_LOG_FATAL;
220+
} else if (std::strcmp(logLevelEnv, "ERROR") == 0) {
221+
logLevel = AV_LOG_ERROR;
222+
} else if (std::strcmp(logLevelEnv, "WARNING") == 0) {
223+
logLevel = AV_LOG_WARNING;
224+
} else if (std::strcmp(logLevelEnv, "INFO") == 0) {
225+
logLevel = AV_LOG_INFO;
226+
} else if (std::strcmp(logLevelEnv, "VERBOSE") == 0) {
227+
logLevel = AV_LOG_VERBOSE;
228+
} else if (std::strcmp(logLevelEnv, "DEBUG") == 0) {
229+
logLevel = AV_LOG_DEBUG;
230+
} else if (std::strcmp(logLevelEnv, "TRACE") == 0) {
231+
logLevel = AV_LOG_TRACE;
232+
} else {
233+
TORCH_CHECK(
234+
false,
235+
"Invalid TORCHCODEC_FFMPEG_LOG_LEVEL: ",
236+
logLevelEnv,
237+
". Use e.g. 'QUIET', 'PANIC', 'VERBOSE', etc.");
238+
}
239+
}
240+
av_log_set_level(logLevel);
241+
}
242+
209243
int VideoDecoder::getBestStreamIndex(AVMediaType mediaType) {
210244
AVCodecOnlyUseForCallingAVFindBestStream avCodec = nullptr;
211245
int streamIndex =

src/torchcodec/decoders/_core/VideoDecoder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,7 @@ class VideoDecoder {
354354
// --------------------------------------------------------------------------
355355

356356
void initializeDecoder();
357+
void setFFmpegLogLevel();
357358
// --------------------------------------------------------------------------
358359
// DECODING APIS AND RELATED UTILS
359360
// --------------------------------------------------------------------------

0 commit comments

Comments
 (0)