[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