Merged release 0.15.4 from branch 'v0.15.x'
Conflicts: NEWS configure.ac
This commit is contained in:
		
							
								
								
									
										4
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								NEWS
									
									
									
									
									
								
							@@ -39,9 +39,11 @@ ver 0.16 (20??/??/??)
 | 
				
			|||||||
* obey $(sysconfdir) for default mpd.conf location
 | 
					* obey $(sysconfdir) for default mpd.conf location
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ver 0.15.4 (2009/??/??)
 | 
					ver 0.15.4 (2009/10/03)
 | 
				
			||||||
* decoders:
 | 
					* decoders:
 | 
				
			||||||
  - vorbis: revert "faster tag scanning with ov_test_callback()"
 | 
					  - vorbis: revert "faster tag scanning with ov_test_callback()"
 | 
				
			||||||
 | 
					  - faad: skip assertion failure on large ID3 tags
 | 
				
			||||||
 | 
					  - ffmpeg: use the "artist" tag if "author" is not present
 | 
				
			||||||
* output:
 | 
					* output:
 | 
				
			||||||
  - osx: fix the OS X 10.6 build
 | 
					  - osx: fix the OS X 10.6 build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -162,6 +162,7 @@ faad_song_duration(struct decoder_buffer *buffer, struct input_stream *is)
 | 
				
			|||||||
	size_t tagsize;
 | 
						size_t tagsize;
 | 
				
			||||||
	const unsigned char *data;
 | 
						const unsigned char *data;
 | 
				
			||||||
	size_t length;
 | 
						size_t length;
 | 
				
			||||||
 | 
						bool success;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fileread = is->size >= 0 ? is->size : 0;
 | 
						fileread = is->size >= 0 ? is->size : 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -179,8 +180,11 @@ faad_song_duration(struct decoder_buffer *buffer, struct input_stream *is)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		tagsize += 10;
 | 
							tagsize += 10;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		decoder_buffer_consume(buffer, tagsize);
 | 
							success = decoder_buffer_skip(buffer, tagsize) &&
 | 
				
			||||||
		decoder_buffer_fill(buffer);
 | 
								decoder_buffer_fill(buffer);
 | 
				
			||||||
 | 
							if (!success)
 | 
				
			||||||
 | 
								return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		data = decoder_buffer_read(buffer, &length);
 | 
							data = decoder_buffer_read(buffer, &length);
 | 
				
			||||||
		if (data == NULL)
 | 
							if (data == NULL)
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -339,7 +339,7 @@ ffmpeg_decode(struct decoder *decoder, struct input_stream *input)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if LIBAVFORMAT_VERSION_INT >= ((52<<16)+(31<<8)+0)
 | 
					#if LIBAVFORMAT_VERSION_INT >= ((52<<16)+(31<<8)+0)
 | 
				
			||||||
static void
 | 
					static bool
 | 
				
			||||||
ffmpeg_copy_metadata(struct tag *tag, AVMetadata *m,
 | 
					ffmpeg_copy_metadata(struct tag *tag, AVMetadata *m,
 | 
				
			||||||
		     enum tag_type type, const char *name)
 | 
							     enum tag_type type, const char *name)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -347,6 +347,7 @@ ffmpeg_copy_metadata(struct tag *tag, AVMetadata *m,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	while ((mt = av_metadata_get(m, name, mt, 0)) != NULL)
 | 
						while ((mt = av_metadata_get(m, name, mt, 0)) != NULL)
 | 
				
			||||||
		tag_add_item(tag, type, mt->value);
 | 
							tag_add_item(tag, type, mt->value);
 | 
				
			||||||
 | 
						return mt != NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -363,7 +364,9 @@ static bool ffmpeg_tag_internal(struct ffmpeg_context *ctx)
 | 
				
			|||||||
	av_metadata_conv(f, NULL, f->iformat->metadata_conv);
 | 
						av_metadata_conv(f, NULL, f->iformat->metadata_conv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ffmpeg_copy_metadata(tag, f->metadata, TAG_ITEM_TITLE, "title");
 | 
						ffmpeg_copy_metadata(tag, f->metadata, TAG_ITEM_TITLE, "title");
 | 
				
			||||||
	ffmpeg_copy_metadata(tag, f->metadata, TAG_ITEM_ARTIST, "author");
 | 
						if (!ffmpeg_copy_metadata(tag, f->metadata, TAG_ITEM_ARTIST, "author"))
 | 
				
			||||||
 | 
							ffmpeg_copy_metadata(tag, f->metadata,
 | 
				
			||||||
 | 
									     TAG_ITEM_ARTIST, "artist");
 | 
				
			||||||
	ffmpeg_copy_metadata(tag, f->metadata, TAG_ITEM_ALBUM, "album");
 | 
						ffmpeg_copy_metadata(tag, f->metadata, TAG_ITEM_ALBUM, "album");
 | 
				
			||||||
	ffmpeg_copy_metadata(tag, f->metadata, TAG_ITEM_COMMENT, "comment");
 | 
						ffmpeg_copy_metadata(tag, f->metadata, TAG_ITEM_COMMENT, "comment");
 | 
				
			||||||
	ffmpeg_copy_metadata(tag, f->metadata, TAG_ITEM_GENRE, "genre");
 | 
						ffmpeg_copy_metadata(tag, f->metadata, TAG_ITEM_GENRE, "genre");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -138,3 +138,29 @@ decoder_buffer_consume(struct decoder_buffer *buffer, size_t nbytes)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	assert(buffer->consumed <= buffer->length);
 | 
						assert(buffer->consumed <= buffer->length);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool
 | 
				
			||||||
 | 
					decoder_buffer_skip(struct decoder_buffer *buffer, size_t nbytes)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						size_t length;
 | 
				
			||||||
 | 
						const void *data;
 | 
				
			||||||
 | 
						bool success;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* this could probably be optimized by seeking */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (true) {
 | 
				
			||||||
 | 
							data = decoder_buffer_read(buffer, &length);
 | 
				
			||||||
 | 
							if (data != NULL) {
 | 
				
			||||||
 | 
								if (length > nbytes)
 | 
				
			||||||
 | 
									length = nbytes;
 | 
				
			||||||
 | 
								decoder_buffer_consume(buffer, length);
 | 
				
			||||||
 | 
								nbytes -= length;
 | 
				
			||||||
 | 
								if (nbytes == 0)
 | 
				
			||||||
 | 
									return true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							success = decoder_buffer_fill(buffer);
 | 
				
			||||||
 | 
							if (!success)
 | 
				
			||||||
 | 
								return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,4 +93,14 @@ decoder_buffer_read(const struct decoder_buffer *buffer, size_t *length_r);
 | 
				
			|||||||
void
 | 
					void
 | 
				
			||||||
decoder_buffer_consume(struct decoder_buffer *buffer, size_t nbytes);
 | 
					decoder_buffer_consume(struct decoder_buffer *buffer, size_t nbytes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Skips the specified number of bytes, discarding its data.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param buffer the decoder_buffer object
 | 
				
			||||||
 | 
					 * @param nbytes the number of bytes to skip
 | 
				
			||||||
 | 
					 * @return true on success, false on error
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					bool
 | 
				
			||||||
 | 
					decoder_buffer_skip(struct decoder_buffer *buffer, size_t nbytes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@
 | 
				
			|||||||
#include <errno.h>
 | 
					#include <errno.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef G_LOG_DOMAIN
 | 
					#undef G_LOG_DOMAIN
 | 
				
			||||||
#define G_LOG_DOMAIN "jack"
 | 
					#define G_LOG_DOMAIN "input_mms"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct input_mms {
 | 
					struct input_mms {
 | 
				
			||||||
	mmsx_t *mms;
 | 
						mmsx_t *mms;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user