]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/asf.c
Reindent after r14059, see "[PATCH] allow empty params for
[ffmpeg] / libavformat / asf.c
index 2316ed570f6a5bb95941d65935e623ac8e5d3207..faa0d6916afbe4843934cf3a92b1d076cace9391 100644 (file)
  * License along with FFmpeg; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
+
+#include "libavutil/common.h"
+#include "libavcodec/mpegaudio.h"
 #include "avformat.h"
 #include "riff.h"
-#include "mpegaudio.h"
 #include "asf.h"
-#include "common.h"
 #include "asfcrypt.h"
 
 extern void ff_mms_set_stream_selection(URLContext *h, AVFormatContext *format);
@@ -87,7 +88,7 @@ static void print_guid(const GUID *g)
 static void get_guid(ByteIOContext *s, GUID *g)
 {
     assert(sizeof(*g) == 16);
-    get_buffer(s, g, sizeof(*g));
+    get_buffer(s, *g, sizeof(*g));
 }
 
 #if 0
@@ -108,12 +109,6 @@ static void get_str16(ByteIOContext *pb, char *buf, int buf_size)
 }
 #endif
 
-static int is_mms(ByteIOContext *pb)
-{
-    return url_fileno(pb) && url_fileno(pb)->prot &&
-         !strcmp(url_fileno(pb)->prot->name, "mmsh");
-}
-
 static void get_str16_nolen(ByteIOContext *pb, int len, char *buf, int buf_size)
 {
     char* q = buf;
@@ -161,7 +156,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
 
     get_guid(pb, &g);
     if (memcmp(&g, &asf_header, sizeof(GUID)))
-        goto fail;
+        return -1;
     get_le64(pb);
     get_le32(pb);
     get_byte(pb);
@@ -186,14 +181,14 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
             break;
         }
         if (gsize < 24)
-            goto fail;
+            return -1;
         if (!memcmp(&g, &file_header, sizeof(GUID))) {
             get_guid(pb, &asf->hdr.guid);
             asf->hdr.file_size          = get_le64(pb);
             asf->hdr.create_time        = get_le64(pb);
             asf->nb_packets             = get_le64(pb);
-            asf->hdr.send_time          = get_le64(pb);
             asf->hdr.play_time          = get_le64(pb);
+            asf->hdr.send_time          = get_le64(pb);
             asf->hdr.preroll            = get_le32(pb);
             asf->hdr.ignore             = get_le32(pb);
             asf->hdr.flags              = get_le32(pb);
@@ -212,11 +207,11 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
 
             st = av_new_stream(s, 0);
             if (!st)
-                goto fail;
+                return AVERROR(ENOMEM);
             av_set_pts_info(st, 32, 1, 1000); /* 32 bit pts in ms */
             asf_st = av_mallocz(sizeof(ASFStream));
             if (!asf_st)
-                goto fail;
+                return AVERROR(ENOMEM);
             st->priv_data = asf_st;
             start_time = asf->hdr.preroll;
 
@@ -237,7 +232,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
                 test_for_ext_stream_audio = 1;
                 type = CODEC_TYPE_UNKNOWN;
             } else {
-                goto fail;
+                return -1;
             }
             get_guid(pb, &g);
             total_size = get_le64(pb);
@@ -395,7 +390,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
                         get_str16_nolen(pb, name_len, name, sizeof(name));
                         value_type = get_le16(pb);
                         value_len = get_le16(pb);
-                        if ((value_type == 0) || (value_type == 1)) // unicode or byte
+                        if (value_type <= 1) // unicode or byte
                         {
                                 if     (!strcmp(name,"WM/AlbumTitle")) get_str16_nolen(pb, value_len, s->album, sizeof(s->album));
                                 else if(!strcmp(name,"WM/Genre"     )) get_str16_nolen(pb, value_len, s->genre, sizeof(s->genre));
@@ -416,12 +411,13 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
                                 }
                                 else url_fskip(pb, value_len);
                         }
-                        if ((value_type >= 2) && (value_type <= 5)) // boolean or DWORD or QWORD or WORD
+                        else if (value_type <= 5) // boolean or DWORD or QWORD or WORD
                         {
                                 value_num= get_value(pb, value_type);
                                 if (!strcmp(name,"WM/Track"      ) && s->track == 0) s->track = value_num + 1;
                                 if (!strcmp(name,"WM/TrackNumber")) s->track = value_num;
-                        }
+                        }else
+                            url_fskip(pb, value_len);
                 }
         } else if (!memcmp(&g, &metadata_header, sizeof(GUID))) {
             int n, stream_num, name_len, value_len, value_type, value_num;
@@ -517,7 +513,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
             }
 #endif
         } else if (url_feof(pb)) {
-            goto fail;
+            return -1;
         } else {
             url_fseek(pb, gsize - 24, SEEK_CUR);
         }
@@ -527,7 +523,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
     get_byte(pb);
     get_byte(pb);
     if (url_feof(pb))
-        goto fail;
+        return -1;
     asf->data_offset = url_ftell(pb);
     asf->packet_size_left = 0;
 
@@ -546,24 +542,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
         }
     }
 
-#ifdef CONFIG_MMSH_PROTOCOL
-    /* Give info about ourselves to the mms protocol */
-    if(is_mms(pb))
-        ff_mms_set_stream_selection(url_fileno(pb), s);
-#endif
-
     return 0;
-
- fail:
-     for(i=0;i<s->nb_streams;i++) {
-        AVStream *st = s->streams[i];
-        if (st) {
-            av_free(st->priv_data);
-            av_free(st->codec->extradata);
-        }
-        av_free(st);
-    }
-    return -1;
 }
 
 #define DO_2BITS(bits, var, defval) \
@@ -694,7 +673,7 @@ static int asf_read_frame_header(AVFormatContext *s){
             url_fskip(pb, asf->packet_replic_size - 8);
         rsize += asf->packet_replic_size; // FIXME - check validity
     } else if (asf->packet_replic_size==1){
-        // multipacket - frag_offset is begining timestamp
+        // multipacket - frag_offset is beginning timestamp
         asf->packet_time_start = asf->packet_frag_offset;
         asf->packet_frag_offset = 0;
         asf->packet_frag_timestamp = asf->packet_timestamp;
@@ -778,7 +757,7 @@ static int asf_read_packet(AVFormatContext *s, AVPacket *pkt)
         asf_st = asf->asf_st;
 
         if (asf->packet_replic_size == 1) {
-            // frag_offset is here used as the begining timestamp
+            // frag_offset is here used as the beginning timestamp
             asf->packet_frag_timestamp = asf->packet_time_start;
             asf->packet_time_start += asf->packet_time_delta;
             asf->packet_obj_size = asf->packet_frag_size = get_byte(pb);
@@ -946,7 +925,6 @@ static int asf_read_close(AVFormatContext *s)
     asf_reset_header(s);
     for(i=0;i<s->nb_streams;i++) {
         AVStream *st = s->streams[i];
-        av_free(st->priv_data);
         av_free(st->codec->palctrl);
     }
     return 0;
@@ -1050,11 +1028,12 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
         return -1;
 
     /* Try using the protocol's read_seek if available */
-    if(s->pb && s->pb->read_seek) {
+    if(s->pb) {
         int ret = av_url_read_fseek(s->pb, stream_index, pts, flags);
         if(ret >= 0)
             asf_reset_header(s);
-        return ret;
+        if (ret != AVERROR(ENOSYS))
+            return ret;
     }
 
     if (!asf->index_read)
@@ -1103,7 +1082,7 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
 
 AVInputFormat asf_demuxer = {
     "asf",
-    "asf format",
+    NULL_IF_CONFIG_SMALL("ASF format"),
     sizeof(ASFContext),
     asf_probe,
     asf_read_header,