[FFmpeg-devel] [PATCH 1/3] libopenmpt: change layout option to use string

Josh de Kock josh at itanimul.li
Wed Jul 20 00:33:56 EEST 2016


Libav doesn't have AV_OPT_TYPE_CHANNEL_LAYOUT
so use strings instead to maintain consistency.
---
 libavformat/libopenmpt.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/libavformat/libopenmpt.c b/libavformat/libopenmpt.c
index 58a02be..17eb611 100644
--- a/libavformat/libopenmpt.c
+++ b/libavformat/libopenmpt.c
@@ -35,15 +35,16 @@ typedef struct OpenMPTContext {
     double duration;
     /* options */
     int sample_rate;
-    int64_t layout;
+    const char *layout;
+    int subsong;
 } OpenMPTContext;
 
 #define OFFSET(x) offsetof(OpenMPTContext, x)
 #define A AV_OPT_FLAG_AUDIO_PARAM
 #define D AV_OPT_FLAG_DECODING_PARAM
 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},
+    {"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_STRING, {.i64 = .str = "stereo"},     0, INT64_MAX, A | D},
     {NULL}
 };
 
@@ -70,17 +71,24 @@ static int read_header_openmpt(AVFormatContext *s)
     OpenMPTContext *openmpt = s->priv_data;
     int64_t size = avio_size(s->pb);
     char *buf = av_malloc(size);
+    int64_t layout;
 
     if (!buf)
         return AVERROR(ENOMEM);
     size = avio_read(s->pb, buf, size);
 
+    layout = av_get_channel_layout(openmpt->layout);
+    if (!layout){
+        av_log(s, AV_LOG_ERROR, "Invalid channel layout: %s\n", openmpt->layout);
+        return AVERROR(EINVAL);
+    }
+
     openmpt->module = openmpt_module_create_from_memory(buf, size, openmpt_logfunc, s, NULL);
     av_freep(&buf);
     if (!openmpt->module)
-            return AVERROR_INVALIDDATA;
+        return AVERROR_INVALIDDATA;
 
-    openmpt->channels   = av_get_channel_layout_nb_channels(openmpt->layout);
+    openmpt->channels   = av_get_channel_layout_nb_channels(layout);
     openmpt->duration   = openmpt_module_get_duration_seconds(openmpt->module);
 
     add_meta(s, "artist",  openmpt_module_get_metadata(openmpt->module, "artist"));
-- 
2.7.4 (Apple Git-66)



More information about the ffmpeg-devel mailing list