Le primidi 1er thermidor, an CCXXIV, Josh de Kock a écrit :
> ---
>  libavformat/libopenmpt.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/libavformat/libopenmpt.c b/libavformat/libopenmpt.c
> index 58a02be..286a908 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 = -2},                      -2,   INT_MAX,  
>  A|D},

Missing documentation about -2 = default and -1 = all. It could be constants
associated to the option, maybe.

>      {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,17 @@ 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"));
>  

> +    if (openmpt->subsong >= openmpt_module_get_num_subsongs(openmpt->module))
> +        openmpt->subsong = -2;

IMHO, an error would be more correct.

> +
> +    if (openmpt->subsong != -2) {

> +        if (openmpt->subsong >= 0) {
> +            snprintf(str, sizeof(str), "%d", openmpt->subsong + 1);
> +            av_dict_set(&s->metadata, "track", str, 0);
> +        }

av_dict_set_int(); and str would have been too short.

> +        openmpt_module_select_subsong(openmpt->module, openmpt->subsong);
> +    }
> +
>      st = avformat_new_stream(s, NULL);
>      if (!st) {
>          openmpt_module_destroy(openmpt->module);

Regards,

-- 
  Nicolas George

Attachment: signature.asc
Description: Digital signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to