InputStream: add constructor/destructor
Eliminate input_stream_init() and input_stream_deinit().
This commit is contained in:
		| @@ -21,37 +21,6 @@ | ||||
| #include "InputInternal.hxx" | ||||
| #include "InputStream.hxx" | ||||
|  | ||||
| #include <assert.h> | ||||
|  | ||||
| void | ||||
| input_stream_init(struct input_stream *is, const struct input_plugin *plugin, | ||||
| 		  const char *uri, Mutex &mutex, Cond &cond) | ||||
| { | ||||
| 	assert(is != NULL); | ||||
| 	assert(plugin != NULL); | ||||
| 	assert(uri != NULL); | ||||
|  | ||||
| 	is->plugin = plugin; | ||||
| 	is->uri = g_strdup(uri); | ||||
| 	is->mutex = &mutex; | ||||
| 	is->cond = &cond; | ||||
| 	is->ready = false; | ||||
| 	is->seekable = false; | ||||
| 	is->size = -1; | ||||
| 	is->offset = 0; | ||||
| 	is->mime = NULL; | ||||
| } | ||||
|  | ||||
| void | ||||
| input_stream_deinit(struct input_stream *is) | ||||
| { | ||||
| 	assert(is != NULL); | ||||
| 	assert(is->plugin != NULL); | ||||
|  | ||||
| 	g_free(is->uri); | ||||
| 	g_free(is->mime); | ||||
| } | ||||
|  | ||||
| void | ||||
| input_stream_signal_client(struct input_stream *is) | ||||
| { | ||||
|   | ||||
| @@ -21,18 +21,8 @@ | ||||
| #define MPD_INPUT_INTERNAL_HXX | ||||
|  | ||||
| #include "check.h" | ||||
| #include "thread/Mutex.hxx" | ||||
| #include "thread/Cond.hxx" | ||||
|  | ||||
| struct input_stream; | ||||
| struct input_plugin; | ||||
|  | ||||
| void | ||||
| input_stream_init(struct input_stream *is, const struct input_plugin *plugin, | ||||
| 		  const char *uri, Mutex &mutex, Cond &cond); | ||||
|  | ||||
| void | ||||
| input_stream_deinit(struct input_stream *is); | ||||
|  | ||||
| void | ||||
| input_stream_signal_client(struct input_stream *is); | ||||
|   | ||||
| @@ -28,6 +28,8 @@ | ||||
|  | ||||
| #include <glib.h> | ||||
|  | ||||
| #include <assert.h> | ||||
|  | ||||
| struct input_stream { | ||||
| 	/** | ||||
| 	 * the plugin which implements this input stream | ||||
| @@ -85,6 +87,21 @@ struct input_stream { | ||||
| 	 * the MIME content type of the resource, or NULL if unknown | ||||
| 	 */ | ||||
| 	char *mime; | ||||
|  | ||||
| 	input_stream(const input_plugin &_plugin, | ||||
| 		     const char *_uri, Mutex &_mutex, Cond &_cond) | ||||
| 		:plugin(&_plugin), uri(g_strdup(_uri)), | ||||
| 		 mutex(&_mutex), cond(&_cond), | ||||
| 		 ready(false), seekable(false), | ||||
| 		 size(-1), offset(0), | ||||
| 		 mime(nullptr) { | ||||
| 		assert(_uri != NULL); | ||||
| 	} | ||||
|  | ||||
| 	~input_stream() { | ||||
| 		g_free(uri); | ||||
| 		g_free(mime); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
| gcc_nonnull(1) | ||||
|   | ||||
| @@ -184,16 +184,15 @@ bz2_close(struct archive_file *file) | ||||
|  | ||||
| Bzip2InputStream::Bzip2InputStream(Bzip2ArchiveFile &_context, const char *uri, | ||||
| 				   Mutex &mutex, Cond &cond) | ||||
| 	:archive(&_context), eof(false) | ||||
| 	:base(bz2_inputplugin, uri, mutex, cond), | ||||
| 	 archive(&_context), eof(false) | ||||
| { | ||||
| 	input_stream_init(&base, &bz2_inputplugin, uri, mutex, cond); | ||||
| 	refcount_inc(&archive->ref); | ||||
| } | ||||
|  | ||||
| Bzip2InputStream::~Bzip2InputStream() | ||||
| { | ||||
| 	bz2_close(&archive->base); | ||||
| 	input_stream_deinit(&base); | ||||
| } | ||||
|  | ||||
| static struct input_stream * | ||||
|   | ||||
| @@ -178,10 +178,9 @@ struct Iso9660InputStream { | ||||
| 	Iso9660InputStream(Iso9660ArchiveFile &_archive, const char *uri, | ||||
| 			   Mutex &mutex, Cond &cond, | ||||
| 			   iso9660_stat_t *_statbuf) | ||||
| 		:archive(&_archive), statbuf(_statbuf), | ||||
| 		:base(iso9660_input_plugin, uri, mutex, cond), | ||||
| 		      archive(&_archive), statbuf(_statbuf), | ||||
| 		 max_blocks(CEILING(statbuf->size, ISO_BLOCKSIZE)) { | ||||
| 		input_stream_init(&base, &iso9660_input_plugin, uri, | ||||
| 				  mutex, cond); | ||||
|  | ||||
| 		base.ready = true; | ||||
| 		base.size = statbuf->size; | ||||
| @@ -192,7 +191,6 @@ struct Iso9660InputStream { | ||||
| 	~Iso9660InputStream() { | ||||
| 		free(statbuf); | ||||
| 		archive->Unref(); | ||||
| 		input_stream_deinit(&base); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -142,10 +142,8 @@ struct ZzipInputStream { | ||||
| 	ZzipInputStream(ZzipArchiveFile &_archive, const char *uri, | ||||
| 			Mutex &mutex, Cond &cond, | ||||
| 			ZZIP_FILE *_file) | ||||
| 		:archive(&_archive), file(_file) { | ||||
| 		input_stream_init(&base, &zzip_input_plugin, uri, | ||||
| 				  mutex, cond); | ||||
|  | ||||
| 		:base(zzip_input_plugin, uri, mutex, cond), | ||||
| 		 archive(&_archive), file(_file) { | ||||
| 		base.ready = true; | ||||
| 		//we are seekable (but its not recommendent to do so) | ||||
| 		base.seekable = true; | ||||
| @@ -160,7 +158,6 @@ struct ZzipInputStream { | ||||
| 	~ZzipInputStream() { | ||||
| 		zzip_file_close(file); | ||||
| 		archive->Unref(); | ||||
| 		input_stream_deinit(&base); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -56,11 +56,10 @@ struct CdioParanoiaInputStream { | ||||
|  | ||||
| 	CdioParanoiaInputStream(const char *uri, Mutex &mutex, Cond &cond, | ||||
| 				int _trackno) | ||||
| 		:drv(nullptr), cdio(nullptr), para(nullptr), | ||||
| 		:base(input_plugin_cdio_paranoia, uri, mutex, cond), | ||||
| 		 drv(nullptr), cdio(nullptr), para(nullptr), | ||||
| 		 trackno(_trackno) | ||||
| 	{ | ||||
| 		input_stream_init(&base, &input_plugin_cdio_paranoia, uri, | ||||
| 				  mutex, cond); | ||||
| 	} | ||||
|  | ||||
| 	~CdioParanoiaInputStream() { | ||||
| @@ -70,8 +69,6 @@ struct CdioParanoiaInputStream { | ||||
| 			cdio_cddap_close_no_free_cdio(drv); | ||||
| 		if (cdio != nullptr) | ||||
| 			cdio_destroy(cdio); | ||||
|  | ||||
| 		input_stream_deinit(&base); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -166,12 +166,12 @@ struct input_curl { | ||||
| 	GError *postponed_error; | ||||
|  | ||||
| 	input_curl(const char *url, Mutex &mutex, Cond &cond) | ||||
| 		:range(nullptr), request_headers(nullptr), | ||||
| 		:base(input_plugin_curl, url, mutex, cond), | ||||
| 		 range(nullptr), request_headers(nullptr), | ||||
| 		 paused(false), | ||||
| 		 meta_name(nullptr), | ||||
| 		 tag(nullptr), | ||||
| 		 postponed_error(nullptr) { | ||||
| 		input_stream_init(&base, &input_plugin_curl, url, mutex, cond); | ||||
| 	} | ||||
|  | ||||
| 	~input_curl(); | ||||
| @@ -705,8 +705,6 @@ input_curl::~input_curl() | ||||
|  | ||||
| 	if (postponed_error != NULL) | ||||
| 		g_error_free(postponed_error); | ||||
|  | ||||
| 	input_stream_deinit(&base); | ||||
| } | ||||
|  | ||||
| static bool | ||||
|   | ||||
| @@ -51,11 +51,10 @@ struct DespotifyInputStream { | ||||
| 			     Mutex &mutex, Cond &cond, | ||||
| 			     despotify_session *_session, | ||||
| 			     ds_track *_track) | ||||
| 		:session(_session), track(_track), | ||||
| 		:base(input_plugin_despotify, uri, mutex, cond), | ||||
| 		 session(_session), track(_track), | ||||
| 		 tag(mpd_despotify_tag_from_track(track)), | ||||
| 		 len_available(0), eof(false) { | ||||
| 		input_stream_init(&base, &input_plugin_despotify, uri, | ||||
| 				  mutex, cond); | ||||
|  | ||||
| 		memset(&pcm, 0, sizeof(pcm)); | ||||
|  | ||||
| @@ -69,7 +68,6 @@ struct DespotifyInputStream { | ||||
| 			tag_free(tag); | ||||
|  | ||||
| 		despotify_free_track(track); | ||||
| 		input_stream_deinit(&base); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -44,10 +44,8 @@ struct FfmpegInputStream { | ||||
|  | ||||
| 	FfmpegInputStream(const char *uri, Mutex &mutex, Cond &cond, | ||||
| 			  AVIOContext *_h) | ||||
| 		:h(_h), eof(false) { | ||||
| 		input_stream_init(&base, &input_plugin_ffmpeg, | ||||
| 				  uri, mutex, cond); | ||||
|  | ||||
| 		:base(input_plugin_ffmpeg, uri, mutex, cond), | ||||
| 		 h(_h), eof(false) { | ||||
| 		base.ready = true; | ||||
| 		base.seekable = (h->seekable & AVIO_SEEKABLE_NORMAL) != 0; | ||||
| 		base.size = avio_size(h); | ||||
| @@ -61,7 +59,6 @@ struct FfmpegInputStream { | ||||
|  | ||||
| 	~FfmpegInputStream() { | ||||
| 		avio_close(h); | ||||
| 		input_stream_deinit(&base); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -42,10 +42,8 @@ struct FileInputStream { | ||||
|  | ||||
| 	FileInputStream(const char *path, int _fd, off_t size, | ||||
| 			Mutex &mutex, Cond &cond) | ||||
| 		:fd(_fd) { | ||||
| 		input_stream_init(&base, &input_plugin_file, path, | ||||
| 				  mutex, cond); | ||||
|  | ||||
| 		:base(input_plugin_file, path, mutex, cond), | ||||
| 		 fd(_fd) { | ||||
| 		base.size = size; | ||||
| 		base.seekable = true; | ||||
| 		base.ready = true; | ||||
| @@ -53,7 +51,6 @@ struct FileInputStream { | ||||
|  | ||||
| 	~FileInputStream() { | ||||
| 		close(fd); | ||||
| 		input_stream_deinit(&base); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -42,9 +42,8 @@ struct MmsInputStream { | ||||
| 	MmsInputStream(const char *uri, | ||||
| 		       Mutex &mutex, Cond &cond, | ||||
| 		       mmsx_t *_mms) | ||||
| 		:mms(_mms), eof(false) { | ||||
| 		input_stream_init(&base, &input_plugin_mms, uri, mutex, cond); | ||||
|  | ||||
| 		:base(input_plugin_mms, uri, mutex, cond), | ||||
| 		 mms(_mms), eof(false) { | ||||
| 		/* XX is this correct?  at least this selects the ffmpeg | ||||
| 		   decoder, which seems to work fine*/ | ||||
| 		base.mime = g_strdup("audio/x-ms-wma"); | ||||
| @@ -54,7 +53,6 @@ struct MmsInputStream { | ||||
|  | ||||
| 	~MmsInputStream() { | ||||
| 		mmsx_close(mms); | ||||
| 		input_stream_deinit(&base); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -61,15 +61,13 @@ struct RewindInputStream { | ||||
| 	char buffer[64 * 1024]; | ||||
|  | ||||
| 	RewindInputStream(input_stream *_input) | ||||
| 		:input(_input), tail(0) { | ||||
| 		input_stream_init(&base, &rewind_input_plugin, input->uri, | ||||
| 				  *input->mutex, *input->cond); | ||||
| 		:base(rewind_input_plugin, _input->uri, | ||||
| 		      *_input->mutex, *_input->cond), | ||||
| 		 input(_input), tail(0) { | ||||
| 	} | ||||
|  | ||||
| 	~RewindInputStream() { | ||||
| 		input_stream_close(input); | ||||
|  | ||||
| 		input_stream_deinit(&base); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
|   | ||||
| @@ -278,14 +278,12 @@ input_soup_queue(gpointer data) | ||||
|  | ||||
| SoupInputStream::SoupInputStream(const char *uri, | ||||
| 				 Mutex &mutex, Cond &cond) | ||||
| 	:buffers(g_queue_new()), | ||||
| 	:base(input_plugin_soup, uri, mutex, cond), | ||||
| 	 buffers(g_queue_new()), | ||||
| 	 current_consumed(0), total_buffered(0), | ||||
| 	 alive(false), pause(false), eof(false), completed(false), | ||||
| 	 postponed_error(nullptr) | ||||
| { | ||||
| 	input_stream_init(&base, &input_plugin_soup, uri, | ||||
| 			  mutex, cond); | ||||
|  | ||||
| #if GCC_CHECK_VERSION(4,6) | ||||
| #pragma GCC diagnostic push | ||||
| 	/* the libsoup macro SOUP_METHOD_GET discards the "const" | ||||
| @@ -365,8 +363,6 @@ SoupInputStream::~SoupInputStream() | ||||
|  | ||||
| 	if (postponed_error != NULL) | ||||
| 		g_error_free(postponed_error); | ||||
|  | ||||
| 	input_stream_deinit(&base); | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann