avformat/mlvdec: read_string() received unsigned size, make the argument unsigned
[ffmpeg.git] / libavformat / paf.c
index 09786eb..fa30cdd 100644 (file)
@@ -26,7 +26,7 @@
 
 #define MAGIC "Packed Animation File V1.0\n(c) 1992-96 Amazing Studio\x0a\x1a"
 
-typedef struct {
+typedef struct PAFDemuxContext {
     uint32_t buffer_size;
     uint32_t frame_blks;
     uint32_t nb_frames;
@@ -44,13 +44,13 @@ typedef struct {
     uint32_t *blocks_offset_table;
 
     uint8_t  *video_frame;
-    int      video_size;
+    int video_size;
 
     uint8_t  *audio_frame;
     uint8_t  *temp_audio_frame;
-    int      audio_size;
+    int audio_size;
 
-    int      got_audio;
+    int got_audio;
 } PAFDemuxContext;
 
 static int read_probe(AVProbeData *p)
@@ -87,10 +87,10 @@ static void read_table(AVFormatContext *s, uint32_t *table, uint32_t count)
 
 static int read_header(AVFormatContext *s)
 {
-    PAFDemuxContext *p = s->priv_data;
+    PAFDemuxContext *p  = s->priv_data;
     AVIOContext     *pb = s->pb;
     AVStream        *ast, *vst;
-    int             ret = 0;
+    int ret = 0;
 
     avio_skip(pb, 132);
 
@@ -101,27 +101,29 @@ static int read_header(AVFormatContext *s)
     vst->start_time = 0;
     vst->nb_frames  =
     vst->duration   =
-    p->nb_frames = avio_rl32(pb);
+    p->nb_frames    = avio_rl32(pb);
     avio_skip(pb, 4);
-    vst->codec->width  = avio_rl32(pb);
-    vst->codec->height = avio_rl32(pb);
+
+    vst->codecpar->width  = avio_rl32(pb);
+    vst->codecpar->height = avio_rl32(pb);
     avio_skip(pb, 4);
-    vst->codec->codec_type = AVMEDIA_TYPE_VIDEO;
-    vst->codec->codec_tag  = 0;
-    vst->codec->codec_id   = AV_CODEC_ID_PAF_VIDEO;
+
+    vst->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
+    vst->codecpar->codec_tag  = 0;
+    vst->codecpar->codec_id   = AV_CODEC_ID_PAF_VIDEO;
     avpriv_set_pts_info(vst, 64, 1, 10);
 
     ast = avformat_new_stream(s, 0);
     if (!ast)
         return AVERROR(ENOMEM);
 
-    ast->start_time         = 0;
-    ast->codec->codec_type  = AVMEDIA_TYPE_AUDIO;
-    ast->codec->codec_tag   = 0;
-    ast->codec->codec_id    = AV_CODEC_ID_PAF_AUDIO;
-    ast->codec->channels    = 2;
-    ast->codec->channel_layout = AV_CH_LAYOUT_STEREO;
-    ast->codec->sample_rate = 22050;
+    ast->start_time            = 0;
+    ast->codecpar->codec_type     = AVMEDIA_TYPE_AUDIO;
+    ast->codecpar->codec_tag      = 0;
+    ast->codecpar->codec_id       = AV_CODEC_ID_PAF_AUDIO;
+    ast->codecpar->channels       = 2;
+    ast->codecpar->channel_layout = AV_CH_LAYOUT_STEREO;
+    ast->codecpar->sample_rate    = 22050;
     avpriv_set_pts_info(ast, 64, 1, 22050);
 
     p->buffer_size    = avio_rl32(pb);
@@ -143,16 +145,19 @@ static int read_header(AVFormatContext *s)
         p->frame_blks     > INT_MAX / sizeof(uint32_t))
         return AVERROR_INVALIDDATA;
 
-    p->blocks_count_table  = av_mallocz(p->nb_frames  * sizeof(uint32_t));
-    p->frames_offset_table = av_mallocz(p->nb_frames  * sizeof(uint32_t));
-    p->blocks_offset_table = av_mallocz(p->frame_blks * sizeof(uint32_t));
+    p->blocks_count_table  = av_mallocz(p->nb_frames *
+                                        sizeof(*p->blocks_count_table));
+    p->frames_offset_table = av_mallocz(p->nb_frames *
+                                        sizeof(*p->frames_offset_table));
+    p->blocks_offset_table = av_mallocz(p->frame_blks *
+                                        sizeof(*p->blocks_offset_table));
 
-    p->video_size          = p->max_video_blks * p->buffer_size;
-    p->video_frame         = av_mallocz(p->video_size);
+    p->video_size  = p->max_video_blks * p->buffer_size;
+    p->video_frame = av_mallocz(p->video_size);
 
-    p->audio_size          = p->max_audio_blks * p->buffer_size;
-    p->audio_frame         = av_mallocz(p->audio_size);
-    p->temp_audio_frame    = av_mallocz(p->audio_size);
+    p->audio_size       = p->max_audio_blks * p->buffer_size;
+    p->audio_frame      = av_mallocz(p->audio_size);
+    p->temp_audio_frame = av_mallocz(p->audio_size);
 
     if (!p->blocks_count_table  ||
         !p->frames_offset_table ||
@@ -186,7 +191,7 @@ fail:
 
 static int read_packet(AVFormatContext *s, AVPacket *pkt)
 {
-    PAFDemuxContext *p = s->priv_data;
+    PAFDemuxContext *p  = s->priv_data;
     AVIOContext     *pb = s->pb;
     uint32_t        count, offset;
     int             size, i;
@@ -194,7 +199,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
     if (p->current_frame >= p->nb_frames)
         return AVERROR_EOF;
 
-    if (url_feof(pb))
+    if (avio_feof(pb))
         return AVERROR_EOF;
 
     if (p->got_audio) {
@@ -209,7 +214,8 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
         return pkt->size;
     }
 
-    count = (p->current_frame == 0) ? p->preload_count : p->blocks_count_table[p->current_frame - 1];
+    count = (p->current_frame == 0) ? p->preload_count
+                                    : p->blocks_count_table[p->current_frame - 1];
     for (i = 0; i < count; i++) {
         if (p->current_frame_block >= p->frame_blks)
             return AVERROR_INVALIDDATA;
@@ -233,10 +239,11 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
         p->current_frame_block++;
     }
 
-    size = p->video_size - p->frames_offset_table[p->current_frame];
-    if (size < 1)
+    if (p->frames_offset_table[p->current_frame] >= p->video_size)
         return AVERROR_INVALIDDATA;
 
+    size = p->video_size - p->frames_offset_table[p->current_frame];
+
     if (av_new_packet(pkt, size) < 0)
         return AVERROR(ENOMEM);
 
@@ -244,7 +251,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
     pkt->duration     = 1;
     memcpy(pkt->data, p->video_frame + p->frames_offset_table[p->current_frame], size);
     if (pkt->data[0] & 0x20)
-        pkt->flags   |= AV_PKT_FLAG_KEY;
+        pkt->flags |= AV_PKT_FLAG_KEY;
     p->current_frame++;
 
     return pkt->size;