From c063d87232a7bb747d4a2a3c8c7aab6d9df3ccbd Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 26 Oct 2019 21:12:51 -0400 Subject: [PATCH] Fix bug with files with multiple video or audio streams --- src/main.c | 2 +- src/parsing/media.c | 43 ++++++++++++++++++++++++------------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/main.c b/src/main.c index 67b79dc..77d5fd6 100644 --- a/src/main.c +++ b/src/main.c @@ -5,7 +5,7 @@ #define EPILOG "Made by simon987 . Released under GPL-3.0" -static const char *const Version = "1.0.5"; +static const char *const Version = "1.0.6"; static const char *const usage[] = { "sist2 scan [OPTION]... PATH", "sist2 index [OPTION]... INDEX", diff --git a/src/parsing/media.c b/src/parsing/media.c index ff83eb2..c4beede 100644 --- a/src/parsing/media.c +++ b/src/parsing/media.c @@ -151,6 +151,7 @@ void append_audio_meta(AVFormatContext *pFormatCtx, document_t *doc) { void parse_media(const char *filepath, document_t *doc) { int video_stream = -1; + int audio_stream = -1; AVFormatContext *pFormatCtx = avformat_alloc_context(); if (pFormatCtx == NULL) { @@ -169,31 +170,35 @@ void parse_media(const char *filepath, document_t *doc) { AVStream *stream = pFormatCtx->streams[i]; if (stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { - meta_line_t *meta_audio = malloc(sizeof(meta_line_t)); - meta_audio->key = MetaMediaAudioCodec; - meta_audio->intval = stream->codecpar->codec_id; - APPEND_META(doc, meta_audio) - - append_audio_meta(pFormatCtx, doc); + if (audio_stream == -1) { + meta_line_t *meta_audio = malloc(sizeof(meta_line_t)); + meta_audio->key = MetaMediaAudioCodec; + meta_audio->intval = stream->codecpar->codec_id; + APPEND_META(doc, meta_audio) + append_audio_meta(pFormatCtx, doc); + audio_stream = i; + } } else if (stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { - meta_line_t *meta_vid = malloc(sizeof(meta_line_t)); - meta_vid->key = MetaMediaVideoCodec; - meta_vid->intval = stream->codecpar->codec_id; - APPEND_META(doc, meta_vid) + if (video_stream == -1) { + meta_line_t *meta_vid = malloc(sizeof(meta_line_t)); + meta_vid->key = MetaMediaVideoCodec; + meta_vid->intval = stream->codecpar->codec_id; + APPEND_META(doc, meta_vid) - meta_line_t *meta_w = malloc(sizeof(meta_line_t)); - meta_w->key = MetaWidth; - meta_w->intval = stream->codecpar->width; - APPEND_META(doc, meta_w) + meta_line_t *meta_w = malloc(sizeof(meta_line_t)); + meta_w->key = MetaWidth; + meta_w->intval = stream->codecpar->width; + APPEND_META(doc, meta_w) - meta_line_t *meta_h = malloc(sizeof(meta_line_t)); - meta_h->key = MetaHeight; - meta_h->intval = stream->codecpar->height; - APPEND_META(doc, meta_h) + meta_line_t *meta_h = malloc(sizeof(meta_line_t)); + meta_h->key = MetaHeight; + meta_h->intval = stream->codecpar->height; + APPEND_META(doc, meta_h) - video_stream = i; + video_stream = i; + } } }