Fix: fix memory leak caused by ffmpeg decoding
Change-Id: I162ad4ea8d4601c1ffe17a65f292566c9dea6f0b jira: no-jira
This commit is contained in:
parent
b16f9c20f4
commit
eb20d03186
|
@ -47,12 +47,27 @@ int AVVideoDecoder::open(Bambu_StreamInfo const &info)
|
||||||
|
|
||||||
int AVVideoDecoder::decode(const Bambu_Sample &sample)
|
int AVVideoDecoder::decode(const Bambu_Sample &sample)
|
||||||
{
|
{
|
||||||
auto pkt = av_packet_alloc();
|
int ret = -1;
|
||||||
int ret = av_new_packet(pkt, sample.size);
|
AVPacket *pkt = av_packet_alloc();
|
||||||
if (ret == 0)
|
if (!pkt) {
|
||||||
memcpy(pkt->data, sample.buffer, size_t(sample.size));
|
return ret;
|
||||||
got_frame_ = avcodec_receive_frame(codec_ctx_, frame_) == 0;
|
}
|
||||||
|
|
||||||
|
ret = av_new_packet(pkt, sample.size);
|
||||||
|
if (ret != 0) {
|
||||||
|
av_packet_free(&pkt);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(pkt->data, sample.buffer, size_t(sample.size));
|
||||||
|
|
||||||
ret = avcodec_send_packet(codec_ctx_, pkt);
|
ret = avcodec_send_packet(codec_ctx_, pkt);
|
||||||
|
if (ret == 0) {
|
||||||
|
got_frame_ = avcodec_receive_frame(codec_ctx_, frame_) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
av_packet_unref(pkt);
|
||||||
|
av_packet_free(&pkt);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue