]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/jvdec.c
Replace any remaining avpicture function with imgutils
[ffmpeg] / libavformat / jvdec.c
index 006acec7bc9e14c64e4fef287feb8a07d4800db0..1b1c5428bf2556729277274ef98fe733d6d24be1 100644 (file)
 
 #define JV_PREAMBLE_SIZE 5
 
-typedef struct {
+typedef struct JVFrame {
     int audio_size;    /** audio packet size (bytes) */
     int video_size;    /** video packet size (bytes) */
     int palette_size;  /** palette size (bytes) */
     int video_type;    /** per-frame video compression type */
 } JVFrame;
 
-typedef struct {
+typedef struct JVDemuxContext {
     JVFrame *frames;
     enum {
         JV_AUDIO = 0,
@@ -184,16 +184,22 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
         case JV_VIDEO:
             jv->state++;
             if (jvf->video_size || jvf->palette_size) {
+                int ret;
                 int size = jvf->video_size + jvf->palette_size;
                 if (av_new_packet(pkt, size + JV_PREAMBLE_SIZE))
                     return AVERROR(ENOMEM);
 
                 AV_WL32(pkt->data, jvf->video_size);
                 pkt->data[4] = jvf->video_type;
-                if (avio_read(pb, pkt->data + JV_PREAMBLE_SIZE, size) < 0)
-                    return AVERROR(EIO);
-
-                pkt->size         = size + JV_PREAMBLE_SIZE;
+                ret = avio_read(pb, pkt->data + JV_PREAMBLE_SIZE, size);
+                if (ret < 0)
+                    return ret;
+                if (ret < size) {
+                    memset(pkt->data + JV_PREAMBLE_SIZE + ret, 0,
+                           AV_INPUT_BUFFER_PADDING_SIZE);
+                    pkt->flags |= AV_PKT_FLAG_CORRUPT;
+                }
+                pkt->size         = ret + JV_PREAMBLE_SIZE;
                 pkt->stream_index = 1;
                 pkt->pts          = jv->pts;
                 if (jvf->video_type != 1)