[filescanner_ffmpeg] Update to use ffmpeg's new stream->codecpar

- keep some compability with older ffmpeg/libav, but also remove some
This commit is contained in:
ejurgensen 2017-02-27 21:34:58 +01:00
parent 1e180b5ce8
commit d933e171d4
2 changed files with 26 additions and 141 deletions

View File

@ -245,6 +245,7 @@ FORK_MODULES_CHECK([FORKED], [LIBAV],
[libavfilter/avfilter.h]) [libavfilter/avfilter.h])
FORK_CHECK_DECLS([av_packet_unref], [libavcodec/avcodec.h]) FORK_CHECK_DECLS([av_packet_unref], [libavcodec/avcodec.h])
FORK_CHECK_DECLS([av_packet_rescale_ts], [libavcodec/avcodec.h]) FORK_CHECK_DECLS([av_packet_rescale_ts], [libavcodec/avcodec.h])
FORK_CHECK_DECLS([avcodec_parameters_alloc], [libavcodec/avcodec.h])
FORK_CHECK_DECLS([avformat_alloc_output_context2], FORK_CHECK_DECLS([avformat_alloc_output_context2],
[libavformat/avformat.h]) [libavformat/avformat.h])
FORK_CHECK_DECLS([av_frame_alloc], [libavutil/frame.h]) FORK_CHECK_DECLS([av_frame_alloc], [libavutil/frame.h])

View File

@ -240,17 +240,9 @@ static const struct metadata_map md_map_id3[] =
static int static int
#if LIBAVUTIL_VERSION_MAJOR >= 52 || (LIBAVUTIL_VERSION_MAJOR == 51 && LIBAVUTIL_VERSION_MINOR >= 5)
extract_metadata_core(struct media_file_info *mfi, AVDictionary *md, const struct metadata_map *md_map) extract_metadata_core(struct media_file_info *mfi, AVDictionary *md, const struct metadata_map *md_map)
#else
extract_metadata_core(struct media_file_info *mfi, AVMetadata *md, const struct metadata_map *md_map)
#endif
{ {
#if LIBAVUTIL_VERSION_MAJOR >= 52 || (LIBAVUTIL_VERSION_MAJOR == 51 && LIBAVUTIL_VERSION_MINOR >= 5)
AVDictionaryEntry *mdt; AVDictionaryEntry *mdt;
#else
AVMetadataTag *mdt;
#endif
char **strval; char **strval;
uint32_t *intval; uint32_t *intval;
int mdcount; int mdcount;
@ -260,11 +252,7 @@ extract_metadata_core(struct media_file_info *mfi, AVMetadata *md, const struct
#if 0 #if 0
/* Dump all the metadata reported by ffmpeg */ /* Dump all the metadata reported by ffmpeg */
mdt = NULL; mdt = NULL;
#if LIBAVUTIL_VERSION_MAJOR >= 52 || (LIBAVUTIL_VERSION_MAJOR == 51 && LIBAVUTIL_VERSION_MINOR >= 5)
while ((mdt = av_dict_get(md, "", mdt, AV_DICT_IGNORE_SUFFIX)) != NULL) while ((mdt = av_dict_get(md, "", mdt, AV_DICT_IGNORE_SUFFIX)) != NULL)
#else
while ((mdt = av_metadata_get(md, "", mdt, AV_METADATA_IGNORE_SUFFIX)) != NULL)
#endif
fprintf(stderr, " -> %s = %s\n", mdt->key, mdt->value); fprintf(stderr, " -> %s = %s\n", mdt->key, mdt->value);
#endif #endif
@ -273,11 +261,7 @@ extract_metadata_core(struct media_file_info *mfi, AVMetadata *md, const struct
/* Extract actual metadata */ /* Extract actual metadata */
for (i = 0; md_map[i].key != NULL; i++) for (i = 0; md_map[i].key != NULL; i++)
{ {
#if LIBAVUTIL_VERSION_MAJOR >= 52 || (LIBAVUTIL_VERSION_MAJOR == 51 && LIBAVUTIL_VERSION_MINOR >= 5)
mdt = av_dict_get(md, md_map[i].key, NULL, 0); mdt = av_dict_get(md, md_map[i].key, NULL, 0);
#else
mdt = av_metadata_get(md, md_map[i].key, NULL, 0);
#endif
if (mdt == NULL) if (mdt == NULL)
continue; continue;
@ -367,19 +351,16 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
AVDictionary *options; AVDictionary *options;
const struct metadata_map *extra_md_map; const struct metadata_map *extra_md_map;
struct http_icy_metadata *icy_metadata; struct http_icy_metadata *icy_metadata;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35) enum AVMediaType codec_type;
enum AVCodecID codec_id; enum AVCodecID codec_id;
enum AVCodecID video_codec_id; enum AVCodecID video_codec_id;
enum AVCodecID audio_codec_id; enum AVCodecID audio_codec_id;
#else enum AVSampleFormat sample_fmt;
enum CodecID codec_id;
enum CodecID video_codec_id;
enum CodecID audio_codec_id;
#endif
AVStream *video_stream; AVStream *video_stream;
AVStream *audio_stream; AVStream *audio_stream;
char *path; char *path;
int mdcount; int mdcount;
int sample_rate;
int i; int i;
int ret; int ret;
@ -387,7 +368,6 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
options = NULL; options = NULL;
path = strdup(file); path = strdup(file);
#if LIBAVFORMAT_VERSION_MAJOR >= 54 || (LIBAVFORMAT_VERSION_MAJOR == 53 && LIBAVFORMAT_VERSION_MINOR >= 3)
if (mfi->data_kind == DATA_KIND_HTTP) if (mfi->data_kind == DATA_KIND_HTTP)
{ {
# ifndef HAVE_FFMPEG # ifndef HAVE_FFMPEG
@ -409,9 +389,7 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
if (options) if (options)
av_dict_free(&options); av_dict_free(&options);
#else
ret = av_open_input_file(&ctx, path, NULL, 0, NULL);
#endif
if (ret != 0) if (ret != 0)
{ {
DPRINTF(E_WARN, L_SCAN, "Cannot open media file '%s': %s\n", path, err2str(ret)); DPRINTF(E_WARN, L_SCAN, "Cannot open media file '%s': %s\n", path, err2str(ret));
@ -422,20 +400,12 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
free(path); free(path);
#if LIBAVFORMAT_VERSION_MAJOR >= 54 || (LIBAVFORMAT_VERSION_MAJOR == 53 && LIBAVFORMAT_VERSION_MINOR >= 3)
ret = avformat_find_stream_info(ctx, NULL); ret = avformat_find_stream_info(ctx, NULL);
#else
ret = av_find_stream_info(ctx);
#endif
if (ret < 0) if (ret < 0)
{ {
DPRINTF(E_WARN, L_SCAN, "Cannot get stream info of '%s': %s\n", path, err2str(ret)); DPRINTF(E_WARN, L_SCAN, "Cannot get stream info of '%s': %s\n", path, err2str(ret));
#if LIBAVFORMAT_VERSION_MAJOR >= 54 || (LIBAVFORMAT_VERSION_MAJOR == 53 && LIBAVFORMAT_VERSION_MINOR >= 21)
avformat_close_input(&ctx); avformat_close_input(&ctx);
#else
av_close_input_file(ctx);
#endif
return -1; return -1;
} }
@ -447,29 +417,28 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
DPRINTF(E_DBG, L_SCAN, "File has %d streams\n", ctx->nb_streams); DPRINTF(E_DBG, L_SCAN, "File has %d streams\n", ctx->nb_streams);
/* Extract codec IDs, check for video */ /* Extract codec IDs, check for video */
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
video_codec_id = AV_CODEC_ID_NONE; video_codec_id = AV_CODEC_ID_NONE;
video_stream = NULL; video_stream = NULL;
audio_codec_id = AV_CODEC_ID_NONE; audio_codec_id = AV_CODEC_ID_NONE;
audio_stream = NULL; audio_stream = NULL;
#else
video_codec_id = CODEC_ID_NONE;
video_stream = NULL;
audio_codec_id = CODEC_ID_NONE;
audio_stream = NULL;
#endif
for (i = 0; i < ctx->nb_streams; i++) for (i = 0; i < ctx->nb_streams; i++)
{ {
switch (ctx->streams[i]->codec->codec_type) #if HAVE_DECL_AVCODEC_PARAMETERS_ALLOC
{ codec_type = ctx->streams[i]->codecpar->codec_type;
#if LIBAVCODEC_VERSION_MAJOR >= 53 || (LIBAVCODEC_VERSION_MAJOR == 52 && LIBAVCODEC_VERSION_MINOR >= 64) codec_id = ctx->streams[i]->codecpar->codec_id;
case AVMEDIA_TYPE_VIDEO: sample_rate = ctx->streams[i]->codecpar->sample_rate;
sample_fmt = ctx->streams[i]->codecpar->format;
#else #else
case CODEC_TYPE_VIDEO: codec_type = ctx->streams[i]->codec->codec_type;
codec_id = ctx->streams[i]->codec->codec_id;
sample_rate = ctx->streams[i]->codec->sample_rate;
sample_fmt = ctx->streams[i]->codec->sample_fmt;
#endif #endif
switch (codec_type)
{
case AVMEDIA_TYPE_VIDEO:
#if LIBAVFORMAT_VERSION_MAJOR >= 55 || (LIBAVFORMAT_VERSION_MAJOR == 54 && LIBAVFORMAT_VERSION_MINOR >= 6) #if LIBAVFORMAT_VERSION_MAJOR >= 55 || (LIBAVFORMAT_VERSION_MAJOR == 54 && LIBAVFORMAT_VERSION_MINOR >= 6)
if (ctx->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC) if (ctx->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC)
{ {
@ -487,21 +456,23 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
{ {
DPRINTF(E_DBG, L_SCAN, "File has video (stream %d)\n", i); DPRINTF(E_DBG, L_SCAN, "File has video (stream %d)\n", i);
mfi->has_video = 1;
video_stream = ctx->streams[i]; video_stream = ctx->streams[i];
video_codec_id = video_stream->codec->codec_id; video_codec_id = codec_id;
mfi->has_video = 1;
} }
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 53 || (LIBAVCODEC_VERSION_MAJOR == 52 && LIBAVCODEC_VERSION_MINOR >= 64)
case AVMEDIA_TYPE_AUDIO: case AVMEDIA_TYPE_AUDIO:
#else
case CODEC_TYPE_AUDIO:
#endif
if (!audio_stream) if (!audio_stream)
{ {
audio_stream = ctx->streams[i]; audio_stream = ctx->streams[i];
audio_codec_id = audio_stream->codec->codec_id; audio_codec_id = codec_id;
mfi->samplerate = sample_rate;
mfi->bits_per_sample = 8 * av_get_bytes_per_sample(sample_fmt);
if (mfi->bits_per_sample == 0)
mfi->bits_per_sample = av_get_bits_per_sample(codec_id);
} }
break; break;
@ -510,19 +481,11 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
} }
} }
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
if (audio_codec_id == AV_CODEC_ID_NONE) if (audio_codec_id == AV_CODEC_ID_NONE)
#else
if (audio_codec_id == CODEC_ID_NONE)
#endif
{ {
DPRINTF(E_DBG, L_SCAN, "File has no audio streams, discarding\n"); DPRINTF(E_DBG, L_SCAN, "File has no audio streams, discarding\n");
#if LIBAVFORMAT_VERSION_MAJOR >= 54 || (LIBAVFORMAT_VERSION_MAJOR == 53 && LIBAVFORMAT_VERSION_MINOR >= 21)
avformat_close_input(&ctx); avformat_close_input(&ctx);
#else
av_close_input_file(ctx);
#endif
return -1; return -1;
} }
@ -578,61 +541,26 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
http_icy_metadata_free(icy_metadata, 0); http_icy_metadata_free(icy_metadata, 0);
} }
/* Get some more information on the audio stream */
if (audio_stream)
{
if (audio_stream->codec->sample_rate != 0)
mfi->samplerate = audio_stream->codec->sample_rate;
/* Try sample format first */
#if LIBAVUTIL_VERSION_MAJOR >= 52 || (LIBAVUTIL_VERSION_MAJOR == 51 && LIBAVUTIL_VERSION_MINOR >= 4)
mfi->bits_per_sample = 8 * av_get_bytes_per_sample(audio_stream->codec->sample_fmt);
#elif LIBAVCODEC_VERSION_MAJOR >= 53
mfi->bits_per_sample = av_get_bits_per_sample_fmt(audio_stream->codec->sample_fmt);
#else
mfi->bits_per_sample = av_get_bits_per_sample_format(audio_stream->codec->sample_fmt);
#endif
if (mfi->bits_per_sample == 0)
{
/* Try codec */
mfi->bits_per_sample = av_get_bits_per_sample(audio_codec_id);
}
DPRINTF(E_DBG, L_SCAN, "samplerate %d, bps %d\n", mfi->samplerate, mfi->bits_per_sample);
}
/* Check codec */ /* Check codec */
extra_md_map = NULL; extra_md_map = NULL;
codec_id = (mfi->has_video) ? video_codec_id : audio_codec_id; codec_id = (mfi->has_video) ? video_codec_id : audio_codec_id;
switch (codec_id) switch (codec_id)
{ {
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_AAC: case AV_CODEC_ID_AAC:
#else
case CODEC_ID_AAC:
#endif
DPRINTF(E_DBG, L_SCAN, "AAC\n"); DPRINTF(E_DBG, L_SCAN, "AAC\n");
mfi->type = strdup("m4a"); mfi->type = strdup("m4a");
mfi->codectype = strdup("mp4a"); mfi->codectype = strdup("mp4a");
mfi->description = strdup("AAC audio file"); mfi->description = strdup("AAC audio file");
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_ALAC: case AV_CODEC_ID_ALAC:
#else
case CODEC_ID_ALAC:
#endif
DPRINTF(E_DBG, L_SCAN, "ALAC\n"); DPRINTF(E_DBG, L_SCAN, "ALAC\n");
mfi->type = strdup("m4a"); mfi->type = strdup("m4a");
mfi->codectype = strdup("alac"); mfi->codectype = strdup("alac");
mfi->description = strdup("Apple Lossless audio file"); mfi->description = strdup("Apple Lossless audio file");
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_FLAC: case AV_CODEC_ID_FLAC:
#else
case CODEC_ID_FLAC:
#endif
DPRINTF(E_DBG, L_SCAN, "FLAC\n"); DPRINTF(E_DBG, L_SCAN, "FLAC\n");
mfi->type = strdup("flac"); mfi->type = strdup("flac");
mfi->codectype = strdup("flac"); mfi->codectype = strdup("flac");
@ -641,37 +569,23 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
extra_md_map = md_map_vorbis; extra_md_map = md_map_vorbis;
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_APE: case AV_CODEC_ID_APE:
#else
case CODEC_ID_APE:
#endif
DPRINTF(E_DBG, L_SCAN, "APE\n"); DPRINTF(E_DBG, L_SCAN, "APE\n");
mfi->type = strdup("ape"); mfi->type = strdup("ape");
mfi->codectype = strdup("ape"); mfi->codectype = strdup("ape");
mfi->description = strdup("Monkey's audio"); mfi->description = strdup("Monkey's audio");
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_MUSEPACK7: case AV_CODEC_ID_MUSEPACK7:
case AV_CODEC_ID_MUSEPACK8: case AV_CODEC_ID_MUSEPACK8:
#else
case CODEC_ID_MUSEPACK7:
case CODEC_ID_MUSEPACK8:
#endif
DPRINTF(E_DBG, L_SCAN, "Musepack\n"); DPRINTF(E_DBG, L_SCAN, "Musepack\n");
mfi->type = strdup("mpc"); mfi->type = strdup("mpc");
mfi->codectype = strdup("mpc"); mfi->codectype = strdup("mpc");
mfi->description = strdup("Musepack audio file"); mfi->description = strdup("Musepack audio file");
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_MPEG4: /* Video */ case AV_CODEC_ID_MPEG4: /* Video */
case AV_CODEC_ID_H264: case AV_CODEC_ID_H264:
#else
case CODEC_ID_MPEG4: /* Video */
case CODEC_ID_H264:
#endif
DPRINTF(E_DBG, L_SCAN, "MPEG4 video\n"); DPRINTF(E_DBG, L_SCAN, "MPEG4 video\n");
mfi->type = strdup("m4v"); mfi->type = strdup("m4v");
mfi->codectype = strdup("mp4v"); mfi->codectype = strdup("mp4v");
@ -680,11 +594,7 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
extra_md_map = md_map_tv; extra_md_map = md_map_tv;
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_MP3: case AV_CODEC_ID_MP3:
#else
case CODEC_ID_MP3:
#endif
DPRINTF(E_DBG, L_SCAN, "MP3\n"); DPRINTF(E_DBG, L_SCAN, "MP3\n");
mfi->type = strdup("mp3"); mfi->type = strdup("mp3");
mfi->codectype = strdup("mpeg"); mfi->codectype = strdup("mpeg");
@ -693,11 +603,7 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
extra_md_map = md_map_id3; extra_md_map = md_map_id3;
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_VORBIS: case AV_CODEC_ID_VORBIS:
#else
case CODEC_ID_VORBIS:
#endif
DPRINTF(E_DBG, L_SCAN, "VORBIS\n"); DPRINTF(E_DBG, L_SCAN, "VORBIS\n");
mfi->type = strdup("ogg"); mfi->type = strdup("ogg");
mfi->codectype = strdup("ogg"); mfi->codectype = strdup("ogg");
@ -706,48 +612,30 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
extra_md_map = md_map_vorbis; extra_md_map = md_map_vorbis;
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_WMAV1: case AV_CODEC_ID_WMAV1:
case AV_CODEC_ID_WMAV2: case AV_CODEC_ID_WMAV2:
case AV_CODEC_ID_WMAVOICE: case AV_CODEC_ID_WMAVOICE:
#else
case CODEC_ID_WMAV1:
case CODEC_ID_WMAV2:
case CODEC_ID_WMAVOICE:
#endif
DPRINTF(E_DBG, L_SCAN, "WMA Voice\n"); DPRINTF(E_DBG, L_SCAN, "WMA Voice\n");
mfi->type = strdup("wma"); mfi->type = strdup("wma");
mfi->codectype = strdup("wmav"); mfi->codectype = strdup("wmav");
mfi->description = strdup("WMA audio file"); mfi->description = strdup("WMA audio file");
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_WMAPRO: case AV_CODEC_ID_WMAPRO:
#else
case CODEC_ID_WMAPRO:
#endif
DPRINTF(E_DBG, L_SCAN, "WMA Pro\n"); DPRINTF(E_DBG, L_SCAN, "WMA Pro\n");
mfi->type = strdup("wmap"); mfi->type = strdup("wmap");
mfi->codectype = strdup("wma"); mfi->codectype = strdup("wma");
mfi->description = strdup("WMA audio file"); mfi->description = strdup("WMA audio file");
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_WMALOSSLESS: case AV_CODEC_ID_WMALOSSLESS:
#else
case CODEC_ID_WMALOSSLESS:
#endif
DPRINTF(E_DBG, L_SCAN, "WMA Lossless\n"); DPRINTF(E_DBG, L_SCAN, "WMA Lossless\n");
mfi->type = strdup("wma"); mfi->type = strdup("wma");
mfi->codectype = strdup("wmal"); mfi->codectype = strdup("wmal");
mfi->description = strdup("WMA audio file"); mfi->description = strdup("WMA audio file");
break; break;
#if LIBAVCODEC_VERSION_MAJOR >= 55 || (LIBAVCODEC_VERSION_MAJOR == 54 && LIBAVCODEC_VERSION_MINOR >= 35)
case AV_CODEC_ID_PCM_S16LE ... AV_CODEC_ID_PCM_F64LE: case AV_CODEC_ID_PCM_S16LE ... AV_CODEC_ID_PCM_F64LE:
#else
case CODEC_ID_PCM_S16LE ... CODEC_ID_PCM_F64LE:
#endif
if (strcmp(ctx->iformat->name, "aiff") == 0) if (strcmp(ctx->iformat->name, "aiff") == 0)
{ {
DPRINTF(E_DBG, L_SCAN, "AIFF\n"); DPRINTF(E_DBG, L_SCAN, "AIFF\n");
@ -818,11 +706,7 @@ scan_metadata_ffmpeg(const char *file, struct media_file_info *mfi)
} }
skip_extract: skip_extract:
#if LIBAVFORMAT_VERSION_MAJOR >= 54 || (LIBAVFORMAT_VERSION_MAJOR == 53 && LIBAVFORMAT_VERSION_MINOR >= 21)
avformat_close_input(&ctx); avformat_close_input(&ctx);
#else
av_close_input_file(ctx);
#endif
if (mdcount == 0) if (mdcount == 0)
DPRINTF(E_WARN, L_SCAN, "ffmpeg/libav could not extract any metadata\n"); DPRINTF(E_WARN, L_SCAN, "ffmpeg/libav could not extract any metadata\n");