aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/dv.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2022-08-23 14:36:24 +0200
committerAnton Khirnov <anton@khirnov.net>2022-09-05 08:11:48 +0200
commitb2e1d1443c12bb4cab54137154ae395b2d11c744 (patch)
tree9c23f8976e98c286fef515ff9e8ea0a18afa228a /libavformat/dv.c
parentf0283f278a6a5f587d6cd66128b29d49ef42fb36 (diff)
downloadffmpeg-b2e1d1443c12bb4cab54137154ae395b2d11c744.tar.gz
lavf/dv: forward errors from avformat_new_stream()
Diffstat (limited to 'libavformat/dv.c')
-rw-r--r--libavformat/dv.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libavformat/dv.c b/libavformat/dv.c
index c888111789..24d6897da5 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -268,11 +268,13 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
ach = 2;
/* Dynamic handling of the audio streams in DV */
+ c->ach = 0;
for (i = 0; i < ach; i++) {
if (!c->ast[i]) {
c->ast[i] = avformat_new_stream(c->fctx, NULL);
if (!c->ast[i])
- break;
+ return AVERROR(ENOMEM);
+
avpriv_set_pts_info(c->ast[i], 64, c->sys->time_base.num, c->sys->time_base.den);
c->ast[i]->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
c->ast[i]->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE;
@@ -290,7 +292,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
c->ast[i]->codecpar->bit_rate = 2 * dv_audio_frequency[freq] * 16;
c->ast[i]->start_time = 0;
}
- c->ach = i;
+ c->ach = ach;
return (c->sys->audio_min_samples[freq] + smpls) * 4; /* 2ch, 2bytes */
}
@@ -410,6 +412,9 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
/* Queueing audio packet */
/* FIXME: in case of no audio/bad audio we have to do something */
size = dv_extract_audio_info(c, buf);
+ if (size < 0)
+ return size;
+
for (i = 0; i < c->ach; i++) {
c->audio_pkt[i].pos = pos;
c->audio_pkt[i].size = size;