diff options
author | Anton Khirnov <anton@khirnov.net> | 2022-08-23 15:36:24 +0300 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2022-09-05 09:11:48 +0300 |
commit | b2e1d1443c12bb4cab54137154ae395b2d11c744 (patch) | |
tree | 9c23f8976e98c286fef515ff9e8ea0a18afa228a | |
parent | f0283f278a6a5f587d6cd66128b29d49ef42fb36 (diff) |
lavf/dv: forward errors from avformat_new_stream()
-rw-r--r-- | libavformat/dv.c | 9 |
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; |