--- libavformat/libopenmpt.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/libavformat/libopenmpt.c b/libavformat/libopenmpt.c index 58a02be..4190510 100644 --- a/libavformat/libopenmpt.c +++ b/libavformat/libopenmpt.c @@ -36,6 +36,7 @@ typedef struct OpenMPTContext { /* options */ int sample_rate; int64_t layout; + int subsong; } OpenMPTContext; #define OFFSET(x) offsetof(OpenMPTContext, x) @@ -44,6 +45,7 @@ typedef struct OpenMPTContext { static const AVOption options[] = { {"sample_rate", "set sample rate", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = 48000}, 1000, INT_MAX, A|D}, {"layout", "set channel layout", OFFSET(layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64 = AV_CH_LAYOUT_STEREO}, 0, INT64_MAX, A|D}, + {"subsong", "set subsong", OFFSET(subsong), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1000, A|D}, {NULL} }; @@ -70,6 +72,7 @@ static int read_header_openmpt(AVFormatContext *s) OpenMPTContext *openmpt = s->priv_data; int64_t size = avio_size(s->pb); char *buf = av_malloc(size); + char str[5]; if (!buf) return AVERROR(ENOMEM); @@ -88,6 +91,11 @@ static int read_header_openmpt(AVFormatContext *s) add_meta(s, "encoder", openmpt_module_get_metadata(openmpt->module, "tracker")); add_meta(s, "comment", openmpt_module_get_metadata(openmpt->module, "message")); + int subsong = (openmpt_module_get_num_subsongs(openmpt->module) < openmpt->subsong ? 0 : openmpt->subsong); + snprintf(str, sizeof(str), "%d", subsong); + av_dict_set(&s->metadata, "track", str, 0); + openmpt_module_select_subsong(openmpt->module, subsong-1); + st = avformat_new_stream(s, NULL); if (!st) { openmpt_module_destroy(openmpt->module); -- 2.7.4 (Apple Git-66) _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel