On 02/08/2013 02:01 PM, Anton Khirnov wrote:
This won't be true for ID3 attached picture.

Also stop allocating now useless dummy ASFStreams for ASF native
attached pictures.
---
  libavformat/asfdec.c |   11 ++++++-----
  1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
index 3329814..186414c 100644
--- a/libavformat/asfdec.c
+++ b/libavformat/asfdec.c
@@ -22,6 +22,7 @@
  //#define DEBUG

  #include "libavutil/attributes.h"
+#include "libavutil/avassert.h"
  #include "libavutil/avstring.h"
  #include "libavutil/bswap.h"
  #include "libavutil/common.h"
@@ -193,7 +194,6 @@ static int asf_read_picture(AVFormatContext *s, int len)
      enum  AVCodecID id    = AV_CODEC_ID_NONE;
      char mimetype[64];
      uint8_t  *desc = NULL;
-    ASFStream *ast = NULL;
      AVStream   *st = NULL;
      int ret, type, picsize, desc_len;

@@ -248,12 +248,10 @@ static int asf_read_picture(AVFormatContext *s, int len)
          goto fail;

      st  = avformat_new_stream(s, NULL);
-    ast = av_mallocz(sizeof(*ast));
-    if (!st || !ast) {
+    if (!st) {
          ret = AVERROR(ENOMEM);
          goto fail;
      }
-    st->priv_data                 = ast;
      st->disposition              |= AV_DISPOSITION_ATTACHED_PIC;
      st->codec->codec_type         = AVMEDIA_TYPE_VIDEO;
      st->codec->codec_id           = id;
@@ -271,7 +269,6 @@ static int asf_read_picture(AVFormatContext *s, int len)
      return 0;

  fail:
-    av_freep(&ast);
      av_freep(&desc);
      av_free_packet(&pkt);
      return ret;
@@ -1109,6 +1106,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, 
AVIOContext *pb, AVPacket *pk
              asf->asf_st = s->streams[asf->stream_index]->priv_data;
          }
          asf_st = asf->asf_st;
+        av_assert0(asf_st);

          if (asf->packet_replic_size == 1) {
              // frag_offset is here used as the beginning timestamp
@@ -1318,6 +1316,8 @@ static void asf_reset_header(AVFormatContext *s)

      for (i = 0; i<  s->nb_streams; i++) {
          asf_st = s->streams[i]->priv_data;
+        if (!asf_st)
+            continue;
          av_free_packet(&asf_st->pkt);
          asf_st->frag_offset = 0;
          asf_st->seq         = 0;
@@ -1366,6 +1366,7 @@ static int64_t asf_read_pts(AVFormatContext *s, int 
stream_index,
              i = pkt->stream_index;

              asf_st = s->streams[i]->priv_data;
+            av_assert0(asf_st);

  //            assert((asf_st->packet_pos - s->data_offset) % s->packet_size 
== 0);
              pos = asf_st->packet_pos;

LGTM
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to