mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
ffmpeg: Prefer av_packet_alloc over allocating AVPacket ourselves
av_packet_alloc/av_packet_free will know the correct size of AVPacket, even if the ABI should change. So, we use it when it's available.
This commit is contained in:
parent
9596095294
commit
eb591674e0
@ -164,7 +164,12 @@ FfmpegAudioCursor(FfmpegAudio *src) :
|
|||||||
_frame = avcodec_alloc_frame();
|
_frame = avcodec_alloc_frame();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 12, 100)
|
||||||
|
_packet = av_packet_alloc();
|
||||||
|
#else
|
||||||
_packet = new AVPacket;
|
_packet = new AVPacket;
|
||||||
|
#endif
|
||||||
|
|
||||||
_buffer_size = AVCODEC_MAX_AUDIO_FRAME_SIZE / 2;
|
_buffer_size = AVCODEC_MAX_AUDIO_FRAME_SIZE / 2;
|
||||||
_buffer_alloc = new int16_t[_buffer_size + 64];
|
_buffer_alloc = new int16_t[_buffer_size + 64];
|
||||||
|
|
||||||
@ -213,15 +218,15 @@ cleanup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_packet) {
|
if (_packet) {
|
||||||
if (_packet->data) {
|
|
||||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 12, 100)
|
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 12, 100)
|
||||||
av_packet_unref(_packet);
|
av_packet_free(&_packet);
|
||||||
#else
|
#else
|
||||||
|
if (_packet->data) {
|
||||||
av_free_packet(_packet);
|
av_free_packet(_packet);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
delete _packet;
|
delete _packet;
|
||||||
_packet = NULL;
|
_packet = NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_buffer_alloc) {
|
if (_buffer_alloc) {
|
||||||
@ -303,16 +308,25 @@ reload_buffer() {
|
|||||||
} else if (_packet_size > 0) {
|
} else if (_packet_size > 0) {
|
||||||
int bufsize = _buffer_size * 2;
|
int bufsize = _buffer_size * 2;
|
||||||
int got_frame;
|
int got_frame;
|
||||||
AVPacket pkt;
|
|
||||||
av_init_packet(&pkt);
|
AVPacket *pkt;
|
||||||
pkt.data = _packet_data;
|
|
||||||
pkt.size = _packet_size;
|
|
||||||
int len = avcodec_decode_audio4(_audio_ctx, _frame, &got_frame, &pkt);
|
|
||||||
movies_debug("avcodec_decode_audio4 returned " << len);
|
|
||||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 12, 100)
|
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 12, 100)
|
||||||
av_packet_unref(&pkt);
|
pkt = av_packet_alloc();
|
||||||
#else
|
#else
|
||||||
av_free_packet(&pkt);
|
AVPacket _pkt;
|
||||||
|
pkt = &_pkt;
|
||||||
|
av_init_packet(pkt);
|
||||||
|
#endif
|
||||||
|
pkt->data = _packet_data;
|
||||||
|
pkt->size = _packet_size;
|
||||||
|
|
||||||
|
int len = avcodec_decode_audio4(_audio_ctx, _frame, &got_frame, pkt);
|
||||||
|
movies_debug("avcodec_decode_audio4 returned " << len);
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 12, 100)
|
||||||
|
av_packet_free(&pkt);
|
||||||
|
#else
|
||||||
|
av_free_packet(pkt);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bufsize = 0;
|
bufsize = 0;
|
||||||
|
@ -94,8 +94,12 @@ init_from(FfmpegVideo *source) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 12, 100)
|
||||||
|
_packet = av_packet_alloc();
|
||||||
|
#else
|
||||||
_packet = new AVPacket;
|
_packet = new AVPacket;
|
||||||
memset(_packet, 0, sizeof(AVPacket));
|
av_init_packet(_packet);
|
||||||
|
#endif
|
||||||
|
|
||||||
fetch_packet(0);
|
fetch_packet(0);
|
||||||
fetch_frame(-1);
|
fetch_frame(-1);
|
||||||
@ -624,15 +628,15 @@ cleanup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_packet) {
|
if (_packet) {
|
||||||
if (_packet->data) {
|
|
||||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 12, 100)
|
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 12, 100)
|
||||||
av_packet_unref(_packet);
|
av_packet_free(&_packet);
|
||||||
#else
|
#else
|
||||||
|
if (_packet->data) {
|
||||||
av_free_packet(_packet);
|
av_free_packet(_packet);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
delete _packet;
|
delete _packet;
|
||||||
_packet = NULL;
|
_packet = NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user