[FFmpeg-devel] [PATCH] libopenmpt: add subsong support

Josh de Kock josh at itanimul.li
Mon Jul 18 15:59:17 EEST 2016


---
 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)



More information about the ffmpeg-devel mailing list