diff mbox

[FFmpeg-devel] lavf/movenc: Fail when codec tag is invalid for format

Message ID 20180824181533.5433-1-jstebbins@jetheaddev.com
State Superseded
Headers show

Commit Message

John Stebbins Aug. 24, 2018, 6:15 p.m. UTC
Fixes ticket #6897
---
 libavformat/movenc.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

Comments

John Stebbins Aug. 24, 2018, 6:42 p.m. UTC | #1
On 08/24/2018 11:15 AM, John Stebbins wrote:
> Fixes ticket #6897
> ---
>  libavformat/movenc.c | 20 +++++++++-----------
>  1 file changed, 9 insertions(+), 11 deletions(-)
>
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index 8ad7026741..fb001f9195 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -1596,23 +1596,21 @@ static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track)
>      if (is_cover_image(track->st))
>          return ff_codec_get_tag(codec_cover_image_tags, track->par->codec_id);
>  
> -    if (track->mode == MODE_MP4 || track->mode == MODE_PSP)
> -        tag = track->par->codec_tag;
> -    else if (track->mode == MODE_ISM)
> -        tag = track->par->codec_tag;
> -    else if (track->mode == MODE_IPOD) {
> +    if (track->mode == MODE_IPOD)
>          if (!av_match_ext(s->url, "m4a") &&
>              !av_match_ext(s->url, "m4v") &&
>              !av_match_ext(s->url, "m4b"))
>              av_log(s, AV_LOG_WARNING, "Warning, extension is not .m4a nor .m4v "
>                     "Quicktime/Ipod might not play the file\n");
> -        tag = track->par->codec_tag;
> -    } else if (track->mode & MODE_3GP)
> -        tag = track->par->codec_tag;
> -    else if (track->mode == MODE_F4V)
> -        tag = track->par->codec_tag;
> -    else
> +
> +    if (track->mode == MODE_MOV)
>          tag = mov_get_codec_tag(s, track);
> +    else
> +        if (av_codec_get_id(s->oformat->codec_tag,
> +                            track->par->codec_tag) == AV_CODEC_ID_NONE)
> +            tag = 0;
> +        else
> +            tag = track->par->codec_tag;
>  
>      return tag;
>  }

On a second look, this really should also validate that the tag is valid for the given track->par->codec_id.  Let me
post a quick update...
diff mbox

Patch

diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 8ad7026741..fb001f9195 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -1596,23 +1596,21 @@  static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track)
     if (is_cover_image(track->st))
         return ff_codec_get_tag(codec_cover_image_tags, track->par->codec_id);
 
-    if (track->mode == MODE_MP4 || track->mode == MODE_PSP)
-        tag = track->par->codec_tag;
-    else if (track->mode == MODE_ISM)
-        tag = track->par->codec_tag;
-    else if (track->mode == MODE_IPOD) {
+    if (track->mode == MODE_IPOD)
         if (!av_match_ext(s->url, "m4a") &&
             !av_match_ext(s->url, "m4v") &&
             !av_match_ext(s->url, "m4b"))
             av_log(s, AV_LOG_WARNING, "Warning, extension is not .m4a nor .m4v "
                    "Quicktime/Ipod might not play the file\n");
-        tag = track->par->codec_tag;
-    } else if (track->mode & MODE_3GP)
-        tag = track->par->codec_tag;
-    else if (track->mode == MODE_F4V)
-        tag = track->par->codec_tag;
-    else
+
+    if (track->mode == MODE_MOV)
         tag = mov_get_codec_tag(s, track);
+    else
+        if (av_codec_get_id(s->oformat->codec_tag,
+                            track->par->codec_tag) == AV_CODEC_ID_NONE)
+            tag = 0;
+        else
+            tag = track->par->codec_tag;
 
     return tag;
 }