Merged release 0.15.6 from branch 'v0.15.x'
Conflicts: NEWS configure.ac
This commit is contained in:
commit
c33bbd947b
9
NEWS
9
NEWS
|
@ -76,16 +76,23 @@ ver 0.16 (20??/??/??)
|
|||
* require GLib 2.12
|
||||
|
||||
|
||||
ver 0.15.6 (2009/??/??)
|
||||
ver 0.15.7 (2009/??/??)
|
||||
|
||||
|
||||
ver 0.15.6 (2009/11/18)
|
||||
* input:
|
||||
- lastfm: fixed variable name in GLib<2.16 code path
|
||||
- input/mms: require libmms 0.4
|
||||
* archive:
|
||||
- zzip: require libzzip 0.13
|
||||
* tags:
|
||||
- id3: allow 4 MB RIFF/AIFF tags
|
||||
* decoders:
|
||||
- ffmpeg: convert metadata
|
||||
- ffmpeg: align the output buffer
|
||||
- oggflac: rewind stream after FLAC detection
|
||||
- flac: fixed CUE seeking range check
|
||||
- flac: fixed NULL pointer dereference in CUE code
|
||||
* output_thread: check again if output is open on PAUSE
|
||||
* update: delete ignored symlinks from database
|
||||
* database: increased maximum line length to 32 kB
|
||||
|
|
|
@ -223,11 +223,11 @@ flac_vtrack_tnum(const char* fname)
|
|||
* another/better way would be to use tag struct
|
||||
*/
|
||||
char* ptr = strrchr(fname, '_');
|
||||
if (ptr == NULL)
|
||||
return 0;
|
||||
|
||||
// copy ascii tracknumber to int
|
||||
char vtrack[4];
|
||||
g_strlcpy(vtrack, ++ptr, 4);
|
||||
return (unsigned int)strtol(vtrack, NULL, 10);
|
||||
return (unsigned int)strtol(++ptr, NULL, 10);
|
||||
}
|
||||
|
||||
#endif /* FLAC_API_VERSION_CURRENT >= 7 */
|
||||
|
|
|
@ -210,6 +210,21 @@ ffmpeg_helper(struct input_stream *input,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* On some platforms, libavcodec wants the output buffer aligned to 16
|
||||
* bytes (because it uses SSE/Altivec internally). This function
|
||||
* returns the aligned version of the specified buffer, and corrects
|
||||
* the buffer size.
|
||||
*/
|
||||
static void *
|
||||
align16(void *p, size_t *length_p)
|
||||
{
|
||||
unsigned add = 16 - (size_t)p % 16;
|
||||
|
||||
*length_p -= add;
|
||||
return (char *)p + add;
|
||||
}
|
||||
|
||||
static enum decoder_command
|
||||
ffmpeg_send_packet(struct decoder *decoder, struct input_stream *is,
|
||||
const AVPacket *packet,
|
||||
|
@ -218,7 +233,9 @@ ffmpeg_send_packet(struct decoder *decoder, struct input_stream *is,
|
|||
{
|
||||
enum decoder_command cmd = DECODE_COMMAND_NONE;
|
||||
int position;
|
||||
uint8_t audio_buf[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2];
|
||||
uint8_t audio_buf[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16];
|
||||
int16_t *aligned_buffer;
|
||||
size_t buffer_size;
|
||||
int len, audio_size;
|
||||
uint8_t *packet_data;
|
||||
int packet_size;
|
||||
|
@ -226,11 +243,13 @@ ffmpeg_send_packet(struct decoder *decoder, struct input_stream *is,
|
|||
packet_data = packet->data;
|
||||
packet_size = packet->size;
|
||||
|
||||
buffer_size = sizeof(audio_buf);
|
||||
aligned_buffer = align16(audio_buf, &buffer_size);
|
||||
|
||||
while ((packet_size > 0) && (cmd == DECODE_COMMAND_NONE)) {
|
||||
audio_size = sizeof(audio_buf);
|
||||
audio_size = buffer_size;
|
||||
len = avcodec_decode_audio2(codec_context,
|
||||
(int16_t *)audio_buf,
|
||||
&audio_size,
|
||||
aligned_buffer, &audio_size,
|
||||
packet_data, packet_size);
|
||||
|
||||
if (len < 0) {
|
||||
|
@ -251,7 +270,7 @@ ffmpeg_send_packet(struct decoder *decoder, struct input_stream *is,
|
|||
: 0;
|
||||
|
||||
cmd = decoder_data(decoder, is,
|
||||
audio_buf, audio_size,
|
||||
aligned_buffer, audio_size,
|
||||
position,
|
||||
codec_context->bit_rate / 1000, NULL);
|
||||
}
|
||||
|
|
|
@ -472,7 +472,7 @@ tag_id3_riff_aiff_load(FILE *file)
|
|||
if (size == 0)
|
||||
return NULL;
|
||||
|
||||
if (size > 256 * 1024)
|
||||
if (size > 4 * 1024 * 1024)
|
||||
/* too large, don't allocate so much memory */
|
||||
return NULL;
|
||||
|
||||
|
|
Loading…
Reference in New Issue