OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/filters/audio_file_reader.h" | 5 #include "media/filters/audio_file_reader.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 AVPacket packet; | 124 AVPacket packet; |
125 int current_frame = 0; | 125 int current_frame = 0; |
126 bool continue_decoding = true; | 126 bool continue_decoding = true; |
127 | 127 |
128 while (current_frame < audio_bus->frames() && continue_decoding && | 128 while (current_frame < audio_bus->frames() && continue_decoding && |
129 ReadPacket(&packet)) { | 129 ReadPacket(&packet)) { |
130 // Make a shallow copy of packet so we can slide packet.data as frames are | 130 // Make a shallow copy of packet so we can slide packet.data as frames are |
131 // decoded from the packet; otherwise av_free_packet() will corrupt memory. | 131 // decoded from the packet; otherwise av_free_packet() will corrupt memory. |
132 AVPacket packet_temp = packet; | 132 AVPacket packet_temp = packet; |
133 do { | 133 do { |
134 avcodec_get_frame_defaults(av_frame.get()); | 134 // Reset frame to default values. |
| 135 av_frame_unref(av_frame.get()); |
| 136 |
135 int frame_decoded = 0; | 137 int frame_decoded = 0; |
136 int result = avcodec_decode_audio4( | 138 int result = avcodec_decode_audio4( |
137 codec_context_, av_frame.get(), &frame_decoded, &packet_temp); | 139 codec_context_, av_frame.get(), &frame_decoded, &packet_temp); |
138 | 140 |
139 if (result < 0) { | 141 if (result < 0) { |
140 DLOG(WARNING) | 142 DLOG(WARNING) |
141 << "AudioFileReader::Read() : error in avcodec_decode_audio4() -" | 143 << "AudioFileReader::Read() : error in avcodec_decode_audio4() -" |
142 << result; | 144 << result; |
143 break; | 145 break; |
144 } | 146 } |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 if (output_packet->stream_index != stream_index_) { | 251 if (output_packet->stream_index != stream_index_) { |
250 av_free_packet(output_packet); | 252 av_free_packet(output_packet); |
251 continue; | 253 continue; |
252 } | 254 } |
253 return true; | 255 return true; |
254 } | 256 } |
255 return false; | 257 return false; |
256 } | 258 } |
257 | 259 |
258 } // namespace media | 260 } // namespace media |
OLD | NEW |