The 'smpl' chunk is used for sampling music synthesizers, and includes things like the pitch of the sample and how to loop it. This exposes the loop points as "loop_start" and "loop_end" metadata, that the brstm, mca, and scd demuxers already support.

Tested with file output from "Polyphone" soundfont editor.

Signed-off-by: Spencer Alves <impi...@gmail.com>
---
 libavformat/wavdec.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/libavformat/wavdec.c b/libavformat/wavdec.c
index c65e0a2723..fb3749d64d 100644
--- a/libavformat/wavdec.c
+++ b/libavformat/wavdec.c
@@ -595,6 +595,28 @@ static int wav_read_header(AVFormatContext *s)
                 }
             }
             break;
+        case MKTAG('s', 'm', 'p', 'l'):
+            if (size >= 36 && got_fmt && st->codecpar->sample_rate > 0) {
+                unsigned sample_loop_count;
+                avio_skip(pb, 28);
+                sample_loop_count = avio_rl32(pb);
+                avio_skip(pb, 4);
+                for (unsigned i = 0; i < sample_loop_count; i++) {
+                    avio_skip(pb, 8);
+                    if (av_dict_set_int(&s->metadata, "loop_start",
+                            av_rescale(avio_rl32(pb), AV_TIME_BASE,
+                                       st->codecpar->sample_rate),
+                            AV_DICT_MULTIKEY) < 0)
+                        return AVERROR(ENOMEM);
+                    avio_skip(pb, 8);
+                    if (av_dict_set_int(&s->metadata, "loop_end",
+                            av_rescale(avio_rl32(pb), AV_TIME_BASE,
+                                       st->codecpar->sample_rate),
+                            AV_DICT_MULTIKEY) < 0)
+                        return AVERROR(ENOMEM);
+                }
+            }
+            break;
         }
          /* seek to next tag unless we know that we'll run into EOF */
--
2.48.1

_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-le...@ffmpeg.org

Reply via email to