[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13740] trunk/blender/source/blender/src/ hddaudio.c: == Sequencer / FFMPEG ==
Peter Schlaile
peter at schlaile.de
Mon Feb 18 00:39:20 CET 2008
Revision: 13740
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13740
Author: schlaile
Date: 2008-02-18 00:39:16 +0100 (Mon, 18 Feb 2008)
Log Message:
-----------
== Sequencer / FFMPEG ==
This fixes [#8297] Video Playback crash (audio buffer)
If a single audio frame is larger than 1 second (but still smaller than
AVCODEC_MAX_AUDIO_FRAME_SIZE) things could get very - annoying :)
Modified Paths:
--------------
trunk/blender/source/blender/src/hddaudio.c
Modified: trunk/blender/source/blender/src/hddaudio.c
===================================================================
--- trunk/blender/source/blender/src/hddaudio.c 2008-02-17 22:42:03 UTC (rev 13739)
+++ trunk/blender/source/blender/src/hddaudio.c 2008-02-17 23:39:16 UTC (rev 13740)
@@ -283,58 +283,61 @@
decode_pos -= bl_size;
- memset(hdaudio->decode_cache + decode_pos, 0,
- (hdaudio->decode_cache_size - decode_pos)
- * sizeof(short));
-
+ if (decode_pos < hdaudio->decode_cache_size) {
+ memset(hdaudio->decode_cache + decode_pos, 0,
+ (hdaudio->decode_cache_size - decode_pos)
+ * sizeof(short));
- while(av_read_frame(hdaudio->pFormatCtx, &packet) >= 0) {
- int data_size;
- int len;
- uint8_t *audio_pkt_data;
- int audio_pkt_size;
+ while(av_read_frame(
+ hdaudio->pFormatCtx, &packet) >= 0) {
+ int data_size;
+ int len;
+ uint8_t *audio_pkt_data;
+ int audio_pkt_size;
+
+ if(packet.stream_index
+ != hdaudio->audioStream) {
+ av_free_packet(&packet);
+ continue;
+ }
- if(packet.stream_index != hdaudio->audioStream) {
- av_free_packet(&packet);
- continue;
- }
+ audio_pkt_data = packet.data;
+ audio_pkt_size = packet.size;
- audio_pkt_data = packet.data;
- audio_pkt_size = packet.size;
-
- while (audio_pkt_size > 0) {
- len = avcodec_decode_audio(
- hdaudio->pCodecCtx,
- hdaudio->decode_cache
- + decode_pos,
- &data_size,
- audio_pkt_data,
- audio_pkt_size);
- if (len <= 0) {
- audio_pkt_size = 0;
- break;
+ while (audio_pkt_size > 0) {
+ len = avcodec_decode_audio(
+ hdaudio->pCodecCtx,
+ hdaudio->decode_cache
+ + decode_pos,
+ &data_size,
+ audio_pkt_data,
+ audio_pkt_size);
+ if (len <= 0) {
+ audio_pkt_size = 0;
+ break;
+ }
+
+ audio_pkt_size -= len;
+ audio_pkt_data += len;
+
+ if (data_size <= 0) {
+ continue;
+ }
+
+ decode_pos += data_size / sizeof(short);
+ if (decode_pos + data_size
+ / sizeof(short)
+ > hdaudio->decode_cache_size) {
+ break;
+ }
}
+ av_free_packet(&packet);
- audio_pkt_size -= len;
- audio_pkt_data += len;
-
- if (data_size <= 0) {
- continue;
- }
-
- decode_pos += data_size / sizeof(short);
- if (decode_pos + data_size
- / sizeof(short)
+ if (decode_pos + data_size / sizeof(short)
> hdaudio->decode_cache_size) {
break;
}
}
- av_free_packet(&packet);
-
- if (decode_pos + data_size / sizeof(short)
- > hdaudio->decode_cache_size) {
- break;
- }
}
if (rate_conversion) {
More information about the Bf-blender-cvs
mailing list