7
7
#include " src/torchcodec/decoders/_core/VideoDecoder.h"
8
8
#include < cstdint>
9
9
#include < cstdio>
10
+ #include < cstdlib>
10
11
#include < iostream>
11
12
#include < limits>
12
13
#include < sstream>
@@ -67,7 +68,7 @@ std::vector<std::string> splitStringWithDelimiters(
67
68
68
69
VideoDecoder::VideoDecoder (const std::string& videoFilePath, SeekMode seekMode)
69
70
: seekMode_(seekMode) {
70
- av_log_set_level (AV_LOG_QUIET );
71
+ setFFmpegLogLevel ( );
71
72
72
73
AVFormatContext* rawContext = nullptr ;
73
74
int status =
@@ -86,7 +87,7 @@ VideoDecoder::VideoDecoder(const void* data, size_t length, SeekMode seekMode)
86
87
: seekMode_(seekMode) {
87
88
TORCH_CHECK (data != nullptr , " Video data buffer cannot be nullptr!" );
88
89
89
- av_log_set_level (AV_LOG_QUIET );
90
+ setFFmpegLogLevel ( );
90
91
91
92
constexpr int bufferSize = 64 * 1024 ;
92
93
ioBytesContext_.reset (new AVIOBytesContext (data, length, bufferSize));
@@ -206,6 +207,39 @@ void VideoDecoder::initializeDecoder() {
206
207
initialized_ = true ;
207
208
}
208
209
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
+
209
243
int VideoDecoder::getBestStreamIndex (AVMediaType mediaType) {
210
244
AVCodecOnlyUseForCallingAVFindBestStream avCodec = nullptr ;
211
245
int streamIndex =
0 commit comments