| Index: patched-ffmpeg-mt/libavformat/dsicin.c
|
| ===================================================================
|
| --- patched-ffmpeg-mt/libavformat/dsicin.c (revision 41250)
|
| +++ patched-ffmpeg-mt/libavformat/dsicin.c (working copy)
|
| @@ -162,6 +162,7 @@
|
| ByteIOContext *pb = s->pb;
|
| CinFrameHeader *hdr = &cin->frame_header;
|
| int rc, palette_type, pkt_size;
|
| + int ret;
|
|
|
| if (cin->audio_buffer_size == 0) {
|
| rc = cin_read_frame_header(cin, pb);
|
| @@ -178,8 +179,9 @@
|
| /* palette and video packet */
|
| pkt_size = (palette_type + 3) * hdr->pal_colors_count + hdr->video_frame_size;
|
|
|
| - if (av_new_packet(pkt, 4 + pkt_size))
|
| - return AVERROR(ENOMEM);
|
| + ret = av_new_packet(pkt, 4 + pkt_size);
|
| + if (ret < 0)
|
| + return ret;
|
|
|
| pkt->stream_index = cin->video_stream_index;
|
| pkt->pts = cin->video_stream_pts++;
|
| @@ -189,8 +191,13 @@
|
| pkt->data[2] = hdr->pal_colors_count >> 8;
|
| pkt->data[3] = hdr->video_frame_type;
|
|
|
| - if (get_buffer(pb, &pkt->data[4], pkt_size) != pkt_size)
|
| - return AVERROR(EIO);
|
| + ret = get_buffer(pb, &pkt->data[4], pkt_size);
|
| + if (ret < 0) {
|
| + av_free_packet(pkt);
|
| + return ret;
|
| + }
|
| + if (ret < pkt_size)
|
| + av_shrink_packet(pkt, 4 + ret);
|
|
|
| /* sound buffer will be processed on next read_packet() call */
|
| cin->audio_buffer_size = hdr->audio_frame_size;
|
| @@ -198,16 +205,13 @@
|
| }
|
|
|
| /* audio packet */
|
| - if (av_new_packet(pkt, cin->audio_buffer_size))
|
| - return AVERROR(ENOMEM);
|
| + ret = av_get_packet(pb, pkt, cin->audio_buffer_size);
|
| + if (ret < 0)
|
| + return ret;
|
|
|
| pkt->stream_index = cin->audio_stream_index;
|
| pkt->pts = cin->audio_stream_pts;
|
| cin->audio_stream_pts += cin->audio_buffer_size * 2 / cin->file_header.audio_frame_size;
|
| -
|
| - if (get_buffer(pb, pkt->data, cin->audio_buffer_size) != cin->audio_buffer_size)
|
| - return AVERROR(EIO);
|
| -
|
| cin->audio_buffer_size = 0;
|
| return 0;
|
| }
|
|
|