]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/asf.c
demux all stsd ids if codec is the same, fix premature_mov_ending.mov, closes #451
[ffmpeg] / libavformat / asf.c
index b356a3445953242c0f3e5ed5b5b647bf93466a41..20fe91790065c30df497617e397f039c9993da71 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;
@@ -192,8 +187,8 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
             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);
@@ -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;
@@ -546,12 +542,6 @@ 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: