|
|
|
@ -444,14 +444,17 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
res = av_new_packet(pkt, size[0] + size[1] + size[2]); |
|
|
|
|
if (res < 0) |
|
|
|
|
return res; |
|
|
|
|
if (res < 0) { |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
|
pkt->stream_index = 0; |
|
|
|
|
pkt->flags |= AV_PKT_FLAG_KEY; |
|
|
|
|
if (s->ts_from_file) { |
|
|
|
|
struct stat img_stat; |
|
|
|
|
if (stat(filename, &img_stat)) |
|
|
|
|
return AVERROR(EIO); |
|
|
|
|
if (stat(filename, &img_stat)) { |
|
|
|
|
res = AVERROR(EIO); |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
|
pkt->pts = (int64_t)img_stat.st_mtime; |
|
|
|
|
#if HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC |
|
|
|
|
if (s->ts_from_file == 2) |
|
|
|
@ -485,18 +488,29 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt) |
|
|
|
|
if (ret[0] <= 0 || ret[1] < 0 || ret[2] < 0) { |
|
|
|
|
av_free_packet(pkt); |
|
|
|
|
if (ret[0] < 0) { |
|
|
|
|
return ret[0]; |
|
|
|
|
res = ret[0]; |
|
|
|
|
} else if (ret[1] < 0) { |
|
|
|
|
return ret[1]; |
|
|
|
|
} else if (ret[2] < 0) |
|
|
|
|
return ret[2]; |
|
|
|
|
return AVERROR_EOF; |
|
|
|
|
res = ret[1]; |
|
|
|
|
} else if (ret[2] < 0) { |
|
|
|
|
res = ret[2]; |
|
|
|
|
} else { |
|
|
|
|
res = AVERROR_EOF; |
|
|
|
|
} |
|
|
|
|
goto fail; |
|
|
|
|
} else { |
|
|
|
|
s->img_count++; |
|
|
|
|
s->img_number++; |
|
|
|
|
s->pts++; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fail: |
|
|
|
|
if (!s->is_pipe) { |
|
|
|
|
for (i = 0; i < 3; i++) { |
|
|
|
|
avio_closep(&f[i]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return res; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int img_read_close(struct AVFormatContext* s1) |
|
|
|
|