Re: [FFmpeg-devel] [PATCH] avformat/isom: allow ISO 639 codes for mov

2020-07-07 Thread Baptiste Coudurier
Hey Yongle,

> On Jul 7, 2020, at 10:41 AM, Yongle Lin  wrote:
> 
> On Mon, Jul 6, 2020 at 3:23 PM Baptiste Coudurier <
> baptiste.coudur...@gmail.com> wrote:
> 
>> Hi Yongle, I hope you are doing well
>> 
>>> On Jul 6, 2020, at 11:04 AM, Yongle Lin  wrote:
>>> 
>>> On Fri, Jun 19, 2020 at 5:11 PM Yongle Lin > > wrote:
>>> 
 Allow ISO 639 language codes for text tracks in mov format when
 strictness is set to experimental
 ---
 libavformat/isom.c | 9 +++--
 libavformat/isom.h | 2 +-
 libavformat/movenc.c   | 6 +++---
 tests/fate/mov.mak | 3 +++
 tests/ref/fate/mov-iso639-lang | 4 
 5 files changed, 18 insertions(+), 6 deletions(-)
 create mode 100644 tests/ref/fate/mov-iso639-lang
 
 diff --git a/libavformat/isom.c b/libavformat/isom.c
 index 44c7b13038..de20ea8d8b 100644
 --- a/libavformat/isom.c
 +++ b/libavformat/isom.c
 @@ -416,7 +416,7 @@ static const char mov_mdhd_language_map[][4] = {
"cat", "lat", "que", "grn", "aym", "tat", "uig", "dzo", "jav"
 };
 
 -int ff_mov_iso639_to_lang(const char lang[4], int mp4)
 +int ff_mov_iso639_to_lang(const char lang[4], int mp4, int
 strict_std_compliance)
 {
int i, code = 0;
 
 @@ -426,8 +426,13 @@ int ff_mov_iso639_to_lang(const char lang[4], int
>> mp4)
return i;
}
/* XXX:can we do that in mov too? */
 -if (!mp4)
 +if (!mp4 && (strict_std_compliance != FF_COMPLIANCE_EXPERIMENTAL ||
 !strcmp(lang, "und"))) {
 +if (strcmp(lang, "und"))
 +av_log(NULL, AV_LOG_WARNING, "Non macintosh language is
 discarded for mov\n");
return -1;
 +}
 +if (!mp4)
 +av_log(NULL, AV_LOG_WARNING, "Experimental behavior: enable iso
 639 language in mov\n");
/* handle undefined as such */
if (lang[0] == '\0')
lang = "und";
 diff --git a/libavformat/isom.h b/libavformat/isom.h
 index 41a9c64c11..9d018ebf1f 100644
 --- a/libavformat/isom.h
 +++ b/libavformat/isom.h
 @@ -43,7 +43,7 @@ extern const AVCodecTag ff_codec_movaudio_tags[];
 extern const AVCodecTag ff_codec_movsubtitle_tags[];
 extern const AVCodecTag ff_codec_movdata_tags[];
 
 -int ff_mov_iso639_to_lang(const char lang[4], int mp4);
 +int ff_mov_iso639_to_lang(const char lang[4], int mp4, int
 strict_std_compliance);
 int ff_mov_lang_to_iso639(unsigned code, char to[4]);
 
 struct AVAESCTR;
 diff --git a/libavformat/movenc.c b/libavformat/movenc.c
 index 520aaafb74..4d7a98245e 100644
 --- a/libavformat/movenc.c
 +++ b/libavformat/movenc.c
 @@ -3429,7 +3429,7 @@ static int mov_write_string_data_tag(AVIOContext
 *pb, const char *data, int lang
return size;
} else {
if (!lang)
 -lang = ff_mov_iso639_to_lang("und", 1);
 +lang = ff_mov_iso639_to_lang("und", 1,
>> FF_COMPLIANCE_NORMAL);
avio_wb16(pb, strlen(data)); /* string length */
avio_wb16(pb, lang);
avio_write(pb, data, strlen(data));
 @@ -3468,7 +3468,7 @@ static AVDictionaryEntry
 *get_metadata_lang(AVFormatContext *s,
while ((t2 = av_dict_get(s->metadata, tag2, t2,
 AV_DICT_IGNORE_SUFFIX))) {
len2 = strlen(t2->key);
if (len2 == len + 4 && !strcmp(t->value, t2->value)
 -&& (l = ff_mov_iso639_to_lang(>key[len2 - 3], 1)) >=
>> 0) {
 +&& (l = ff_mov_iso639_to_lang(>key[len2 - 3], 1,
 s->strict_std_compliance)) >= 0) {
*lang = l;
return t;
}
 @@ -6445,7 +6445,7 @@ static int mov_init(AVFormatContext *s)
 
track->st  = st;
track->par = st->codecpar;
 -track->language = ff_mov_iso639_to_lang(lang?lang->value:"und",
 mov->mode!=MODE_MOV);
 +track->language = ff_mov_iso639_to_lang(lang?lang->value:"und",
 mov->mode!=MODE_MOV, s->strict_std_compliance);
if (track->language < 0)
track->language = 32767;  // Unspecified Macintosh language
 code
track->mode = mov->mode;
 diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
 index 7a721d7c95..a85cc1a07d 100644
 --- a/tests/fate/mov.mak
 +++ b/tests/fate/mov.mak
 @@ -29,6 +29,7 @@ FATE_MOV_FFPROBE = fate-mov-neg-firstpts-discard \
   fate-mov-guess-delay-2 \
   fate-mov-guess-delay-3 \
   fate-mov-mp4-with-mov-in24-ver \
 +   fate-mov-iso639-lang \
 
 FATE_MOV_FASTSTART = fate-mov-faststart-4gb-overflow \
 
 @@ -124,3 +125,5 @@ fate-mov-faststart-4gb-overflow: CMP = oneline
 fate-mov-faststart-4gb-overflow: REF = bc875921f151871e787c4b4023269b29
 
 

Re: [FFmpeg-devel] [PATCH] avformat/isom: allow ISO 639 codes for mov

2020-07-07 Thread Yongle Lin
On Mon, Jul 6, 2020 at 3:23 PM Baptiste Coudurier <
baptiste.coudur...@gmail.com> wrote:

> Hi Yongle, I hope you are doing well
>
> > On Jul 6, 2020, at 11:04 AM, Yongle Lin  wrote:
> >
> > On Fri, Jun 19, 2020 at 5:11 PM Yongle Lin  > wrote:
> >
> >> Allow ISO 639 language codes for text tracks in mov format when
> >> strictness is set to experimental
> >> ---
> >> libavformat/isom.c | 9 +++--
> >> libavformat/isom.h | 2 +-
> >> libavformat/movenc.c   | 6 +++---
> >> tests/fate/mov.mak | 3 +++
> >> tests/ref/fate/mov-iso639-lang | 4 
> >> 5 files changed, 18 insertions(+), 6 deletions(-)
> >> create mode 100644 tests/ref/fate/mov-iso639-lang
> >>
> >> diff --git a/libavformat/isom.c b/libavformat/isom.c
> >> index 44c7b13038..de20ea8d8b 100644
> >> --- a/libavformat/isom.c
> >> +++ b/libavformat/isom.c
> >> @@ -416,7 +416,7 @@ static const char mov_mdhd_language_map[][4] = {
> >> "cat", "lat", "que", "grn", "aym", "tat", "uig", "dzo", "jav"
> >> };
> >>
> >> -int ff_mov_iso639_to_lang(const char lang[4], int mp4)
> >> +int ff_mov_iso639_to_lang(const char lang[4], int mp4, int
> >> strict_std_compliance)
> >> {
> >> int i, code = 0;
> >>
> >> @@ -426,8 +426,13 @@ int ff_mov_iso639_to_lang(const char lang[4], int
> mp4)
> >> return i;
> >> }
> >> /* XXX:can we do that in mov too? */
> >> -if (!mp4)
> >> +if (!mp4 && (strict_std_compliance != FF_COMPLIANCE_EXPERIMENTAL ||
> >> !strcmp(lang, "und"))) {
> >> +if (strcmp(lang, "und"))
> >> +av_log(NULL, AV_LOG_WARNING, "Non macintosh language is
> >> discarded for mov\n");
> >> return -1;
> >> +}
> >> +if (!mp4)
> >> +av_log(NULL, AV_LOG_WARNING, "Experimental behavior: enable iso
> >> 639 language in mov\n");
> >> /* handle undefined as such */
> >> if (lang[0] == '\0')
> >> lang = "und";
> >> diff --git a/libavformat/isom.h b/libavformat/isom.h
> >> index 41a9c64c11..9d018ebf1f 100644
> >> --- a/libavformat/isom.h
> >> +++ b/libavformat/isom.h
> >> @@ -43,7 +43,7 @@ extern const AVCodecTag ff_codec_movaudio_tags[];
> >> extern const AVCodecTag ff_codec_movsubtitle_tags[];
> >> extern const AVCodecTag ff_codec_movdata_tags[];
> >>
> >> -int ff_mov_iso639_to_lang(const char lang[4], int mp4);
> >> +int ff_mov_iso639_to_lang(const char lang[4], int mp4, int
> >> strict_std_compliance);
> >> int ff_mov_lang_to_iso639(unsigned code, char to[4]);
> >>
> >> struct AVAESCTR;
> >> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> >> index 520aaafb74..4d7a98245e 100644
> >> --- a/libavformat/movenc.c
> >> +++ b/libavformat/movenc.c
> >> @@ -3429,7 +3429,7 @@ static int mov_write_string_data_tag(AVIOContext
> >> *pb, const char *data, int lang
> >> return size;
> >> } else {
> >> if (!lang)
> >> -lang = ff_mov_iso639_to_lang("und", 1);
> >> +lang = ff_mov_iso639_to_lang("und", 1,
> FF_COMPLIANCE_NORMAL);
> >> avio_wb16(pb, strlen(data)); /* string length */
> >> avio_wb16(pb, lang);
> >> avio_write(pb, data, strlen(data));
> >> @@ -3468,7 +3468,7 @@ static AVDictionaryEntry
> >> *get_metadata_lang(AVFormatContext *s,
> >> while ((t2 = av_dict_get(s->metadata, tag2, t2,
> >> AV_DICT_IGNORE_SUFFIX))) {
> >> len2 = strlen(t2->key);
> >> if (len2 == len + 4 && !strcmp(t->value, t2->value)
> >> -&& (l = ff_mov_iso639_to_lang(>key[len2 - 3], 1)) >=
> 0) {
> >> +&& (l = ff_mov_iso639_to_lang(>key[len2 - 3], 1,
> >> s->strict_std_compliance)) >= 0) {
> >> *lang = l;
> >> return t;
> >> }
> >> @@ -6445,7 +6445,7 @@ static int mov_init(AVFormatContext *s)
> >>
> >> track->st  = st;
> >> track->par = st->codecpar;
> >> -track->language = ff_mov_iso639_to_lang(lang?lang->value:"und",
> >> mov->mode!=MODE_MOV);
> >> +track->language = ff_mov_iso639_to_lang(lang?lang->value:"und",
> >> mov->mode!=MODE_MOV, s->strict_std_compliance);
> >> if (track->language < 0)
> >> track->language = 32767;  // Unspecified Macintosh language
> >> code
> >> track->mode = mov->mode;
> >> diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
> >> index 7a721d7c95..a85cc1a07d 100644
> >> --- a/tests/fate/mov.mak
> >> +++ b/tests/fate/mov.mak
> >> @@ -29,6 +29,7 @@ FATE_MOV_FFPROBE = fate-mov-neg-firstpts-discard \
> >>fate-mov-guess-delay-2 \
> >>fate-mov-guess-delay-3 \
> >>fate-mov-mp4-with-mov-in24-ver \
> >> +   fate-mov-iso639-lang \
> >>
> >> FATE_MOV_FASTSTART = fate-mov-faststart-4gb-overflow \
> >>
> >> @@ -124,3 +125,5 @@ fate-mov-faststart-4gb-overflow: CMP = oneline
> >> fate-mov-faststart-4gb-overflow: REF = bc875921f151871e787c4b4023269b29
> >>
> >> fate-mov-mp4-with-mov-in24-ver: CMD = run ffprobe$(PROGSSUF)$(EXESUF)
> >> 

Re: [FFmpeg-devel] [PATCH] avformat/isom: allow ISO 639 codes for mov

2020-07-06 Thread Baptiste Coudurier
Hi Yongle, I hope you are doing well

> On Jul 6, 2020, at 11:04 AM, Yongle Lin  wrote:
> 
> On Fri, Jun 19, 2020 at 5:11 PM Yongle Lin  > wrote:
> 
>> Allow ISO 639 language codes for text tracks in mov format when
>> strictness is set to experimental
>> ---
>> libavformat/isom.c | 9 +++--
>> libavformat/isom.h | 2 +-
>> libavformat/movenc.c   | 6 +++---
>> tests/fate/mov.mak | 3 +++
>> tests/ref/fate/mov-iso639-lang | 4 
>> 5 files changed, 18 insertions(+), 6 deletions(-)
>> create mode 100644 tests/ref/fate/mov-iso639-lang
>> 
>> diff --git a/libavformat/isom.c b/libavformat/isom.c
>> index 44c7b13038..de20ea8d8b 100644
>> --- a/libavformat/isom.c
>> +++ b/libavformat/isom.c
>> @@ -416,7 +416,7 @@ static const char mov_mdhd_language_map[][4] = {
>> "cat", "lat", "que", "grn", "aym", "tat", "uig", "dzo", "jav"
>> };
>> 
>> -int ff_mov_iso639_to_lang(const char lang[4], int mp4)
>> +int ff_mov_iso639_to_lang(const char lang[4], int mp4, int
>> strict_std_compliance)
>> {
>> int i, code = 0;
>> 
>> @@ -426,8 +426,13 @@ int ff_mov_iso639_to_lang(const char lang[4], int mp4)
>> return i;
>> }
>> /* XXX:can we do that in mov too? */
>> -if (!mp4)
>> +if (!mp4 && (strict_std_compliance != FF_COMPLIANCE_EXPERIMENTAL ||
>> !strcmp(lang, "und"))) {
>> +if (strcmp(lang, "und"))
>> +av_log(NULL, AV_LOG_WARNING, "Non macintosh language is
>> discarded for mov\n");
>> return -1;
>> +}
>> +if (!mp4)
>> +av_log(NULL, AV_LOG_WARNING, "Experimental behavior: enable iso
>> 639 language in mov\n");
>> /* handle undefined as such */
>> if (lang[0] == '\0')
>> lang = "und";
>> diff --git a/libavformat/isom.h b/libavformat/isom.h
>> index 41a9c64c11..9d018ebf1f 100644
>> --- a/libavformat/isom.h
>> +++ b/libavformat/isom.h
>> @@ -43,7 +43,7 @@ extern const AVCodecTag ff_codec_movaudio_tags[];
>> extern const AVCodecTag ff_codec_movsubtitle_tags[];
>> extern const AVCodecTag ff_codec_movdata_tags[];
>> 
>> -int ff_mov_iso639_to_lang(const char lang[4], int mp4);
>> +int ff_mov_iso639_to_lang(const char lang[4], int mp4, int
>> strict_std_compliance);
>> int ff_mov_lang_to_iso639(unsigned code, char to[4]);
>> 
>> struct AVAESCTR;
>> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
>> index 520aaafb74..4d7a98245e 100644
>> --- a/libavformat/movenc.c
>> +++ b/libavformat/movenc.c
>> @@ -3429,7 +3429,7 @@ static int mov_write_string_data_tag(AVIOContext
>> *pb, const char *data, int lang
>> return size;
>> } else {
>> if (!lang)
>> -lang = ff_mov_iso639_to_lang("und", 1);
>> +lang = ff_mov_iso639_to_lang("und", 1, FF_COMPLIANCE_NORMAL);
>> avio_wb16(pb, strlen(data)); /* string length */
>> avio_wb16(pb, lang);
>> avio_write(pb, data, strlen(data));
>> @@ -3468,7 +3468,7 @@ static AVDictionaryEntry
>> *get_metadata_lang(AVFormatContext *s,
>> while ((t2 = av_dict_get(s->metadata, tag2, t2,
>> AV_DICT_IGNORE_SUFFIX))) {
>> len2 = strlen(t2->key);
>> if (len2 == len + 4 && !strcmp(t->value, t2->value)
>> -&& (l = ff_mov_iso639_to_lang(>key[len2 - 3], 1)) >= 0) {
>> +&& (l = ff_mov_iso639_to_lang(>key[len2 - 3], 1,
>> s->strict_std_compliance)) >= 0) {
>> *lang = l;
>> return t;
>> }
>> @@ -6445,7 +6445,7 @@ static int mov_init(AVFormatContext *s)
>> 
>> track->st  = st;
>> track->par = st->codecpar;
>> -track->language = ff_mov_iso639_to_lang(lang?lang->value:"und",
>> mov->mode!=MODE_MOV);
>> +track->language = ff_mov_iso639_to_lang(lang?lang->value:"und",
>> mov->mode!=MODE_MOV, s->strict_std_compliance);
>> if (track->language < 0)
>> track->language = 32767;  // Unspecified Macintosh language
>> code
>> track->mode = mov->mode;
>> diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
>> index 7a721d7c95..a85cc1a07d 100644
>> --- a/tests/fate/mov.mak
>> +++ b/tests/fate/mov.mak
>> @@ -29,6 +29,7 @@ FATE_MOV_FFPROBE = fate-mov-neg-firstpts-discard \
>>fate-mov-guess-delay-2 \
>>fate-mov-guess-delay-3 \
>>fate-mov-mp4-with-mov-in24-ver \
>> +   fate-mov-iso639-lang \
>> 
>> FATE_MOV_FASTSTART = fate-mov-faststart-4gb-overflow \
>> 
>> @@ -124,3 +125,5 @@ fate-mov-faststart-4gb-overflow: CMP = oneline
>> fate-mov-faststart-4gb-overflow: REF = bc875921f151871e787c4b4023269b29
>> 
>> fate-mov-mp4-with-mov-in24-ver: CMD = run ffprobe$(PROGSSUF)$(EXESUF)
>> -show_entries stream=codec_name -select_streams 1
>> $(TARGET_SAMPLES)/mov/mp4-with-mov-in24-ver.mp4
>> +
>> +fate-mov-iso639-lang: CMD = ffmpeg$(PROGSSUF)$(EXESUF) -f lavfi -i
>> sine=frequency=1000:duration=15 -strict experimental -metadata:s:a:0
>> language=deu -y $(TARGET_PATH)/metadata.mov; run ffprobe -show_entries

Re: [FFmpeg-devel] [PATCH] avformat/isom: allow ISO 639 codes for mov

2020-07-06 Thread Yongle Lin
On Fri, Jun 19, 2020 at 5:11 PM Yongle Lin  wrote:

> Allow ISO 639 language codes for text tracks in mov format when
> strictness is set to experimental
> ---
>  libavformat/isom.c | 9 +++--
>  libavformat/isom.h | 2 +-
>  libavformat/movenc.c   | 6 +++---
>  tests/fate/mov.mak | 3 +++
>  tests/ref/fate/mov-iso639-lang | 4 
>  5 files changed, 18 insertions(+), 6 deletions(-)
>  create mode 100644 tests/ref/fate/mov-iso639-lang
>
> diff --git a/libavformat/isom.c b/libavformat/isom.c
> index 44c7b13038..de20ea8d8b 100644
> --- a/libavformat/isom.c
> +++ b/libavformat/isom.c
> @@ -416,7 +416,7 @@ static const char mov_mdhd_language_map[][4] = {
>  "cat", "lat", "que", "grn", "aym", "tat", "uig", "dzo", "jav"
>  };
>
> -int ff_mov_iso639_to_lang(const char lang[4], int mp4)
> +int ff_mov_iso639_to_lang(const char lang[4], int mp4, int
> strict_std_compliance)
>  {
>  int i, code = 0;
>
> @@ -426,8 +426,13 @@ int ff_mov_iso639_to_lang(const char lang[4], int mp4)
>  return i;
>  }
>  /* XXX:can we do that in mov too? */
> -if (!mp4)
> +if (!mp4 && (strict_std_compliance != FF_COMPLIANCE_EXPERIMENTAL ||
> !strcmp(lang, "und"))) {
> +if (strcmp(lang, "und"))
> +av_log(NULL, AV_LOG_WARNING, "Non macintosh language is
> discarded for mov\n");
>  return -1;
> +}
> +if (!mp4)
> +av_log(NULL, AV_LOG_WARNING, "Experimental behavior: enable iso
> 639 language in mov\n");
>  /* handle undefined as such */
>  if (lang[0] == '\0')
>  lang = "und";
> diff --git a/libavformat/isom.h b/libavformat/isom.h
> index 41a9c64c11..9d018ebf1f 100644
> --- a/libavformat/isom.h
> +++ b/libavformat/isom.h
> @@ -43,7 +43,7 @@ extern const AVCodecTag ff_codec_movaudio_tags[];
>  extern const AVCodecTag ff_codec_movsubtitle_tags[];
>  extern const AVCodecTag ff_codec_movdata_tags[];
>
> -int ff_mov_iso639_to_lang(const char lang[4], int mp4);
> +int ff_mov_iso639_to_lang(const char lang[4], int mp4, int
> strict_std_compliance);
>  int ff_mov_lang_to_iso639(unsigned code, char to[4]);
>
>  struct AVAESCTR;
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index 520aaafb74..4d7a98245e 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -3429,7 +3429,7 @@ static int mov_write_string_data_tag(AVIOContext
> *pb, const char *data, int lang
>  return size;
>  } else {
>  if (!lang)
> -lang = ff_mov_iso639_to_lang("und", 1);
> +lang = ff_mov_iso639_to_lang("und", 1, FF_COMPLIANCE_NORMAL);
>  avio_wb16(pb, strlen(data)); /* string length */
>  avio_wb16(pb, lang);
>  avio_write(pb, data, strlen(data));
> @@ -3468,7 +3468,7 @@ static AVDictionaryEntry
> *get_metadata_lang(AVFormatContext *s,
>  while ((t2 = av_dict_get(s->metadata, tag2, t2,
> AV_DICT_IGNORE_SUFFIX))) {
>  len2 = strlen(t2->key);
>  if (len2 == len + 4 && !strcmp(t->value, t2->value)
> -&& (l = ff_mov_iso639_to_lang(>key[len2 - 3], 1)) >= 0) {
> +&& (l = ff_mov_iso639_to_lang(>key[len2 - 3], 1,
> s->strict_std_compliance)) >= 0) {
>  *lang = l;
>  return t;
>  }
> @@ -6445,7 +6445,7 @@ static int mov_init(AVFormatContext *s)
>
>  track->st  = st;
>  track->par = st->codecpar;
> -track->language = ff_mov_iso639_to_lang(lang?lang->value:"und",
> mov->mode!=MODE_MOV);
> +track->language = ff_mov_iso639_to_lang(lang?lang->value:"und",
> mov->mode!=MODE_MOV, s->strict_std_compliance);
>  if (track->language < 0)
>  track->language = 32767;  // Unspecified Macintosh language
> code
>  track->mode = mov->mode;
> diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
> index 7a721d7c95..a85cc1a07d 100644
> --- a/tests/fate/mov.mak
> +++ b/tests/fate/mov.mak
> @@ -29,6 +29,7 @@ FATE_MOV_FFPROBE = fate-mov-neg-firstpts-discard \
> fate-mov-guess-delay-2 \
> fate-mov-guess-delay-3 \
> fate-mov-mp4-with-mov-in24-ver \
> +   fate-mov-iso639-lang \
>
>  FATE_MOV_FASTSTART = fate-mov-faststart-4gb-overflow \
>
> @@ -124,3 +125,5 @@ fate-mov-faststart-4gb-overflow: CMP = oneline
>  fate-mov-faststart-4gb-overflow: REF = bc875921f151871e787c4b4023269b29
>
>  fate-mov-mp4-with-mov-in24-ver: CMD = run ffprobe$(PROGSSUF)$(EXESUF)
> -show_entries stream=codec_name -select_streams 1
> $(TARGET_SAMPLES)/mov/mp4-with-mov-in24-ver.mp4
> +
> +fate-mov-iso639-lang: CMD = ffmpeg$(PROGSSUF)$(EXESUF) -f lavfi -i
> sine=frequency=1000:duration=15 -strict experimental -metadata:s:a:0
> language=deu -y $(TARGET_PATH)/metadata.mov; run ffprobe -show_entries
> stream=index:stream_tags=language $(TARGET_PATH)/metadata.mov; rm
> metadata.mov
> diff --git a/tests/ref/fate/mov-iso639-lang
> b/tests/ref/fate/mov-iso639-lang
> new file mode 100644
> index