ffmpeg decoder plugin: do not allocate an AVFrame on stack.
AVFrame must be allocated with avcodec_alloc_frame().
This commit is contained in:
parent
46528783ef
commit
e0c2c77c2a
1
NEWS
1
NEWS
@ -3,6 +3,7 @@ ver 0.17.4 (2013/??/??)
|
|||||||
- allow to omit END in ranges (START:END)
|
- allow to omit END in ranges (START:END)
|
||||||
* decoder:
|
* decoder:
|
||||||
- ffmpeg: support float planar audio (ffmpeg 1.1)
|
- ffmpeg: support float planar audio (ffmpeg 1.1)
|
||||||
|
- ffmpeg: fix AVFrame allocation
|
||||||
* player:
|
* player:
|
||||||
- implement missing "idle" events on output errors
|
- implement missing "idle" events on output errors
|
||||||
* clock: fix build failure
|
* clock: fix build failure
|
||||||
|
@ -318,20 +318,33 @@ ffmpeg_send_packet(struct decoder *decoder, struct input_stream *is,
|
|||||||
cmd == DECODE_COMMAND_NONE) {
|
cmd == DECODE_COMMAND_NONE) {
|
||||||
int audio_size = buffer_size;
|
int audio_size = buffer_size;
|
||||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53,25,0)
|
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53,25,0)
|
||||||
AVFrame frame;
|
|
||||||
|
AVFrame *frame = avcodec_alloc_frame();
|
||||||
|
if (frame == NULL) {
|
||||||
|
g_warning("Could not allocate frame");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
int got_frame = 0;
|
int got_frame = 0;
|
||||||
int len = avcodec_decode_audio4(codec_context,
|
int len = avcodec_decode_audio4(codec_context,
|
||||||
&frame, &got_frame,
|
frame, &got_frame,
|
||||||
&packet2);
|
&packet2);
|
||||||
if (len >= 0 && got_frame) {
|
if (len >= 0 && got_frame) {
|
||||||
audio_size = copy_interleave_frame(codec_context,
|
audio_size = copy_interleave_frame(codec_context,
|
||||||
&frame,
|
frame,
|
||||||
aligned_buffer,
|
aligned_buffer,
|
||||||
buffer_size);
|
buffer_size);
|
||||||
if (audio_size < 0)
|
if (audio_size < 0)
|
||||||
len = audio_size;
|
len = audio_size;
|
||||||
} else if (len >= 0)
|
} else if (len >= 0)
|
||||||
len = -1;
|
len = -1;
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54, 28, 0)
|
||||||
|
avcodec_free_frame(&frame);
|
||||||
|
#else
|
||||||
|
av_freep(&frame);
|
||||||
|
#endif
|
||||||
|
|
||||||
#elif LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52,25,0)
|
#elif LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52,25,0)
|
||||||
int len = avcodec_decode_audio3(codec_context,
|
int len = avcodec_decode_audio3(codec_context,
|
||||||
aligned_buffer, &audio_size,
|
aligned_buffer, &audio_size,
|
||||||
|
Loading…
Reference in New Issue
Block a user