From 0788850a343aedac79b5db636e99a8545bb4214e Mon Sep 17 00:00:00 2001 From: Darren Salt Date: Tue, 1 Dec 2009 01:33:30 +0000 Subject: Fork failure messages shouldn't be debug-only. --- src/input/input_pvr.c | 2 +- src/xine-engine/audio_out.c | 2 +- src/xine-engine/broadcaster.c | 2 +- src/xine-engine/events.c | 2 +- src/xine-engine/video_out.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/input/input_pvr.c b/src/input/input_pvr.c index 7b08ef5ea..5e7f7bca9 100644 --- a/src/input/input_pvr.c +++ b/src/input/input_pvr.c @@ -1453,7 +1453,7 @@ static int pvr_plugin_open (input_plugin_t *this_gen ) { if ((err = pthread_create (&this->pvr_thread, NULL, pvr_loop, this)) != 0) { - xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, + xprintf (this->stream->xine, XINE_VERBOSITY_NONE, "input_pvr: can't create new thread (%s)\n", strerror(err)); _x_abort(); } diff --git a/src/xine-engine/audio_out.c b/src/xine-engine/audio_out.c index 601af196a..4f68b8975 100644 --- a/src/xine-engine/audio_out.c +++ b/src/xine-engine/audio_out.c @@ -2285,7 +2285,7 @@ xine_audio_port_t *_x_ao_new_port (xine_t *xine, ao_driver_t *driver, if ((err = pthread_create (&this->audio_thread, &pth_attrs, ao_loop, this)) != 0) { - xprintf (this->xine, XINE_VERBOSITY_DEBUG, + xprintf (this->xine, XINE_VERBOSITY_NONE, "audio_out: can't create thread (%s)\n", strerror(err)); xprintf (this->xine, XINE_VERBOSITY_LOG, _("audio_out: sorry, this should not happen. please restart xine.\n")); diff --git a/src/xine-engine/broadcaster.c b/src/xine-engine/broadcaster.c index 22390459e..a554337a3 100644 --- a/src/xine-engine/broadcaster.c +++ b/src/xine-engine/broadcaster.c @@ -343,7 +343,7 @@ broadcaster_t *_x_init_broadcaster(xine_stream_t *stream, int port) this->running = 1; if ((err = pthread_create (&this->manager_thread, NULL, manager_loop, (void *)this)) != 0) { - xprintf (stream->xine, XINE_VERBOSITY_DEBUG, + xprintf (stream->xine, XINE_VERBOSITY_NONE, "broadcaster: can't create new thread (%s)\n", strerror(err)); _x_abort(); } diff --git a/src/xine-engine/events.c b/src/xine-engine/events.c index cf35f96b4..a51813adc 100644 --- a/src/xine-engine/events.c +++ b/src/xine-engine/events.c @@ -244,7 +244,7 @@ void xine_event_create_listener_thread (xine_event_queue_t *queue, if ((err = pthread_create (queue->listener_thread, NULL, listener_loop, queue)) != 0) { - xprintf (queue->stream->xine, XINE_VERBOSITY_DEBUG, + xprintf (queue->stream->xine, XINE_VERBOSITY_NONE, "events: can't create new thread (%s)\n", strerror(err)); _x_abort(); } diff --git a/src/xine-engine/video_out.c b/src/xine-engine/video_out.c index 1ecd59225..0b6d8f7a1 100644 --- a/src/xine-engine/video_out.c +++ b/src/xine-engine/video_out.c @@ -1910,7 +1910,7 @@ xine_video_port_t *_x_vo_new_port (xine_t *xine, vo_driver_t *driver, int grabon if ((err = pthread_create (&this->video_thread, &pth_attrs, video_out_loop, this)) != 0) { - xprintf (this->xine, XINE_VERBOSITY_DEBUG, "video_out: can't create thread (%s)\n", strerror(err)); + xprintf (this->xine, XINE_VERBOSITY_NONE, "video_out: can't create thread (%s)\n", strerror(err)); /* FIXME: how does this happen ? */ xprintf (this->xine, XINE_VERBOSITY_LOG, _("video_out: sorry, this should not happen. please restart xine.\n")); -- cgit v1.2.3 From 54f924caa91b80827a370043436c759bfec6f0de Mon Sep 17 00:00:00 2001 From: Carlo Bramini Date: Thu, 3 Dec 2009 13:03:56 +0100 Subject: Linkage error on minggw+msys when building demux_mpeg: libintl_printf is undefined. --- src/demuxers/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/demuxers/Makefile.am b/src/demuxers/Makefile.am index bcf812e03..027f6750f 100644 --- a/src/demuxers/Makefile.am +++ b/src/demuxers/Makefile.am @@ -62,7 +62,7 @@ xineplug_dmx_mpeg_block_la_SOURCES = demux_mpeg_block.c xineplug_dmx_mpeg_block_la_LIBADD = $(XINE_LIB) $(LTLIBINTL) xineplug_dmx_mpeg_la_SOURCES = demux_mpeg.c -xineplug_dmx_mpeg_la_LIBADD = $(XINE_LIB) +xineplug_dmx_mpeg_la_LIBADD = $(XINE_LIB) $(LTLIBINTL) xineplug_dmx_mpeg_elem_la_SOURCES = demux_elem.c xineplug_dmx_mpeg_elem_la_LIBADD = $(XINE_LIB) -- cgit v1.2.3 From 163c718082fb33be47f75f648203d8f011c8c35f Mon Sep 17 00:00:00 2001 From: Carlo Bramini Date: Thu, 3 Dec 2009 13:03:56 +0100 Subject: Compile error in xine_hdmv_decoder.c on mingw+msys: ERROR is a reserved macro. TRACE and ERROR are now prefixed with XINE_HDMV_. --- src/libspuhdmv/xine_hdmv_decoder.c | 64 +++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/libspuhdmv/xine_hdmv_decoder.c b/src/libspuhdmv/xine_hdmv_decoder.c index ba4487bf6..e3a16439d 100644 --- a/src/libspuhdmv/xine_hdmv_decoder.c +++ b/src/libspuhdmv/xine_hdmv_decoder.c @@ -45,9 +45,9 @@ # include #endif -#define TRACE(x...) printf(x) +#define XINE_HDMV_TRACE(x...) printf(x) /*#define TRACE(x...) */ -#define ERROR(x...) fprintf(stderr, "spuhdmv: " x) +#define XINE_HDMV_ERROR(x...) fprintf(stderr, "spuhdmv: " x) /*#define ERROR(x...) lprintf(x) */ /* @@ -252,7 +252,7 @@ static void segbuf_parse_segment_header(segment_buffer_t *buf) if ( buf->segment_type < 0x14 || ( buf->segment_type > 0x18 && buf->segment_type != 0x80)) { - ERROR("unknown segment type, resetting\n"); + XINE_HDMV_ERROR("unknown segment type, resetting\n"); segbuf_reset(buf); } } else { @@ -291,9 +291,9 @@ static void segbuf_skip_segment(segment_buffer_t *buf) segbuf_parse_segment_header(buf); - TRACE(" skip_segment: %d bytes left\n", (uint)buf->len); + XINE_HDMV_TRACE(" skip_segment: %d bytes left\n", (uint)buf->len); } else { - ERROR(" skip_segment: ERROR - %d bytes queued, %d required\n", + XINE_HDMV_ERROR(" skip_segment: ERROR - %d bytes queued, %d required\n", (uint)buf->len, buf->segment_len); segbuf_reset (buf); } @@ -319,7 +319,7 @@ static uint8_t segbuf_get_u8(segment_buffer_t *buf) { if (!(buf->error = ++buf->segment_data > buf->segment_end)) return buf->segment_data[-1]; - ERROR("segbuf_get_u8: read failed (end of segment reached) !"); + XINE_HDMV_ERROR("segbuf_get_u8: read failed (end of segment reached) !"); return 0; } @@ -341,7 +341,7 @@ static uint8_t *segbuf_get_string(segment_buffer_t *buf, size_t len) if (buf->segment_data <= buf->segment_end) return val; } - ERROR("segbuf_get_string(%d): read failed (end of segment reached) !", (int)len); + XINE_HDMV_ERROR("segbuf_get_string(%d): read failed (end of segment reached) !", (int)len); buf->error = 1; return NULL; } @@ -363,11 +363,11 @@ static subtitle_clut_t *segbuf_decode_palette(segment_buffer_t *buf) return NULL; if (len % 5) { - ERROR(" decode_palette: segment size error (%d ; expected %d for %d entries)\n", + XINE_HDMV_ERROR(" decode_palette: segment size error (%d ; expected %d for %d entries)\n", (uint)len, (uint)(5 * entries), (uint)entries); return NULL; } - TRACE("decode_palette: %d items (id %d, version %d)\n", + XINE_HDMV_TRACE("decode_palette: %d items (id %d, version %d)\n", (uint)entries, palette_id, palette_version_number); /* convert to xine-lib clut */ @@ -457,7 +457,7 @@ static subtitle_object_t *segbuf_decode_object(segment_buffer_t *buf) uint8_t version = segbuf_get_u8 (buf); uint8_t seq_desc = segbuf_get_u8 (buf); - TRACE(" decode_object: object_id %d, version %d, seq 0x%x\n", + XINE_HDMV_TRACE(" decode_object: object_id %d, version %d, seq 0x%x\n", object_id, version, seq_desc); //LIST_FIND(); @@ -470,7 +470,7 @@ static subtitle_object_t *segbuf_decode_object(segment_buffer_t *buf) obj->width = segbuf_get_u16(buf); obj->height = segbuf_get_u16(buf); - TRACE(" object length %d bytes, size %dx%d\n", data_len, obj->width, obj->height); + XINE_HDMV_TRACE(" object length %d bytes, size %dx%d\n", data_len, obj->width, obj->height); segbuf_decode_rle (buf, obj); @@ -480,7 +480,7 @@ static subtitle_object_t *segbuf_decode_object(segment_buffer_t *buf) } } else { - ERROR(" TODO: APPEND RLE, length %d bytes\n", buf->segment_len - 4); + XINE_HDMV_ERROR(" TODO: APPEND RLE, length %d bytes\n", buf->segment_len - 4); /* TODO */ free_subtitle_object(obj); return NULL; @@ -500,7 +500,7 @@ static window_def_t *segbuf_decode_window_definition(segment_buffer_t *buf) wnd->width = segbuf_get_u16 (buf); wnd->height = segbuf_get_u16 (buf); - TRACE(" window: [%02x %d] %d,%d %dx%d\n", a, + XINE_HDMV_TRACE(" window: [%02x %d] %d,%d %dx%d\n", a, wnd->id, wnd->xpos, wnd->ypos, wnd->width, wnd->height); if (buf->error) { @@ -517,7 +517,7 @@ static int segbuf_decode_video_descriptor(segment_buffer_t *buf) uint16_t height = segbuf_get_u16(buf); uint8_t frame_rate = segbuf_get_u8 (buf); - TRACE(" video_descriptor: %dx%d fps %d\n", width, height, frame_rate); + XINE_HDMV_TRACE(" video_descriptor: %dx%d fps %d\n", width, height, frame_rate); return buf->error; } @@ -526,7 +526,7 @@ static int segbuf_decode_composition_descriptor(segment_buffer_t *buf, compositi descr->number = segbuf_get_u16(buf); descr->state = segbuf_get_u8 (buf); - TRACE(" composition_descriptor: number %d, state %d\n", descr->number, descr->state); + XINE_HDMV_TRACE(" composition_descriptor: number %d, state %d\n", descr->number, descr->state); return buf->error; } @@ -555,7 +555,7 @@ static composition_object_t *segbuf_decode_composition_object(segment_buffer_t * return NULL; } - TRACE(" composition_object: id: %d, win: %d, position %d,%d crop %d forced %d\n", + XINE_HDMV_TRACE(" composition_object: id: %d, win: %d, position %d,%d crop %d forced %d\n", cobj->object_id_ref, cobj->window_id_ref, cobj->xpos, cobj->ypos, cobj->cropped_flag, cobj->forced_flag); @@ -574,7 +574,7 @@ static presentation_segment_t *segbuf_decode_presentation_segment(segment_buffer seg->palette_id_ref = segbuf_get_u8 (buf); seg->object_number = segbuf_get_u8 (buf); - TRACE(" presentation_segment: object_number %d, palette %d\n", + XINE_HDMV_TRACE(" presentation_segment: object_number %d, palette %d\n", seg->object_number, seg->palette_id_ref); for (index = 0; index < seg->object_number; index++) { @@ -694,7 +694,7 @@ static int show_overlay(spuhdmv_decoder_t *this, composition_object_t *cobj, uin while (clut && clut->id != palette_id_ref) clut = clut->next; if (!clut) { - TRACE(" show_overlay: clut %d not found !\n", palette_id_ref); + XINE_HDMV_TRACE(" show_overlay: clut %d not found !\n", palette_id_ref); return -1; } @@ -703,7 +703,7 @@ static int show_overlay(spuhdmv_decoder_t *this, composition_object_t *cobj, uin while (obj && obj->id != cobj->object_id_ref) obj = obj->next; if (!obj) { - TRACE(" show_overlay: object %d not found !\n", cobj->object_id_ref); + XINE_HDMV_TRACE(" show_overlay: object %d not found !\n", cobj->object_id_ref); return -1; } @@ -712,7 +712,7 @@ static int show_overlay(spuhdmv_decoder_t *this, composition_object_t *cobj, uin while (wnd && wnd->id != cobj->window_id_ref) wnd = wnd->next; if (!wnd) { - TRACE(" show_overlay: window %d not found !\n", cobj->window_id_ref); + XINE_HDMV_TRACE(" show_overlay: window %d not found !\n", cobj->window_id_ref); return -1; } @@ -745,7 +745,7 @@ static int show_overlay(spuhdmv_decoder_t *this, composition_object_t *cobj, uin overlay.hili_left = -1; overlay.hili_right = -1; - TRACE(" -> overlay: %d,%d %dx%d\n", + XINE_HDMV_TRACE(" -> overlay: %d,%d %dx%d\n", overlay.x, overlay.y, overlay.width, overlay.height); @@ -780,7 +780,7 @@ static void hide_overlays(spuhdmv_decoder_t *this, int64_t pts) int i = 0; while (this->overlay_handles[i] >= 0) { - TRACE(" -> HIDE %d\n", i); + XINE_HDMV_TRACE(" -> HIDE %d\n", i); video_overlay_manager_t *ovl_manager = this->stream->video_out->get_overlay_manager(this->stream->video_out); metronom_t *metronom = this->stream->metronom; @@ -819,7 +819,7 @@ static void update_overlays(spuhdmv_decoder_t *this) for (i = 0; i < pseg->object_number; i++) { if (!cobj) { - ERROR("show_overlays: composition object %d missing !\n", i); + XINE_HDMV_ERROR("show_overlays: composition object %d missing !\n", i); } else { show_overlay(this, cobj, pseg->palette_id_ref, i, pseg->pts, !pseg->shown); cobj = cobj->next; @@ -843,40 +843,40 @@ static void free_objs(spuhdmv_decoder_t *this) static void decode_segment(spuhdmv_decoder_t *this) { - TRACE("*** new segment, pts %010ld: 0x%02x (%8d bytes)", + XINE_HDMV_TRACE("*** new segment, pts %010ld: 0x%02x (%8d bytes)", this->pts, (uint)this->buf->segment_type, (uint)this->buf->segment_len); switch (this->buf->segment_type) { case 0x14: - TRACE(" segment: PALETTE\n"); + XINE_HDMV_TRACE(" segment: PALETTE\n"); decode_palette(this); break; case 0x15: - TRACE(" segment: OBJECT\n"); + XINE_HDMV_TRACE(" segment: OBJECT\n"); decode_object(this); break; case 0x16: - TRACE(" segment: PRESENTATION SEGMENT\n"); + XINE_HDMV_TRACE(" segment: PRESENTATION SEGMENT\n"); decode_presentation_segment(this); break; case 0x17: - TRACE(" segment: WINDOW DEFINITION\n"); + XINE_HDMV_TRACE(" segment: WINDOW DEFINITION\n"); decode_window_definition(this); break; case 0x18: - TRACE(" segment: INTERACTIVE\n"); + XINE_HDMV_TRACE(" segment: INTERACTIVE\n"); break; case 0x80: - TRACE(" segment: END OF DISPLAY\n"); + XINE_HDMV_TRACE(" segment: END OF DISPLAY\n"); /* drop all cached objects */ free_objs(this); break; default: - ERROR(" segment type 0x%x unknown, skipping\n", this->buf->segment_type); + XINE_HDMV_ERROR(" segment type 0x%x unknown, skipping\n", this->buf->segment_type); break; } if (this->buf->error) { - ERROR("*** DECODE ERROR ***\n"); + XINE_HDMV_ERROR("*** DECODE ERROR ***\n"); } update_overlays (this); -- cgit v1.2.3 From a7f2871ace40de278ff6099d5c48e75ca84abf15 Mon Sep 17 00:00:00 2001 From: Darren Salt Date: Thu, 3 Dec 2009 15:21:19 +0000 Subject: Use unsigned int, not uint. Fix up format strings where (uint)size_t was used. --- src/libspuhdmv/xine_hdmv_decoder.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/libspuhdmv/xine_hdmv_decoder.c b/src/libspuhdmv/xine_hdmv_decoder.c index e3a16439d..be5e6b638 100644 --- a/src/libspuhdmv/xine_hdmv_decoder.c +++ b/src/libspuhdmv/xine_hdmv_decoder.c @@ -73,7 +73,7 @@ struct subtitle_object_s { uint16_t width, height; rle_elem_t *rle; - uint num_rle; + unsigned int num_rle; size_t data_size; #if 0 @@ -150,7 +150,7 @@ struct presentation_segment_s { #define LIST_REPLACE(list, obj, FREE_FUNC) \ do { \ - uint id = obj->id; \ + unsigned int id = obj->id; \ \ /* insert to list */ \ obj->next = list; \ @@ -291,10 +291,10 @@ static void segbuf_skip_segment(segment_buffer_t *buf) segbuf_parse_segment_header(buf); - XINE_HDMV_TRACE(" skip_segment: %d bytes left\n", (uint)buf->len); + XINE_HDMV_TRACE(" skip_segment: %zd bytes left\n", buf->len); } else { - XINE_HDMV_ERROR(" skip_segment: ERROR - %d bytes queued, %d required\n", - (uint)buf->len, buf->segment_len); + XINE_HDMV_ERROR(" skip_segment: ERROR - %zd bytes queued, %d required\n", + buf->len, buf->segment_len); segbuf_reset (buf); } } @@ -341,7 +341,7 @@ static uint8_t *segbuf_get_string(segment_buffer_t *buf, size_t len) if (buf->segment_data <= buf->segment_end) return val; } - XINE_HDMV_ERROR("segbuf_get_string(%d): read failed (end of segment reached) !", (int)len); + XINE_HDMV_ERROR("segbuf_get_string(%zd): read failed (end of segment reached) !", len); buf->error = 1; return NULL; } @@ -363,12 +363,12 @@ static subtitle_clut_t *segbuf_decode_palette(segment_buffer_t *buf) return NULL; if (len % 5) { - XINE_HDMV_ERROR(" decode_palette: segment size error (%d ; expected %d for %d entries)\n", - (uint)len, (uint)(5 * entries), (uint)entries); + XINE_HDMV_ERROR(" decode_palette: segment size error (%zd ; expected %zd for %zd entries)\n", + len, (5 * entries), entries); return NULL; } - XINE_HDMV_TRACE("decode_palette: %d items (id %d, version %d)\n", - (uint)entries, palette_id, palette_version_number); + XINE_HDMV_TRACE("decode_palette: %zd items (id %d, version %d)\n", + entries, palette_id, palette_version_number); /* convert to xine-lib clut */ subtitle_clut_t *clut = calloc(1, sizeof(subtitle_clut_t)); @@ -681,7 +681,7 @@ static int decode_presentation_segment(spuhdmv_decoder_t *this) return 0; } -static int show_overlay(spuhdmv_decoder_t *this, composition_object_t *cobj, uint palette_id_ref, +static int show_overlay(spuhdmv_decoder_t *this, composition_object_t *cobj, unsigned int palette_id_ref, int overlay_index, int64_t pts, int force_update) { video_overlay_manager_t *ovl_manager = this->stream->video_out->get_overlay_manager(this->stream->video_out); @@ -844,7 +844,7 @@ static void free_objs(spuhdmv_decoder_t *this) static void decode_segment(spuhdmv_decoder_t *this) { XINE_HDMV_TRACE("*** new segment, pts %010ld: 0x%02x (%8d bytes)", - this->pts, (uint)this->buf->segment_type, (uint)this->buf->segment_len); + this->pts, this->buf->segment_type, this->buf->segment_len); switch (this->buf->segment_type) { case 0x14: -- cgit v1.2.3 From 0353446472d7641c79b28c22cb1136ee98235cbb Mon Sep 17 00:00:00 2001 From: Darren Salt Date: Fri, 4 Dec 2009 17:06:04 +0000 Subject: Bump the FLAC decoder's priority above ffmpegaudio, and build it by default. --- src/combined/decoder_flac.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/combined/decoder_flac.c b/src/combined/decoder_flac.c index e9a7fbb25..b774e0b90 100644 --- a/src/combined/decoder_flac.c +++ b/src/combined/decoder_flac.c @@ -426,7 +426,7 @@ static uint32_t audio_types[] = { static const decoder_info_t dec_info_audio = { audio_types, /* supported types */ - 5 /* priority */ + 8 /* priority */ }; const plugin_info_t xine_plugin_info[] EXPORTED = { -- cgit v1.2.3 From 605f33efdd3852f0f09bcaac3e2b25cea6e6c808 Mon Sep 17 00:00:00 2001 From: Darren Salt Date: Sat, 5 Dec 2009 01:50:52 +0000 Subject: Build fix (undefined symbol) for when using older ffmpeg. --- src/combined/ffmpeg/ff_video_decoder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/combined/ffmpeg/ff_video_decoder.c b/src/combined/ffmpeg/ff_video_decoder.c index 093ca4776..727508847 100644 --- a/src/combined/ffmpeg/ff_video_decoder.c +++ b/src/combined/ffmpeg/ff_video_decoder.c @@ -1180,6 +1180,7 @@ static void ff_check_pts_tagging(ff_video_decoder_t *this, uint64_t pts) } } } +#endif /* AVCODEC_HAS_REORDERED_OPAQUE */ static int ff_vc1_find_header(ff_video_decoder_t *this, buf_element_t *buf) { @@ -1224,7 +1225,6 @@ static int ff_check_extradata(ff_video_decoder_t *this, unsigned int codec_type, return 1; } -#endif /* AVCODEC_HAS_REORDERED_OPAQUE */ static void ff_handle_buffer (ff_video_decoder_t *this, buf_element_t *buf) { uint8_t *chunk_buf = this->buf; AVRational avr00 = {0, 1}; -- cgit v1.2.3 From f9ea010689310758463cc071e42f743553d17edf Mon Sep 17 00:00:00 2001 From: Kelvie Wong Date: Sat, 5 Dec 2009 19:12:21 +0000 Subject: Add mimetypes for the TTA demuxer I've noticed that a lot of the demuxers don't have mimetypes -- Nokia and KDE's Phonon (when using the Xine backend, and consequently this bothers all Amarok users) depend on the mimetypes to see what types of files it can process. This adds support for the True Audio data type, which scratches my itch; I'm sure there are several other demuxers that need a similar change. --- src/demuxers/demux_tta.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/demuxers/demux_tta.c b/src/demuxers/demux_tta.c index 9edad08bd..2626ca8e8 100644 --- a/src/demuxers/demux_tta.c +++ b/src/demuxers/demux_tta.c @@ -303,7 +303,8 @@ static const char *get_extensions (demux_class_t *this_gen) { } static const char *get_mimetypes (demux_class_t *this_gen) { - return NULL; + return "audio/x-tta: tta: True Audio;" + "audio/tta: tta: True Audio;"; } static void class_dispose (demux_class_t *this_gen) { -- cgit v1.2.3 From d46dc89d77af8947ee6e4e005afbb0b324a9d720 Mon Sep 17 00:00:00 2001 From: Kelvie Wong Date: Sun, 6 Dec 2009 03:12:00 -0800 Subject: Fix a couple of memory leaks. --- src/demuxers/demux_flac.c | 1 + src/demuxers/demux_tta.c | 1 + 2 files changed, 2 insertions(+), 0 deletions(-) --HG-- extra : transplant_source : C%21X%B8%E1p%D2%8E%E0%26%CA%3E%09%8B%09%16%19%C1CQ --- src/demuxers/demux_flac.c | 1 + src/demuxers/demux_tta.c | 1 + 2 files changed, 2 insertions(+) (limited to 'src') diff --git a/src/demuxers/demux_flac.c b/src/demuxers/demux_flac.c index 885e440a1..976656016 100644 --- a/src/demuxers/demux_flac.c +++ b/src/demuxers/demux_flac.c @@ -471,6 +471,7 @@ static void demux_flac_dispose (demux_plugin_t *this_gen) { demux_flac_t *this = (demux_flac_t *) this_gen; free(this->seekpoints); + free(this); } static int demux_flac_get_status (demux_plugin_t *this_gen) { diff --git a/src/demuxers/demux_tta.c b/src/demuxers/demux_tta.c index 2626ca8e8..11fcdd387 100644 --- a/src/demuxers/demux_tta.c +++ b/src/demuxers/demux_tta.c @@ -212,6 +212,7 @@ static int demux_tta_seek (demux_plugin_t *this_gen, static void demux_tta_dispose (demux_plugin_t *this_gen) { demux_tta_t *this = (demux_tta_t *) this_gen; + free(this->seektable); free(this); } -- cgit v1.2.3 From 6190e8a7282f7f19816c8b1df742e7fb69b33379 Mon Sep 17 00:00:00 2001 From: Kelvie Wong Date: Sun, 6 Dec 2009 03:12:09 -0800 Subject: Finish implementing the TTA demuxer * Return the correct stream length * Return the current time * Implement seeking --- src/demuxers/demux_tta.c | 47 ++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 41 insertions(+), 6 deletions(-) --HG-- extra : transplant_source : D%27%B7%5C%C4%95Ra%90E%DD%99IG%CF%5D%21%27zN --- src/demuxers/demux_tta.c | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/demuxers/demux_tta.c b/src/demuxers/demux_tta.c index 11fcdd387..d5217477d 100644 --- a/src/demuxers/demux_tta.c +++ b/src/demuxers/demux_tta.c @@ -19,6 +19,8 @@ * * True Audio demuxer by Diego Pettenò * Inspired by tta libavformat demuxer by Alex Beregszaszi + * + * Seek + time support added by Kelvie Wong */ #ifdef HAVE_CONFIG_H @@ -28,6 +30,10 @@ #define LOG_MODULE "demux_tta" #define LOG_VERBOSE +// This is from the TTA spec, the length (in seconds) of a frame +// http://www.true-audio.com/TTA_Lossless_Audio_Codec_-_Format_Description +#define FRAME_TIME 1.04489795918367346939 + #include "xine_internal.h" #include "xineutils.h" #include "demux.h" @@ -47,6 +53,8 @@ typedef struct { uint32_t totalframes; uint32_t currentframe; + off_t datastart; + int status; union { @@ -82,7 +90,7 @@ static int open_tta_file(demux_tta_t *this) { if ( this->input->read(this->input, this->header.buffer, sizeof(this->header)) != sizeof(this->header) ) return 0; - framelen = 1.04489795918367346939 * le2me_32(this->header.tta.samplerate); + framelen = (uint32_t)(FRAME_TIME * le2me_32(this->header.tta.samplerate)); this->totalframes = le2me_32(this->header.tta.data_length) / framelen + ((le2me_32(this->header.tta.data_length) % framelen) ? 1 : 0); this->currentframe = 0; @@ -97,6 +105,9 @@ static int open_tta_file(demux_tta_t *this) { /* Skip the CRC32 */ this->input->seek(this->input, 4, SEEK_CUR); + /* Store the offset after the header for seeking */ + this->datastart = this->input->get_current_pos(this->input); + return 1; } @@ -127,7 +138,7 @@ static int demux_tta_send_chunk(demux_plugin_t *this_gen) { (int) ((double) this->currentframe * 65535 / this->totalframes); /* Set time */ - /* buf->extra_info->input_time = this->current_sample / this->samplerate; */ + buf->extra_info->input_time = (int)(FRAME_TIME * this->currentframe)*1000; bytes_read = this->input->read(this->input, buf->content, ( bytes_to_read > buf->max_size ) ? buf->max_size : bytes_to_read); if (bytes_read < 0) { @@ -196,6 +207,9 @@ static void demux_tta_send_headers(demux_plugin_t *this_gen) { static int demux_tta_seek (demux_plugin_t *this_gen, off_t start_pos, int start_time, int playing) { demux_tta_t *this = (demux_tta_t *) this_gen; + uint32_t start_frame; + uint32_t frame_index; + off_t start_off = this->datastart; /* if thread is not running, initialize demuxer */ if( !playing ) { @@ -203,6 +217,27 @@ static int demux_tta_seek (demux_plugin_t *this_gen, /* send new pts */ _x_demux_control_newpts(this->stream, 0, 0); + this->status = DEMUX_OK; + + } else { + + /* Get the starting frame */ + if( start_pos ) + start_frame = start_pos * this->totalframes / 65535; + else + start_frame = (uint32_t)((double)start_time/ 1000.0 / FRAME_TIME); + + /* Now we find the offset */ + for( frame_index = 0; frame_index < start_frame; frame_index++ ) + start_off += le2me_32(this->seektable[frame_index]); + + /* Let's seek! We store the current frame internally, so let's update that + * as well */ + _x_demux_flush_engine(this->stream); + this->input->seek(this->input, start_off, SEEK_SET); + this->currentframe = start_frame; + _x_demux_control_newpts(this->stream, (int)(FRAME_TIME * start_frame) * 90000, BUF_FLAG_SEEK); + this->status = DEMUX_OK; } @@ -223,9 +258,8 @@ static int demux_tta_get_status (demux_plugin_t *this_gen) { } static int demux_tta_get_stream_length (demux_plugin_t *this_gen) { -// demux_tta_t *this = (demux_tta_t *) this_gen; - - return 0; + demux_tta_t *this = (demux_tta_t *) this_gen; + return (int)(FRAME_TIME * this->totalframes * 1000); } static uint32_t demux_tta_get_capabilities(demux_plugin_t *this_gen) { -- cgit v1.2.3