diff --git a/libavformat/asf.c b/libavformat/asf.c
index 20bfd8de1e57aab1438913108f187956ab9aea21..ea577cbbd7cd0243f73c799622c8ee105ae35852 100644
--- a/libavformat/asf.c
+++ b/libavformat/asf.c
@@ -152,3 +152,20 @@ const AVMetadataConv ff_asf_metadata_conv[] = {
 //  { "Year"               , "date"        }, TODO: conversion year<->date
     { 0 }
 };
+
+int ff_put_str16_nolen(ByteIOContext *s, const char *tag)
+{
+    const uint8_t *q = tag;
+    int ret = 0;
+
+    while (*q) {
+        uint32_t ch;
+        uint16_t tmp;
+
+        GET_UTF8(ch, *q++, break;)
+        PUT_UTF16(ch, tmp, put_le16(s, tmp);ret += 2;)
+    }
+    put_le16(s, 0);
+    ret += 2;
+    return ret;
+}
diff --git a/libavformat/asf.h b/libavformat/asf.h
index 0ad5e113032426563782be4fa04b04c997289a4f..85e54ccfe9fc11a43dd1e94bdb50992ec098cc87 100644
--- a/libavformat/asf.h
+++ b/libavformat/asf.h
@@ -229,5 +229,6 @@ extern const AVMetadataConv ff_asf_metadata_conv[];
 #define ASF_PL_FLAG_KEY_FRAME 0x80 //1000 0000
 
 extern AVInputFormat asf_demuxer;
+int ff_put_str16_nolen(ByteIOContext *s, const char *tag);
 
 #endif /* AVFORMAT_ASF_H */
diff --git a/libavformat/asfenc.c b/libavformat/asfenc.c
index 3d6e6c8bfe6d81087d628a523999368ac59cb3cf..03b7256397efbbf682de877a248b9883e5d264e4 100644
--- a/libavformat/asfenc.c
+++ b/libavformat/asfenc.c
@@ -203,23 +203,6 @@ static void put_guid(ByteIOContext *s, const ff_asf_guid *g)
     put_buffer(s, *g, sizeof(*g));
 }
 
-static int put_str16_nolen(ByteIOContext *s, const char *tag)
-{
-    const uint8_t *q = tag;
-    int ret = 0;
-
-    while (*q) {
-        uint32_t ch;
-        uint16_t tmp;
-
-        GET_UTF8(ch, *q++, break;)
-        PUT_UTF16(ch, tmp, put_le16(s, tmp);ret += 2;)
-    }
-    put_le16(s, 0);
-    ret += 2;
-    return ret;
-}
-
 static void put_str16(ByteIOContext *s, const char *tag)
 {
     int len;
@@ -228,7 +211,7 @@ static void put_str16(ByteIOContext *s, const char *tag)
     if (url_open_dyn_buf(&dyn_buf) < 0)
         return;
 
-    put_str16_nolen(dyn_buf, tag);
+    ff_put_str16_nolen(dyn_buf, tag);
     len = url_close_dyn_buf(dyn_buf, &pb);
     put_le16(s, len);
     put_buffer(s, pb, len);
@@ -361,7 +344,7 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, int64_t data
         hpos = put_header(pb, &ff_asf_comment_header);
 
         for (n = 0; n < FF_ARRAY_ELEMS(tags); n++) {
-            len = tags[n] ? put_str16_nolen(dyn_buf, tags[n]->value) : 0;
+            len = tags[n] ? ff_put_str16_nolen(dyn_buf, tags[n]->value) : 0;
             put_le16(pb, len);
         }
         len = url_close_dyn_buf(dyn_buf, &buf);
@@ -489,7 +472,7 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, int64_t data
         if ( url_open_dyn_buf(&dyn_buf) < 0)
             return AVERROR(ENOMEM);
 
-        put_str16_nolen(dyn_buf, desc);
+        ff_put_str16_nolen(dyn_buf, desc);
         len = url_close_dyn_buf(dyn_buf, &buf);
         put_le16(pb, len / 2); // "number of characters" = length in bytes / 2