]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/electronicarts.c
Use correct length modifier for size comparison in printf expression, fixes:
[ffmpeg] / libavformat / electronicarts.c
index 485c0a383a302b972dd5654cb1f40d2cdb9019f0..df517df897599c1c4ab2590d3c3f4116d1c02834 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 /**
- * @file libavformat/electronicarts.c
+ * @file
  * Electronic Arts Multimedia file demuxer (WVE/UV2/etc.)
  * by Robin Kay (komadori at gekkou.co.uk)
  */
@@ -47,6 +47,8 @@
 #define fVGT_TAG MKTAG('f', 'V', 'G', 'T')    /* TGV p-frame */
 #define mTCD_TAG MKTAG('m', 'T', 'C', 'D')    /* MDEC */
 #define MADk_TAG MKTAG('M', 'A', 'D', 'k')    /* MAD i-frame */
+#define MADm_TAG MKTAG('M', 'A', 'D', 'm')    /* MAD p-frame */
+#define MADe_TAG MKTAG('M', 'A', 'D', 'e')    /* MAD lqp-frame */
 #define MPCh_TAG MKTAG('M', 'P', 'C', 'h')    /* MPEG2 */
 #define TGQs_TAG MKTAG('T', 'G', 'Q', 's')    /* TGQ i-frame (appears in .TGQ files) */
 #define pQGT_TAG MKTAG('p', 'Q', 'G', 'T')    /* TGQ i-frame (appears in .UV files) */
@@ -69,8 +71,6 @@ typedef struct EaDemuxContext {
     int audio_stream_index;
     int audio_frame_counter;
 
-    int64_t audio_pts;
-
     int bytes;
     int sample_rate;
     int num_channels;
@@ -192,6 +192,7 @@ static int process_audio_header_elements(AVFormatContext *s)
         case 16: ea->audio_codec = CODEC_ID_MP3; break;
         case -1: break;
         default:
+            ea->audio_codec = CODEC_ID_NONE;
             av_log(s, AV_LOG_ERROR, "unsupported stream type; revision2=%i\n", revision2);
             return 0;
         }
@@ -300,7 +301,7 @@ static int process_ea_header(AVFormatContext *s) {
         if (i == 0)
             ea->big_endian = size > 0x000FFFFF;
         if (ea->big_endian)
-            size = bswap_32(size);
+            size = av_bswap32(size);
 
         switch (blockid) {
             case ISNh_TAG:
@@ -354,6 +355,10 @@ static int process_ea_header(AVFormatContext *s) {
                 ea->video_codec = CODEC_ID_TQI;
                 break;
 
+            case MADk_TAG :
+                ea->video_codec = CODEC_ID_MAD;
+                break;
+
             case MVhd_TAG :
                 err = process_video_header_vp6(s);
                 break;
@@ -385,9 +390,13 @@ static int ea_probe(AVProbeData *p)
     case MPCh_TAG:
     case MVhd_TAG:
     case MVIh_TAG:
-        return AVPROBE_SCORE_MAX;
+        break;
+    default:
+        return 0;
     }
-    return 0;
+    if (AV_RL32(&p->buf[4]) > 0xfffff && AV_RB32(&p->buf[4]) > 0xfffff)
+        return 0;
+    return AVPROBE_SCORE_MAX;
 }
 
 static int ea_read_header(AVFormatContext *s,
@@ -405,7 +414,7 @@ static int ea_read_header(AVFormatContext *s,
         if (!st)
             return AVERROR(ENOMEM);
         ea->video_stream_index = st->index;
-        st->codec->codec_type = CODEC_TYPE_VIDEO;
+        st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
         st->codec->codec_id = ea->video_codec;
         st->codec->codec_tag = 0;  /* no fourcc */
         st->codec->time_base = ea->time_base;
@@ -419,7 +428,7 @@ static int ea_read_header(AVFormatContext *s,
         if (!st)
             return AVERROR(ENOMEM);
         av_set_pts_info(st, 33, 1, ea->sample_rate);
-        st->codec->codec_type = CODEC_TYPE_AUDIO;
+        st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
         st->codec->codec_id = ea->audio_codec;
         st->codec->codec_tag = 0;  /* no tag */
         st->codec->channels = ea->num_channels;
@@ -510,9 +519,12 @@ static int ea_read_packet(AVFormatContext *s,
         case kVGT_TAG:
         case pQGT_TAG:
         case TGQs_TAG:
-            key = PKT_FLAG_KEY;
+        case MADk_TAG:
+            key = AV_PKT_FLAG_KEY;
         case MVIf_TAG:
         case fVGT_TAG:
+        case MADm_TAG:
+        case MADe_TAG:
             url_fseek(pb, -8, SEEK_CUR);     // include chunk preamble
             chunk_size += 8;
             goto get_video_packet;
@@ -525,7 +537,7 @@ static int ea_read_packet(AVFormatContext *s,
         case MV0K_TAG:
         case MPCh_TAG:
         case pIQT_TAG:
-            key = PKT_FLAG_KEY;
+            key = AV_PKT_FLAG_KEY;
         case MV0F_TAG:
 get_video_packet:
             ret = av_get_packet(pb, pkt, chunk_size);