diff options
author | Stephen Hutchinson <qyot27@gmail.com> | 2014-01-08 00:37:57 -0500 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-01-08 12:54:27 +0100 |
commit | 16ae337bd8d46d98664ede2484dd635dae939771 (patch) | |
tree | a49472fdcfcf4a6c91b51e23be0762bda82bd3c7 | |
parent | 02dd178d9de9c5e6ec3974658b5efd0c69c5631a (diff) | |
download | ffmpeg-16ae337bd8d46d98664ede2484dd635dae939771.tar.gz |
avisynth: Use av_packet_from_data instead of av_new_packet
If the audio changes from 9eac7c4 were merged as they were, this
would cause scripts with both video+audio to fail with a lot of
audio decoding errors (the video would be fine). Scripts with
only one of either video or audio were unaffected. Additionally,
the av_packet changes in general caused seeking to break.
Using av_packet_from_data allows video+audio scripts to work as
expected, without audio decoding errors. It also fixes seeking.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/avisynth.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index 66f85ec1cf..99fe34c736 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -421,7 +421,7 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, AVS_VideoFrame *frame; unsigned char *dst_p; const unsigned char *src_p; - int n, i, plane, rowsize, planeheight, pitch, bits; + int n, i, plane, rowsize, planeheight, pitch, bits, ret; const char *error; if (avs->curr_frame >= avs->vi->num_frames) @@ -460,9 +460,15 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, if (!pkt->size) return AVERROR_UNKNOWN; - if (av_new_packet(pkt, pkt->size) < 0) + pkt->data = av_malloc(pkt->size); + if (!pkt->data) return AVERROR(ENOMEM); + if ((ret = av_packet_from_data(pkt, pkt->data, pkt->size)) < 0) { + av_packet_unref(pkt); + return ret; + } + frame = avs_library.avs_get_frame(avs->clip, n); error = avs_library.avs_clip_get_error(avs->clip); if (error) { @@ -511,7 +517,7 @@ static int avisynth_read_packet_audio(AVFormatContext *s, AVPacket *pkt, { AviSynthContext *avs = s->priv_data; AVRational fps, samplerate; - int samples; + int samples, ret; int64_t n; const char *error; @@ -558,9 +564,15 @@ static int avisynth_read_packet_audio(AVFormatContext *s, AVPacket *pkt, if (!pkt->size) return AVERROR_UNKNOWN; - if (av_new_packet(pkt, pkt->size) < 0) + pkt->data = av_malloc(pkt->size); + if (!pkt->data) return AVERROR(ENOMEM); + if ((ret = av_packet_from_data(pkt, pkt->data, pkt->size)) < 0) { + av_packet_unref(pkt); + return ret; + } + avs_library.avs_get_audio(avs->clip, pkt->data, n, samples); error = avs_library.avs_clip_get_error(avs->clip); if (error) { |