[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