From: <fla...@gm...> - 2007-07-14 12:51:34
|
# HG changeset patch # User Diego 'Flameeyes' Pettenò <fla...@gm...> # Date 1184417545 -7200 # Node ID dd89cd84287d1f961c4a1c104192debff632fb02 # Parent 4c4fa803bab411e7b9c41296d53d25dba2c4b594 # Parent 39cc49096fed3953e1d891b1834fb7b497ddbd89 Merge from 1.1 diff -r dd89cd84287d1f961c4a1c104192debff632fb02 -r 4c4fa803bab411e7b9c41296d53d25dba2c4b594 src/input/input_http.c --- a/src/input/input_http.c Sat Jul 14 14:52:25 2007 +0200 +++ b/src/input/input_http.c Thu Jul 12 10:43:37 2007 +0100 @@ -668,6 +668,7 @@ static int http_plugin_open (input_plugi int buflen; int use_proxy; int proxyport; + int mpegurl_redirect = 0; use_proxy = this_class->proxyhost && strlen(this_class->proxyhost); @@ -899,6 +900,15 @@ static int http_plugin_open (input_plugi if (!strncasecmp (this->buf, "WWW-Authenticate: ", 18)) strcpy (this->preview, this->buf + 18); + { + static const char mpegurl_ct_str[] = "Content-Type: audio/x-mpegurl"; + static const size_t mpegurl_ct_size = sizeof(mpegurl_ct_str)-1; + if (!strncasecmp(this->buf, mpegurl_ct_str, mpegurl_ct_size)) { + lprintf("Opening an audio/x-mpegurl file, late redirect."); + + mpegurl_redirect = 1; + } + } /* Icecast / ShoutCast Stuff */ if (!strncasecmp(this->buf, TAG_ICY_NAME, sizeof(TAG_ICY_NAME) - 1)) { @@ -967,6 +977,30 @@ static int http_plugin_open (input_plugi _x_message(this->stream, XINE_MSG_AUTHENTICATION_NEEDED, this->mrl, *this->preview ? this->preview : NULL, NULL); + if ( mpegurl_redirect ) { + char buf[4096] = { 0, }; + char *newline = NULL; + + http_plugin_read_int(this, buf, 4095); + newline = strstr(buf, "\r\n"); + + /* If the newline can't be found, either the 4K buffer is too small, or + * more likely something is fuzzy. + */ + if ( newline ) { + char *href; + + *newline = '\0'; + + lprintf("mpegurl pointing to %s\n", buf); + + href = _x_canonicalise_url (this->mrl, buf); + free(this->mrl); + this->mrl = href; + return http_plugin_open(this_gen); + } + } + /* * fill preview buffer */ |
From: Petri H. <phi...@us...> - 2012-01-10 13:12:04
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1326201076 -7200 # Node ID 29a6266d78f2305bcfde2f455d881d678a098de4 # Branch default # Parent cf7281ddb28a34966e74214bb502b2877b3724c2 # Parent c69b8876fd5cdf12c268e2aa8669f212c05e98eb Merge from 1.1 diff --git a/src/spu_dec/sputext_decoder.c b/src/spu_dec/sputext_decoder.c --- a/src/spu_dec/sputext_decoder.c +++ b/src/spu_dec/sputext_decoder.c @@ -122,7 +122,7 @@ char font_ft[FILENAME_MAX]; /* subtitle font */ int use_font_ft; /* use Freetype */ #endif - char *src_encoding; /* encoding of subtitle file */ + const char *src_encoding; /* encoding of subtitle file */ int use_unscaled; /* use unscaled OSD if possible */ xine_t *xine; |
From: Petri H. <phi...@us...> - 2012-01-12 13:15:10
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1326373376 -7200 # Node ID d348a1a9202930f13859137058c6db8435098ae6 # Branch default # Parent 35dca8f636949c104a7f18c92e78743b7fcee0cf # Parent a18c7be64db95a5a50b71becc2d61cfc70e089b0 Merge from 1.1 diff --git a/src/demuxers/demux_real.c b/src/demuxers/demux_real.c --- a/src/demuxers/demux_real.c +++ b/src/demuxers/demux_real.c @@ -540,7 +540,7 @@ lprintf("audio version %d detected\n", version); - char *fourcc_ptr = "\0\0\0"; + const char *fourcc_ptr = "\0\0\0"; switch(version) { case 3: /* Version 3 header stores fourcc after meta info - cheat by reading backwards from the --git a/src/post/audio/stretch.c b/src/post/audio/stretch.c --- a/src/post/audio/stretch.c +++ b/src/post/audio/stretch.c @@ -643,7 +643,7 @@ pthread_mutex_init (&this->lock, NULL); - set_parameters ((xine_post_t *)&this->post, &init_params); + set_parameters (&this->post.xine_post, &init_params); port = _x_post_intercept_audio_port(&this->post, audio_target[0], &input, &output); port->new_port.open = stretch_port_open; --git a/src/post/audio/upmix_mono.c b/src/post/audio/upmix_mono.c --- a/src/post/audio/upmix_mono.c +++ b/src/post/audio/upmix_mono.c @@ -315,7 +315,7 @@ pthread_mutex_init (&this->lock, NULL); - set_parameters ((xine_post_t *)&this->post, &init_params); + set_parameters (&this->post.xine_post, &init_params); port = _x_post_intercept_audio_port(&this->post, audio_target[0], &input, &output); port->new_port.open = upmix_mono_port_open; --git a/src/post/deinterlace/xine_plugin.c b/src/post/deinterlace/xine_plugin.c --- a/src/post/deinterlace/xine_plugin.c +++ b/src/post/deinterlace/xine_plugin.c @@ -395,7 +395,7 @@ pthread_mutex_init (&this->lock, NULL); - set_parameters ((xine_post_t *)&this->post, &class->init_param); + set_parameters (&this->post.xine_post, &class->init_param); port = _x_post_intercept_video_port(&this->post, video_target[0], &input, &output); /* replace with our own get_frame function */ @@ -437,6 +437,7 @@ if (_x_post_dispose(this_gen)) { _flush_frames(this); pthread_mutex_destroy(&this->lock); + free(this->tvtime); free(this); } } --git a/src/spu_dec/spudvb_decoder.c b/src/spu_dec/spudvb_decoder.c --- a/src/spu_dec/spudvb_decoder.c +++ b/src/spu_dec/spudvb_decoder.c @@ -34,6 +34,7 @@ #include <xine/xine_internal.h> #include <xine/spu.h> #include <xine/osd.h> + #define MAX_REGIONS 7 #define SPU_MAX_WIDTH 1920 --git a/src/video_out/video_out_opengl.c b/src/video_out/video_out_opengl.c --- a/src/video_out/video_out_opengl.c +++ b/src/video_out/video_out_opengl.c @@ -229,7 +229,7 @@ typedef struct { /* Name of render backend */ - char *name; + const char * const name; /* Finally display current image (needed for Redraw) */ void (*display)(opengl_driver_t *, opengl_frame_t *); /* Upload new image; Returns 0 if failed */ @@ -678,7 +678,7 @@ /* * Render setup functions */ -static int render_help_verify_ext (opengl_driver_t *this, char *ext) { +static int render_help_verify_ext (opengl_driver_t *this, const char *ext) { int ret = 0; const size_t l = strlen (ext); const char *e; @@ -929,7 +929,7 @@ static int render_setup_fp_yuv (opengl_driver_t *this) { GLint errorpos; int ret; - static char *fragprog_yuv = + static const char *fragprog_yuv = "!!ARBfp1.0\n" "ATTRIB tex = fragment.texcoord[0];" "PARAM off = program.env[0];" @@ -1823,7 +1823,7 @@ config_values_t *config = class->xine->config; x11_visual_t *visual = (x11_visual_t *) visual_gen; opengl_driver_t *this; - char **render_fun_names; + const char **render_fun_names; int i; this = (opengl_driver_t *) calloc(1, sizeof(opengl_driver_t)); --git a/src/video_out/video_out_xcbshm.c b/src/video_out/video_out_xcbshm.c --- a/src/video_out/video_out_xcbshm.c +++ b/src/video_out/video_out_xcbshm.c @@ -864,7 +864,7 @@ break; case XINE_GUI_SEND_DRAWABLE_CHANGED: - this->window = (xcb_window_t) data; + this->window = (xcb_window_t) (long) data; pthread_mutex_lock(&this->main_mutex); xcb_free_gc(this->connection, this->gc); --git a/src/video_out/video_out_xcbxv.c b/src/video_out/video_out_xcbxv.c --- a/src/video_out/video_out_xcbxv.c +++ b/src/video_out/video_out_xcbxv.c @@ -826,7 +826,7 @@ case XINE_GUI_SEND_DRAWABLE_CHANGED: pthread_mutex_lock(&this->main_mutex); - this->window = (xcb_window_t) data; + this->window = (xcb_window_t) (long) data; xcb_free_gc(this->connection, this->gc); this->gc = xcb_generate_id(this->connection); xcb_create_gc(this->connection, this->gc, this->window, 0, NULL); @@ -973,9 +973,9 @@ static void xv_check_capability (xv_driver_t *this, int property, xcb_xv_attribute_info_t *attr, int base_id, - char *config_name, - char *config_desc, - char *config_help) { + const char *config_name, + const char *config_desc, + const char *config_help) { int int_default; cfg_entry_t *entry; const char *str_prop = xcb_xv_attribute_info_name(attr); --git a/src/video_out/video_out_xvmc.c b/src/video_out/video_out_xvmc.c --- a/src/video_out/video_out_xvmc.c +++ b/src/video_out/video_out_xvmc.c @@ -783,7 +783,7 @@ frame->ratio = ratio; } - xvmc->macroblocks = (xine_macroblocks_t *)&this->macroblocks; + xvmc->macroblocks = &this->macroblocks.xine_mc; this->macroblocks.num_blocks = 0; this->macroblocks.macroblockptr = this->macroblocks.macroblockbaseptr; this->macroblocks.xine_mc.blockptr = |
From: Petri H. <phi...@us...> - 2012-01-18 08:02:08
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1326873672 -7200 # Node ID ae415bbf69eb58513e04dad87e1fb7c4a13848e6 # Branch default # Parent d348a1a9202930f13859137058c6db8435098ae6 # Parent 6ec3fb143fdd64534e312c7b2792208502d78d75 Merge from 1.1 diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -75,11 +75,15 @@ * Report more video output capabilities via (port)->get_capabilities(): colour controls, zooming, colour keying. -xine-lib (1.1.21) 2011-??-?? +xine-lib (1.1.21) ????-??-?? * mpeg-ts fixes and enhancements * Improved syncing of DVB subtitles * BluRay support (requires libbluray) +xine-lib (1.1.20.2) ????-??-?? + * Various bug fixes. + * Fix matroska header compression. + xine-lib (1.1.20.1) 2012-01-01 * Various bug fixes. * Use the current ImageMagick API (if using ImageMagick). --git a/debian/changelog b/debian/changelog --- a/debian/changelog +++ b/debian/changelog @@ -5,11 +5,11 @@ -- Darren Salt <li...@yo...> Thu, 29 Jul 2010 18:57:56 +0100 -xine-lib (1.1.19+hg-0) unstable; urgency=low +xine-lib (1.1.21~hg-0) unstable; urgency=low * Hg snapshot (dev build). Changelog is irrelevant :-) - -- Darren Salt <li...@yo...> Tue, 27 Jul 2010 17:55:16 +0100 + -- Darren Salt <li...@yo...> Tue, 17 Jan 2012 19:06:22 +0000 xine-lib (1.1.5~cvs-0) unstable; urgency=low --git a/src/audio_out/audio_file_out.c b/src/audio_out/audio_file_out.c --- a/src/audio_out/audio_file_out.c +++ b/src/audio_out/audio_file_out.c @@ -274,10 +274,20 @@ this->fname, this->bytes_written / 1024); if (lseek(this->fd, 40, SEEK_SET) != -1) { - write(this->fd, &len, 4); + if (write(this->fd, &len, 4) != 4) { + xprintf (this->xine, XINE_VERBOSITY_LOG, "audio_file_out: Failed to write header to file '%s': %s\n", + this->fname, strerror(errno)); + } + len = le2me_32(this->bytes_written + 0x24); - if (lseek(this->fd, 4, SEEK_SET) != -1) - write(this->fd, &len, 4); + if (lseek(this->fd, 4, SEEK_SET) != -1) { + if (write(this->fd, &len, 4) != 4) { + xprintf (this->xine, XINE_VERBOSITY_LOG, + "audio_file_out: Failed to write header to file '%s': %s\n", + this->fname, strerror(errno)); + } + } + } close(this->fd); --git a/src/audio_out/audio_jack_out.c b/src/audio_out/audio_jack_out.c --- a/src/audio_out/audio_jack_out.c +++ b/src/audio_out/audio_jack_out.c @@ -278,12 +278,13 @@ return 0; } - +#if 0 static void jack_shutdown (void *arg) { jack_driver_t *this = (jack_driver_t *) arg; this->client = NULL; } +#endif /* * Open the Jack audio device @@ -295,7 +296,6 @@ { jack_driver_t *this = (jack_driver_t *) this_gen; const char **matching_ports = NULL; - char *port_name = NULL; jack_client_t *client = this->client; int port_flags = JackPortIsInput; @@ -686,7 +686,6 @@ uint32_t rate; char *jack_device; const char **matching_ports = NULL; - const char **port_names; /* for usability reasons, keep this in sync with audio_oss_out.c */ static char *speaker_arrangement[] = { --git a/src/audio_out/audio_pulse_out.c b/src/audio_out/audio_pulse_out.c --- a/src/audio_out/audio_pulse_out.c +++ b/src/audio_out/audio_pulse_out.c @@ -360,7 +360,6 @@ pulse_driver_t *this = (pulse_driver_t *) this_gen; pa_sample_spec ss; pa_channel_map cm; - int r; xprintf (this->xine, XINE_VERBOSITY_DEBUG, "audio_pulse_out: ao_open bits=%d rate=%d, mode=%d\n", bits, rate, mode); @@ -466,7 +465,7 @@ pa_stream_set_write_callback(this->stream, __xine_pa_stream_request_callback, this); pa_stream_set_latency_update_callback(this->stream, __xine_pa_stream_notify_callback, this); - r = pa_stream_connect_playback(this->stream, this->sink, NULL, + pa_stream_connect_playback(this->stream, this->sink, NULL, PA_STREAM_INTERPOLATE_TIMING|PA_STREAM_AUTO_TIMING_UPDATE, NULL, NULL); --git a/src/combined/xine_ogg_demuxer.c b/src/combined/xine_ogg_demuxer.c --- a/src/combined/xine_ogg_demuxer.c +++ b/src/combined/xine_ogg_demuxer.c @@ -940,21 +940,27 @@ xine_bmiheader bih; int channel; +#ifdef LOG int16_t locbits_per_sample; + int32_t locsize, locdefault_len, locbuffersize; + int64_t locsamples_per_unit; +#endif uint32_t locsubtype; - int32_t locsize, locdefault_len, locbuffersize, locwidth, locheight; - int64_t loctime_unit, locsamples_per_unit; + int32_t locwidth, locheight; + int64_t loctime_unit; /* read fourcc with machine endianness */ locsubtype = *((uint32_t *)&op->packet[9]); /* everything else little endian */ + loctime_unit = _X_LE_64(&op->packet[17]); +#ifdef LOG locsize = _X_LE_32(&op->packet[13]); - loctime_unit = _X_LE_64(&op->packet[17]); locsamples_per_unit = _X_LE_64(&op->packet[25]); locdefault_len = _X_LE_32(&op->packet[33]); locbuffersize = _X_LE_32(&op->packet[37]); locbits_per_sample = _X_LE_16(&op->packet[41]); +#endif locwidth = _X_LE_32(&op->packet[45]); locheight = _X_LE_32(&op->packet[49]); @@ -1026,18 +1032,25 @@ char str[5]; int channel; - int16_t locbits_per_sample, locchannels, locblockalign; - int32_t locsize, locdefault_len, locbuffersize, locavgbytespersec; - int64_t loctime_unit, locsamples_per_unit; +#ifdef LOG + int16_t locblockalign; + int32_t locsize, locdefault_len, locbuffersize; + int64_t loctime_unit; +#endif + int16_t locbits_per_sample, locchannels; + int32_t locavgbytespersec; + int64_t locsamples_per_unit; +#ifdef LOG locsize = _X_LE_32(&op->packet[13]); loctime_unit = _X_LE_64(&op->packet[17]); + locbuffersize = _X_LE_32(&op->packet[37]); + locdefault_len = _X_LE_32(&op->packet[33]); + locblockalign = _X_LE_16(&op->packet[47]); +#endif locsamples_per_unit = _X_LE_64(&op->packet[25]); - locdefault_len = _X_LE_32(&op->packet[33]); - locbuffersize = _X_LE_32(&op->packet[37]); locbits_per_sample = _X_LE_16(&op->packet[41]); locchannels = _X_LE_16(&op->packet[45]); - locblockalign = _X_LE_16(&op->packet[47]); locavgbytespersec= _X_LE_32(&op->packet[49]); lprintf ("direct show filter created audio stream detected, hexdump:\n"); --git a/src/demuxers/asfheader.c b/src/demuxers/asfheader.c --- a/src/demuxers/asfheader.c +++ b/src/demuxers/asfheader.c @@ -354,7 +354,7 @@ static int asf_header_parse_stream_extended_properties(asf_header_t *header, uint8_t *buffer, int buffer_len) { asf_reader_t reader; uint32_t flags = 0; - uint16_t stream_number; + uint16_t stream_number = 0; int i; int stream_id; asf_stream_extension_t *asf_stream_extension; @@ -527,7 +527,7 @@ for (i = 0; i < records_count; i++) { - uint16_t index, stream, name_len = 0, data_type; + uint16_t index, stream = 0, name_len = 0, data_type; uint32_t data_len = 0; int stream_id; --git a/src/demuxers/demux_asf.c b/src/demuxers/demux_asf.c --- a/src/demuxers/demux_asf.c +++ b/src/demuxers/demux_asf.c @@ -512,13 +512,13 @@ * XX bytes : optional palette */ uint32_t width, height; - uint16_t bmiheader_size; + /*uint16_t bmiheader_size;*/ xine_bmiheader *bmiheader; width = _X_LE_32(asf_stream->private_data); height = _X_LE_32(asf_stream->private_data + 4); /* there is one unknown byte between height and the bmiheader size */ - bmiheader_size = _X_LE_16(asf_stream->private_data + 9); + /*bmiheader_size = _X_LE_16(asf_stream->private_data + 9);*/ /* FIXME: bmiheader_size must be >= sizeof(xine_bmiheader) */ @@ -994,8 +994,10 @@ /* return 0 if ok */ static int asf_parse_packet_payload_header(demux_asf_t *this, uint32_t p_hdr_size) { +#ifdef LOG int64_t timestamp; int64_t duration; +#endif this->packet_len_flags = get_byte(this); p_hdr_size += 1; this->packet_prop_flags = get_byte(this); p_hdr_size += 1; @@ -1034,8 +1036,10 @@ this->packet_padsize = 0; } +#ifdef LOG timestamp = get_le32(this); p_hdr_size += 4; duration = get_le16(this); p_hdr_size += 2; +#endif lprintf ("timestamp=%"PRId64", duration=%"PRId64"\n", timestamp, duration); @@ -1577,11 +1581,11 @@ ENTRYREF, MOREINFO, PARAM, REPEAT, TITLE */ - const char *base_href = NULL; + /*const char *base_href = NULL;*/ for (asx_entry = xml_tree->child; asx_entry; asx_entry = asx_entry->next) { - const char *ref_base_href = base_href; + /*const char *ref_base_href = base_href;*/ if (!strcasecmp (asx_entry->name, "ENTRY")) { @@ -1637,9 +1641,11 @@ duration = asx_get_time_value (asx_ref); } +#if 0 else if (!strcasecmp (asx_ref->name, "BASE")) /* Attributes: HREF */ - ref_base_href = xml_parser_get_property (asx_entry, "HREF"); + ref_base_href = xml_parser_get_property (asx_entry, "HREF"); +#endif } /* FIXME: prepend ref_base_href to href */ @@ -1657,9 +1663,11 @@ _x_demux_send_mrl_reference (this->stream, 0, href, NULL, 0, -1); } +#if 0 else if (!strcasecmp (asx_entry->name, "BASE")) /* Attributes: HREF */ base_href = xml_parser_get_property (asx_entry, "HREF"); +#endif } } else --git a/src/demuxers/demux_avi.c b/src/demuxers/demux_avi.c --- a/src/demuxers/demux_avi.c +++ b/src/demuxers/demux_avi.c @@ -732,8 +732,6 @@ int lasttag = 0; int vids_strh_seen = 0; int vids_strf_seen = 0; - int auds_strh_seen = 0; - int auds_strf_seen = 0; int num_stream = 0; uint8_t data[256]; int strf_size; @@ -898,7 +896,6 @@ a->dwSampleSize = _X_LE_32(hdrl_data + i + 44); a->audio_tot = 0; - auds_strh_seen = 1; lprintf("audio stream header, num_stream=%d\n", num_stream); lasttag = 2; /* auds */ @@ -985,7 +982,6 @@ AVI->audio[AVI->n_audio-1]->wavex = wavex; AVI->audio[AVI->n_audio-1]->wavex_len = n; lprintf("audio stream format\n"); - auds_strf_seen = 1; } } else if(strncasecmp(hdrl_data + i, "indx",4) == 0) { @@ -1712,7 +1708,7 @@ int64_t audio_pts, video_pts; off_t current_pos; int left; - int header, chunk_len, audio_stream; + int header, chunk_len = 0, audio_stream; avi_audio_t *audio; current_pos = this->input->get_current_pos(this->input); --git a/src/demuxers/demux_iff.c b/src/demuxers/demux_iff.c --- a/src/demuxers/demux_iff.c +++ b/src/demuxers/demux_iff.c @@ -689,7 +689,6 @@ int64_t zw_pts; int64_t zw_rescale; int j, k; - int first_buf; int interleave_index; int size; @@ -791,7 +790,6 @@ interleave_index = (current_file_pos * this->audio_compression_factor); } - first_buf = 1; zw_pts = current_file_pos; --git a/src/demuxers/demux_matroska.c b/src/demuxers/demux_matroska.c --- a/src/demuxers/demux_matroska.c +++ b/src/demuxers/demux_matroska.c @@ -1847,7 +1847,7 @@ uint64_t track_num; uint8_t *data; uint8_t flags; - int gap, lacing, num_len; + int lacing, num_len; int16_t timecode_diff; int64_t pts, xduration; int decoder_flags = 0; @@ -1867,7 +1867,7 @@ lprintf("track_num: %" PRIu64 ", timecode_diff: %d, flags: 0x%x\n", track_num, timecode_diff, flags); - gap = flags & 1; + /*gap = flags & 1;*/ lacing = (flags >> 1) & 0x3; /*fprintf(stderr, "lacing: %x\n", lacing);*/ @@ -2050,6 +2050,13 @@ } /* send each frame to the decoder */ for (i = 0; i <= lace_num; i++) { + + if (headers_len) { + data -= headers_len; + xine_fast_memcpy(data, track->compress_settings, headers_len); + frame[i] += headers_len; + } + if (track->handle_content != NULL) { track->handle_content((demux_plugin_t *)this, track, decoder_flags, @@ -2071,7 +2078,6 @@ static int parse_simpleblock(demux_matroska_t *this, size_t block_len, uint64_t cluster_timecode, uint64_t block_duration) { - int has_block = 0; off_t block_pos = 0; off_t file_len = 0; int normpos = 0; @@ -2086,7 +2092,6 @@ if (!read_block_data(this, block_len, this->compress_maxlen)) return 0; - has_block = 1; /* we have the duration, we can parse the block now */ if (!parse_block(this, block_len, cluster_timecode, block_duration, normpos, is_key)) --git a/src/demuxers/demux_mpeg_block.c b/src/demuxers/demux_mpeg_block.c --- a/src/demuxers/demux_mpeg_block.c +++ b/src/demuxers/demux_mpeg_block.c @@ -874,6 +874,7 @@ } else if ((p[0]&0xf0) == 0xa0) { int pcm_offset; +#if 0 int number_of_frame_headers; int first_access_unit_pointer; int audio_frame_number; @@ -881,6 +882,7 @@ int sample_rate; int num_channels; int dynamic_range; +#endif /* * found in http://members.freemail.absa.co.za/ginggs/dvd/mpeg2_lpcm.txt @@ -888,6 +890,7 @@ */ track = p[0] & 0x0F; +#if 0 number_of_frame_headers = p[1]; /* unknown = p[2]; */ first_access_unit_pointer = p[3]; @@ -912,6 +915,7 @@ case 2: bits_per_sample = 24; break; } dynamic_range = p[6]; +#endif /* send lpcm config byte */ buf->decoder_flags |= BUF_FLAG_SPECIAL; --git a/src/demuxers/demux_mpeg_pes.c b/src/demuxers/demux_mpeg_pes.c --- a/src/demuxers/demux_mpeg_pes.c +++ b/src/demuxers/demux_mpeg_pes.c @@ -980,6 +980,7 @@ } else if ((p[0]&0xf0) == 0xa0) { int pcm_offset; +#if 0 int number_of_frame_headers; int first_access_unit_pointer; int audio_frame_number; @@ -987,13 +988,14 @@ int sample_rate; int num_channels; int dynamic_range; - +#endif /* * found in http://members.freemail.absa.co.za/ginggs/dvd/mpeg2_lpcm.txt * appears to be correct. */ track = p[0] & 0x0F; +#if 0 number_of_frame_headers = p[1]; /* unknown = p[2]; */ first_access_unit_pointer = p[3]; @@ -1024,6 +1026,7 @@ case 2: bits_per_sample = 24; break; } dynamic_range = p[6]; +#endif /* send lpcm config byte */ buf->decoder_flags |= BUF_FLAG_SPECIAL; --git a/src/demuxers/demux_real.c b/src/demuxers/demux_real.c --- a/src/demuxers/demux_real.c +++ b/src/demuxers/demux_real.c @@ -1251,7 +1251,7 @@ buf->size = 0; buf->type = this->video_stream->buf_type; - xine_fast_memcpy(buf->decoder_info_ptr[2], this->fragment_tab, + xine_fast_memcpy(buf->content, this->fragment_tab, this->fragment_count*8); this->video_fifo->put(this->video_fifo, buf); --git a/src/demuxers/demux_wc3movie.c b/src/demuxers/demux_wc3movie.c --- a/src/demuxers/demux_wc3movie.c +++ b/src/demuxers/demux_wc3movie.c @@ -141,7 +141,6 @@ demux_mve_t *this = (demux_mve_t *) this_gen; buf_element_t *buf = NULL; - int64_t text_pts = 0; int64_t audio_pts = 0; unsigned char preamble[PREAMBLE_SIZE]; unsigned int chunk_tag; @@ -264,7 +263,7 @@ } this->video_pts += WC3_PTS_INC; } else if (chunk_tag == TEXT_TAG) { - text_pts = this->video_pts - WC3_PTS_INC; + /*text_pts = this->video_pts - WC3_PTS_INC;*/ /* unhandled thus far */ this->input->seek(this->input, chunk_size, SEEK_CUR); |
From: Petri H. <phi...@us...> - 2012-02-14 20:31:38
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1329251188 -7200 # Node ID 32d275faee7f09ec8a304c110a2b71413a8d9839 # Branch default # Parent 3054b3f342eb1056c496ffca086a8cafa8c45bb1 # Parent 68fcd69fb3b6cd13e3fa389f97a3ff1ee16e95ed Merge from 1.1 diff --git a/include/xine/xineutils.h b/include/xine/xineutils.h --- a/include/xine/xineutils.h +++ b/include/xine/xineutils.h @@ -254,18 +254,20 @@ unsigned char *v_dst, int v_dst_pitch, int width, int height) XINE_PROTECTED; -#define SCALEFACTOR 65536 +/* convert full range rgb to mpeg range yuv */ +#define SCALESHIFT 16 +#define SCALEFACTOR (1<<SCALESHIFT) #define CENTERSAMPLE 128 #define COMPUTE_Y(r, g, b) \ (unsigned char) \ - ((y_r_table[r] + y_g_table[g] + y_b_table[b]) / SCALEFACTOR) + (((y_r_table[r] + y_g_table[g] + y_b_table[b]) >> SCALESHIFT) + 16) #define COMPUTE_U(r, g, b) \ (unsigned char) \ - ((u_r_table[r] + u_g_table[g] + u_b_table[b]) / SCALEFACTOR + CENTERSAMPLE) + (((u_r_table[r] + u_g_table[g] + u_b_table[b]) >> SCALESHIFT) + CENTERSAMPLE) #define COMPUTE_V(r, g, b) \ (unsigned char) \ - ((v_r_table[r] + v_g_table[g] + v_b_table[b]) / SCALEFACTOR + CENTERSAMPLE) + (((v_r_table[r] + v_g_table[g] + v_b_table[b]) >> SCALESHIFT) + CENTERSAMPLE) #define UNPACK_BGR15(packed_pixel, r, g, b) \ b = (packed_pixel & 0x7C00) >> 7; \ --git a/src/demuxers/demux_asf.c b/src/demuxers/demux_asf.c --- a/src/demuxers/demux_asf.c +++ b/src/demuxers/demux_asf.c @@ -1039,6 +1039,10 @@ #ifdef LOG timestamp = get_le32(this); p_hdr_size += 4; duration = get_le16(this); p_hdr_size += 2; +#else + /* skip the above bytes */ + this->input->seek (this->input, 6, SEEK_CUR); + p_hdr_size += 6; #endif lprintf ("timestamp=%"PRId64", duration=%"PRId64"\n", timestamp, duration); --git a/src/video_out/video_out_vidix.c b/src/video_out/video_out_vidix.c --- a/src/video_out/video_out_vidix.c +++ b/src/video_out/video_out_vidix.c @@ -697,6 +697,8 @@ vidix_driver_t *this = (vidix_driver_t *) this_gen; + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) return 0; + switch (property) { case VO_PROP_WINDOW_WIDTH: this->props[property].value = this->sc.gui_width; @@ -731,6 +733,8 @@ vidix_driver_t *this = (vidix_driver_t *) this_gen; int err; + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) return 0; + if ((value >= this->props[property].min) && (value <= this->props[property].max)) { @@ -853,6 +857,10 @@ vidix_driver_t *this = (vidix_driver_t *) this_gen; + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) { + *min = *max = 0; + return; + } *min = this->props[property].min; *max = this->props[property].max; } --git a/src/video_out/video_out_xcbxv.c b/src/video_out/video_out_xcbxv.c --- a/src/video_out/video_out_xcbxv.c +++ b/src/video_out/video_out_xcbxv.c @@ -640,6 +640,8 @@ static int xv_get_property (vo_driver_t *this_gen, int property) { xv_driver_t *this = (xv_driver_t *) this_gen; + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) return (0); + switch (property) { case VO_PROP_WINDOW_WIDTH: this->props[property].value = this->sc.gui_width; @@ -680,6 +682,8 @@ int property, int value) { xv_driver_t *this = (xv_driver_t *) this_gen; + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) return 0; + if (this->props[property].atom != XCB_NONE) { xcb_xv_get_port_attribute_cookie_t get_attribute_cookie; xcb_xv_get_port_attribute_reply_t *get_attribute_reply; @@ -757,6 +761,11 @@ int property, int *min, int *max) { xv_driver_t *this = (xv_driver_t *) this_gen; + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) { + *min = *max = 0; + return; + } + *min = this->props[property].min; *max = this->props[property].max; } --git a/src/video_out/video_out_xv.c b/src/video_out/video_out_xv.c --- a/src/video_out/video_out_xv.c +++ b/src/video_out/video_out_xv.c @@ -741,6 +741,8 @@ static int xv_get_property (vo_driver_t *this_gen, int property) { xv_driver_t *this = (xv_driver_t *) this_gen; + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) return (0); + switch (property) { case VO_PROP_WINDOW_WIDTH: this->props[property].value = this->sc.gui_width; @@ -784,6 +786,8 @@ printf("xv_set_property: property=%d, value=%d\n", property, value ); + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) return 0; + if (this->props[property].atom != None) { /* value is out of bound */ @@ -857,6 +861,11 @@ int property, int *min, int *max) { xv_driver_t *this = (xv_driver_t *) this_gen; + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) { + *min = *max = 0; + return; + } + *min = this->props[property].min; *max = this->props[property].max; } --git a/src/video_out/video_out_xvmc.c b/src/video_out/video_out_xvmc.c --- a/src/video_out/video_out_xvmc.c +++ b/src/video_out/video_out_xvmc.c @@ -991,6 +991,8 @@ lprintf ("xvmc_get_property\n"); + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) return 0; + switch (property) { case VO_PROP_WINDOW_WIDTH: this->props[property].value = this->sc.gui_width; @@ -1033,6 +1035,8 @@ lprintf ("xvmc_set_property %d value %d\n",property,value); + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) return 0; + if (this->props[property].atom != None) { /* value is out of bound */ if((value < this->props[property].min) || (value > this->props[property].max)) @@ -1101,6 +1105,10 @@ lprintf ("xvmc_get_property_min_max\n"); + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) { + *min = *max = 0; + return; + } *min = this->props[property].min; *max = this->props[property].max; } --git a/src/video_out/video_out_xxmc.c b/src/video_out/video_out_xxmc.c --- a/src/video_out/video_out_xxmc.c +++ b/src/video_out/video_out_xxmc.c @@ -1794,6 +1794,8 @@ static int xxmc_get_property (vo_driver_t *this_gen, int property) { xxmc_driver_t *this = (xxmc_driver_t *) this_gen; + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) return 0; + switch (property) { case VO_PROP_WINDOW_WIDTH: this->props[property].value = this->sc.gui_width; @@ -1844,6 +1846,8 @@ int property, int value) { xxmc_driver_t *this = (xxmc_driver_t *) this_gen; + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) return 0; + if (this->props[property].atom != None) { /* value is out of bound */ @@ -1932,6 +1936,10 @@ int property, int *min, int *max) { xxmc_driver_t *this = (xxmc_driver_t *) this_gen; + if ((property < 0) || (property >= VO_NUM_PROPERTIES)) { + *min = *max = 0; + return; + } *min = this->props[property].min; *max = this->props[property].max; } --git a/src/xine-utils/color.c b/src/xine-utils/color.c --- a/src/xine-utils/color.c +++ b/src/xine-utils/color.c @@ -77,7 +77,8 @@ * next 9 defines. */ -#if 1 +/* convert full range rgb to mpeg range yuv */ +#if 0 #define Y_R (SCALEFACTOR * 0.29900) #define Y_G (SCALEFACTOR * 0.58700) |
From: Petri H. <phi...@us...> - 2012-02-29 10:54:45
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1330497312 -7200 # Node ID 748c5603d2df9ec5f869060bf0c127df4630af33 # Branch default # Parent c97dc1db8536f1768c7f867386557ce27e7c4e75 # Parent 8d175aa45dfeb68b77afc5909243bc76372e8e11 Merge from 1.1 diff --git a/.hgsigs b/.hgsigs --- a/.hgsigs +++ b/.hgsigs @@ -7,3 +7,17 @@ 92dad3eca733ff0daecd6b1a539f8b077ea071cb 0 iD8DBQBH76CDsBKtjPGfWZ8RAnQUAJ9ARudZye68h9JIKe10wIsWm6OQEwCgvjS+c6o48SjNrb5l7i8KisKG89o= 01846b148cbaa03141bae2e51f8d9df00a2843fb 0 iD8DBQBPSolysBKtjPGfWZ8RAiaNAJ9HesT0fwB/hnWaAazzq6iOrTCgXgCeMi3H6GK5r4YS/IouiYH5xkHZnm8= ac2c5ea4bc52322c176c2e601a36c298091bfc9b 0 iD8DBQBPSol0sBKtjPGfWZ8RArZrAJ0fqN/RgB9wvEk+somc0BofQKebQwCdH4+p8lL1TJaKtMUScjv+6ebL4Uo= +66e1654718fb0581846d60c60bc09ae3b6b8c0cf 0 iD8DBQBPSokCsBKtjPGfWZ8RAui7AJ93/zYpvKkhElXFvKX87WpUurnKjgCgqqG0jfu+wM+W6Szbej8dqrHHBg8= +492f87e6963a8d244df32c40d66a6349aabc4420 0 iD8DBQBPSokDsBKtjPGfWZ8RAum7AJ0Y2EINkKQTOsPS3laM3JcHvL1amACeKqOHXFYUqSs1sCkmh37EZopamZ8= +9b383441a18fb49ccd5a07465d3e3db8821cccf6 0 iD8DBQBPSokHsBKtjPGfWZ8RAkKWAKDKyR7c+5YPWwlIy5jWFsxoixJgmgCeIpOF0XtFrINayt+5wbZzpLjPjBg= +17f8ed16524ba779af42913e51667e89b83a1887 0 iD8DBQBPSokKsBKtjPGfWZ8RAoxrAJ92W12gY7sEKmBioJdHlhzzqT22kgCff18dpvJe6wGmrJ/dWkvVXGSGND4= +e33280bcaa3b1f3f5b93e633e2225e2440ecfd7c 0 iD8DBQBPSokOsBKtjPGfWZ8RAnqcAJ9jpRe6TdwSxAd4k7yGJZ7wdQxaeQCbBWRXPktHpCvI6NVJzLT5wyQGy1E= +01fac0a015581bbdf7e38561ad2a95405e2ca785 0 iD8DBQBPSokTsBKtjPGfWZ8RAoFgAJ46ZbU0P4b/lisAT9qmqTlEltyvOgCfRXPijH+Abkv39uLBp5cCMim32Qw= +ff19463729d8f9bbea35171d641c5f28cdacc7c8 0 iD8DBQBPSokYsBKtjPGfWZ8RApjgAJ9jmF77qtz59imnoykAfmikS14CYQCfR6k0jnOwlkRUI81Qs3IcT+mVvlc= +fc1aecbb9d80a32d9c802a5208dfdc012f1ba9d5 0 iD8DBQBPSokcsBKtjPGfWZ8RAt6eAJ4tVxCPebIPX5R3eF9ILYiiReK/gACfewPvct6SE7cKJY8m2h4TLMqDYNk= +ff764395a361257b11d73583a0e0851e0f5f2ee5 0 iD8DBQBPSokgsBKtjPGfWZ8RAnu9AKCkqinT0Cc+nPv8xP6bUqCjKJo8twCgrSnQcI3h4p6zWsPj8CmgX3dvD7s= +86395fcaded38aca33facf7c8263d23622eea2bd 0 iD8DBQBPSokksBKtjPGfWZ8RAt97AKCxQ68V5CsS5voWI7lMe0Bj79fjAwCdFL4YfnG+MqWhxn18TZwlie+tedk= +8b7c25bfb056ee9b907877b462c132e61112e440 0 iD8DBQBPSoknsBKtjPGfWZ8RAtv6AKDCjeuqRVPZm+OXTxvQ0wZO5Q4BlQCePEG8YxCdjiPSSHp1cXhr4Sge8JA= +acba7a8c29cca74b112c2c6db4310ddeb1524696 0 iD8DBQBPSokrsBKtjPGfWZ8RAmajAKCe/oPgSKAgVOIQM87EwL7PnTZWawCeKdel2XVFACwoePOerYTWGh1ymjA= +342128b2fcf59bfe8844b282a228581aa8bbbbde 0 iD8DBQBPSokwsBKtjPGfWZ8RAmo0AKDHz2T3y4gD3kVfIyilXltO/F7dVwCgxGCtufhxSoMA10HTIpUvqLI3INg= +dde68fe11b973767f0b743ced2b41a244e1e0b78 0 iD8DBQBPSokzsBKtjPGfWZ8RAlZZAJ9wLB2jL+oQBohbv45Dp2nvVyRrMgCcCtg4omZNCMxbLHXt8p015OU+vj8= --git a/src/xine-engine/metronom.c b/src/xine-engine/metronom.c --- a/src/xine-engine/metronom.c +++ b/src/xine-engine/metronom.c @@ -745,23 +745,41 @@ static int64_t metronom_get_option (metronom_t *this, int option) { - if (this->master) - return this->master->get_option(this->master, option); + int64_t result; + + pthread_mutex_lock (&this->lock); + + if (this->master) { + result = this->master->get_option(this->master, option); + pthread_mutex_unlock (&this->lock); + return result; + } switch (option) { case METRONOM_AV_OFFSET: - return this->av_offset; + result = this->av_offset; + break; case METRONOM_SPU_OFFSET: - return this->spu_offset; + result = this->spu_offset; + break; case METRONOM_FRAME_DURATION: - return this->img_duration; + result = this->img_duration; + break; case METRONOM_VPTS_OFFSET: - return this->vpts_offset; + result = this->vpts_offset; + break; case METRONOM_PREBUFFER: - return this->prebuffer; + result = this->prebuffer; + break; + default: + result = 0; + xprintf(this->xine, XINE_VERBOSITY_NONE, "unknown option in get_option: %d\n", option); + break; } - xprintf(this->xine, XINE_VERBOSITY_NONE, "unknown option in get_option: %d\n", option); - return 0; + + pthread_mutex_unlock (&this->lock); + + return result; } static int64_t metronom_clock_get_option (metronom_clock_t *this, int option) { |
From: Petri H. <phi...@us...> - 2012-04-26 11:19:47
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1335439139 -10800 # Node ID f833c831544e3126e86206b5f8322c99df646b15 # Branch default # Parent 6fc56571c45a09d42829624a0d6339f3ad0f6168 # Parent cb3aa2dcc6e62e51f40cfa3472d3b351f9a16118 Merge from 1.1 diff --git a/src/demuxers/demux_qt.c b/src/demuxers/demux_qt.c --- a/src/demuxers/demux_qt.c +++ b/src/demuxers/demux_qt.c @@ -83,6 +83,7 @@ #define STSC_ATOM QT_ATOM('s', 't', 's', 'c') #define STCO_ATOM QT_ATOM('s', 't', 'c', 'o') #define STTS_ATOM QT_ATOM('s', 't', 't', 's') +#define CTTS_ATOM QT_ATOM('c', 't', 't', 's') #define STSS_ATOM QT_ATOM('s', 't', 's', 's') #define CO64_ATOM QT_ATOM('c', 'o', '6', '4') @@ -169,6 +170,11 @@ typedef struct { int64_t offset; unsigned int size; + /* pts actually is dts for reordered video. Edit list and frame + duration code relies on that, so keep the offset separately + until sending to video fifo. + Value is small enough for plain int. */ + int ptsoffs; int64_t pts; int keyframe; unsigned int media_id; @@ -305,6 +311,10 @@ unsigned int time_to_sample_count; time_to_sample_table_t *time_to_sample_table; + /* pts to dts timeoffset to sample table */ + unsigned int timeoffs_to_sample_count; + time_to_sample_table_t *timeoffs_to_sample_table; + } qt_trak; typedef struct { @@ -650,6 +660,7 @@ free(info->traks[i].sync_sample_table); free(info->traks[i].sample_to_chunk_table); free(info->traks[i].time_to_sample_table); + free(info->traks[i].timeoffs_to_sample_table); free(info->traks[i].decoder_config); for (j = 0; j < info->traks[i].stsd_atoms_count; j++) { if (info->traks[i].type == MEDIA_AUDIO) { @@ -911,6 +922,8 @@ trak->sample_to_chunk_table = NULL; trak->time_to_sample_count = 0; trak->time_to_sample_table = NULL; + trak->timeoffs_to_sample_count = 0; + trak->timeoffs_to_sample_table = NULL; trak->frames = NULL; trak->frame_count = 0; trak->current_frame = 0; @@ -1626,6 +1639,47 @@ trak->time_to_sample_table[j].duration); } trak->time_to_sample_table[j].count = 0; /* terminate with zero */ + + } else if (current_atom == CTTS_ATOM) { + + /* TJ. this has the same format as stts. If present, duration here + means (pts - dts), while the corresponding stts defines dts. */ + + /* there should only be one of these atoms */ + if (trak->timeoffs_to_sample_table + || current_atom_size < 12 || current_atom_size >= UINT_MAX) { + last_error = QT_HEADER_TROUBLE; + goto free_trak; + } + + trak->timeoffs_to_sample_count = _X_BE_32(&trak_atom[i + 8]); + + debug_atom_load(" qt ctts atom (timeoffset-to-sample atom): %d entries\n", + trak->timeoffs_to_sample_count); + + if (trak->timeoffs_to_sample_count > (current_atom_size - 12) / 8) { + last_error = QT_HEADER_TROUBLE; + goto free_trak; + } + + trak->timeoffs_to_sample_table = (time_to_sample_table_t *)calloc( + trak->timeoffs_to_sample_count+1, sizeof(time_to_sample_table_t)); + if (!trak->timeoffs_to_sample_table) { + last_error = QT_NO_MEMORY; + goto free_trak; + } + + /* load the pts to dts time offset to sample table */ + for (j = 0; j < trak->timeoffs_to_sample_count; j++) { + trak->timeoffs_to_sample_table[j].count = + _X_BE_32(&trak_atom[i + 12 + j * 8 + 0]); + trak->timeoffs_to_sample_table[j].duration = + _X_BE_32(&trak_atom[i + 12 + j * 8 + 4]); + debug_atom_load(" %d: count = %d, duration = %d\n", + j, trak->timeoffs_to_sample_table[j].count, + trak->timeoffs_to_sample_table[j].duration); + } + trak->timeoffs_to_sample_table[j].count = 0; /* terminate with zero */ } } @@ -1641,6 +1695,7 @@ free(trak->sync_sample_table); free(trak->sample_to_chunk_table); free(trak->time_to_sample_table); + free(trak->timeoffs_to_sample_table); free(trak->decoder_config); if (trak->stsd_atoms) { for (i = 0; i < trak->stsd_atoms_count; i++) @@ -1793,6 +1848,8 @@ int64_t current_pts; unsigned int pts_index; unsigned int pts_index_countdown; + unsigned int ptsoffs_index; + unsigned int ptsoffs_index_countdown; unsigned int audio_frame_counter = 0; unsigned int edit_list_media_time; int64_t edit_list_duration; @@ -1827,6 +1884,10 @@ pts_index = 0; pts_index_countdown = trak->time_to_sample_table[pts_index].count; + /* used by reordered video */ + ptsoffs_index = 0; + ptsoffs_index_countdown = trak->timeoffs_to_sample_count ? + trak->timeoffs_to_sample_table[ptsoffs_index].count : 0; media_id_counts = xine_xcalloc(trak->stsd_atoms_count, sizeof(int)); if (!media_id_counts) @@ -1897,6 +1958,23 @@ trak->time_to_sample_table[pts_index].count; } + /* offset pts for reordered video */ + if (ptsoffs_index < trak->timeoffs_to_sample_count) { + /* TJ. this is 32 bit signed. All casts necessary for my gcc 4.5.0 */ + int i = trak->timeoffs_to_sample_table[ptsoffs_index].duration; + if ((sizeof (int) > 4) && (i & 0x80000000)) + i |= ~0xffffffffL; + trak->frames[frame_counter].ptsoffs = (int)90000 * i / (int)trak->timescale; + ptsoffs_index_countdown--; + /* time to refresh countdown? */ + if (!ptsoffs_index_countdown) { + ptsoffs_index++; + ptsoffs_index_countdown = + trak->timeoffs_to_sample_table[ptsoffs_index].count; + } + } else + trak->frames[frame_counter].ptsoffs = 0; + samples_per_chunk--; frame_counter++; } @@ -1991,6 +2069,7 @@ trak->frames[j].pts = audio_frame_counter; trak->frames[j].pts *= 90000; trak->frames[j].pts /= trak->timescale; + trak->frames[j].ptsoffs = 0; /* fetch the alleged chunk size according to the QT header */ trak->frames[j].size = @@ -2532,7 +2611,7 @@ buf->extra_info->input_normpos = (int)( (double) (video_trak->frames[i].offset - this->data_start) * 65535 / this->data_size); buf->extra_info->input_time = video_trak->frames[i].pts / 90; - buf->pts = video_trak->frames[i].pts; + buf->pts = video_trak->frames[i].pts + (int64_t)video_trak->frames[i].ptsoffs; buf->decoder_flags |= BUF_FLAG_FRAMERATE; buf->decoder_info[0] = frame_duration; |
From: Petri H. <phi...@us...> - 2012-05-28 06:51:01
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1338187819 -10800 # Node ID ae4002e1371aef05959a21093f65bfb7ed890c24 # Branch default # Parent 47c40808a2fd21810b13fac8f601bf53768c46ef # Parent ea8791b2fa66c1f02d9dda81c22fa33d200e2d05 Merge from 1.1 diff --git a/src/combined/ffmpeg/ff_video_decoder.c b/src/combined/ffmpeg/ff_video_decoder.c --- a/src/combined/ffmpeg/ff_video_decoder.c +++ b/src/combined/ffmpeg/ff_video_decoder.c @@ -262,7 +262,7 @@ /* take over pts for this frame to have it reordered */ av_frame->reordered_opaque = context->reordered_opaque; - xine_list_push_back(this->dr1_frames, av_frame); + xine_list_push_back(this->dr1_frames, img); return 0; } @@ -279,10 +279,11 @@ xine_list_iterator_t it; - it = xine_list_find(this->dr1_frames, av_frame); + it = xine_list_find(this->dr1_frames, av_frame->opaque); assert(it); - if( it != NULL ) + if( it != NULL ) { xine_list_remove(this->dr1_frames, it); + } } else { avcodec_default_release_buffer(context, av_frame); } @@ -1712,7 +1713,6 @@ if(this->context && this->decoder_ok) { xine_list_iterator_t it; - AVFrame *av_frame; avcodec_flush_buffers(this->context); @@ -1720,8 +1720,9 @@ * don't release their DR1 frames */ while( (it = xine_list_front(this->dr1_frames)) != NULL ) { - av_frame = (AVFrame *)xine_list_get_value(this->dr1_frames, it); - release_buffer(this->context, av_frame); + vo_frame_t *img = (vo_frame_t *)xine_list_get_value(this->dr1_frames, it); + if (img) + img->free(img); } xine_list_clear(this->dr1_frames); } @@ -1782,7 +1783,6 @@ if (this->decoder_ok) { xine_list_iterator_t it; - AVFrame *av_frame; pthread_mutex_lock(&ffmpeg_lock); avcodec_close (this->context); @@ -1792,8 +1792,9 @@ * don't release their DR1 frames */ while( (it = xine_list_front(this->dr1_frames)) != NULL ) { - av_frame = (AVFrame *)xine_list_get_value(this->dr1_frames, it); - release_buffer(this->context, av_frame); + vo_frame_t *img = (vo_frame_t *)xine_list_get_value(this->dr1_frames, it); + if (img) + img->free(img); } this->stream->video_out->close(this->stream->video_out, this->stream); |
From: Petri H. <phi...@us...> - 2012-05-28 08:26:11
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1338193501 -10800 # Node ID e440a3d3aa631aca9113de3ef2e6c8f9d0954b6c # Branch default # Parent ae4002e1371aef05959a21093f65bfb7ed890c24 # Parent 4bff115eed88f8df96acb406679b100ffe8927a4 Merge from 1.1 diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -86,6 +86,10 @@ * mpeg-ts fixes and enhancements * Improved syncing of DVB subtitles * BluRay support (requires libbluray) + * Fix full range YUV (with ffmpeg codecs) + * Fix multithreading with recent ffmpeg versions + * Fix cropping with ffmpeg codecs + * Fix OSD when using OpenGL video output xine-lib (1.1.20.2) ????-??-?? * Various bug fixes. --git a/src/combined/ffmpeg/ff_video_decoder.c b/src/combined/ffmpeg/ff_video_decoder.c --- a/src/combined/ffmpeg/ff_video_decoder.c +++ b/src/combined/ffmpeg/ff_video_decoder.c @@ -854,7 +854,7 @@ p = sv, q = dv; for (x = img->width / 2; x > 0; x--) *q++ = ctab[*p++]; } else { - p = su, q = sv; + p = su, q = du; for (x = img->width / 2; x > 0; x--) {*q++ = ctab[*p]; p += 2;} p = sv, q = dv; for (x = img->width / 2; x > 0; x--) {*q++ = ctab[*p]; p += 2;} |
From: Petri H. <phi...@us...> - 2012-05-29 07:37:41
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1338276826 -10800 # Node ID 8f97e05758cdd5bf3e994c41804b909ae5d6c271 # Branch default # Parent f3ef59ed574565702bf1f97f1eb6f279132da673 # Parent a69edd41d354fbced578bc5a3075e2c4591bc1ec Merge from 1.1 diff --git a/include/xine/attributes.h b/include/xine/attributes.h --- a/include/xine/attributes.h +++ b/include/xine/attributes.h @@ -26,12 +26,6 @@ #ifndef ATTRIBUTE_H_ #define ATTRIBUTE_H_ -#ifdef ATTRIBUTE_ALIGNED_MAX -#define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((ATTRIBUTE_ALIGNED_MAX < align) ? ATTRIBUTE_ALIGNED_MAX : align))) -#else -#define ATTR_ALIGN(align) -#endif - #ifdef XINE_COMPILE # include "configure.h" #else @@ -57,6 +51,13 @@ # endif #endif + +#ifdef ATTRIBUTE_ALIGNED_MAX +#define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((ATTRIBUTE_ALIGNED_MAX < align) ? ATTRIBUTE_ALIGNED_MAX : align))) +#else +#define ATTR_ALIGN(align) +#endif + /* Export protected only for libxine functions */ #if defined(XINE_LIBRARY_COMPILE) && defined(SUPPORT_ATTRIBUTE_VISIBILITY_PROTECTED) # define XINE_PROTECTED __attribute__((__visibility__("protected"))) |
From: Petri H. <phi...@us...> - 2012-05-29 08:59:10
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1338272443 -10800 # Node ID 7b2071ab892c41b2f31616dd5f136cc6ea8aa33f # Branch default # Parent d6c9b7bf3b5ff70efb93631221e5189e885a6d65 # Parent fb8114348d48b8559eb114db72569f22f62412af Merge from 1.1 diff --git a/src/input/libdvdnav/Makefile.am b/src/input/libdvdnav/Makefile.am --- a/src/input/libdvdnav/Makefile.am +++ b/src/input/libdvdnav/Makefile.am @@ -24,7 +24,7 @@ nav_read.c \ dvd_reader.c \ dvd_input.c \ - dvd_udf.c + dvd_udf.c libdvdnav_la_LIBADD = $(PTHREAD_LIBS) noinst_HEADERS = \ |
From: Petri H. <phi...@us...> - 2012-05-30 07:21:14
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1338362446 -10800 # Node ID 6bcd171cf5aba3ccf048c8b9993c9f04cb051f55 # Branch default # Parent 8f97e05758cdd5bf3e994c41804b909ae5d6c271 # Parent a611988a4401171a1a04500edc43aff82181668e Merge from 1.1 diff --git a/src/combined/ffmpeg/ff_mpeg_parser.c b/src/combined/ffmpeg/ff_mpeg_parser.c --- a/src/combined/ffmpeg/ff_mpeg_parser.c +++ b/src/combined/ffmpeg/ff_mpeg_parser.c @@ -134,7 +134,7 @@ } } - is_frame_done = parser->in_slice && ((!next_code) || (next_code == 0xb7)); + is_frame_done = parser->in_slice && ((!next_code) || (next_code >= 0xb0)); if (is_frame_done) parser->in_slice = 0; |
From: Petri H. <phi...@us...> - 2012-06-05 09:52:05
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1338889646 -10800 # Node ID c48a632b26c92b1573f18710940573cc2bcb47ac # Branch default # Parent 6bcd171cf5aba3ccf048c8b9993c9f04cb051f55 # Parent e93a5b1bc341985d8956013f98dcd7fe564b3f2e Merge from 1.1 diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -543,7 +543,6 @@ AC_CHECK_LIB(iberty, strncomp, [GOOM_LIBS="-liberty"]) AC_SUBST(GOOM_LIBS) fi - LDFLAGS="-no-undefined $LDFLAGS" ;; *) @@ -728,9 +727,6 @@ CC_CHECK_CFLAGS([-fno-inline-functions], [W32_NO_OPTIMIZE="$W32_NO_OPTIMIZE -fno-inline-functions"]) CC_CHECK_CFLAGS([-fno-rename-registers], [W32_NO_OPTIMIZE="$W32_NO_OPTIMIZE -fno-rename-registers"]) AC_SUBST(W32_NO_OPTIMIZE) - case "$host_or_hostalias" in - *-*-cygwin*) LIBS="$LIBS @INTLLIBS@ -lkernel32" ;; - esac ;; esac --git a/m4/attributes.m4 b/m4/attributes.m4 --- a/m4/attributes.m4 +++ b/m4/attributes.m4 @@ -114,7 +114,7 @@ dnl use it only for libraries in mingw32-w64 *-freebsd* | *-openbsd*) ;; - *-mingw*) + *-mingw* | *-cygwin*) LDFLAGS_NOUNDEFINED="-no-undefined" ;; *) --git a/m4/pthreads.m4 b/m4/pthreads.m4 --- a/m4/pthreads.m4 +++ b/m4/pthreads.m4 @@ -19,6 +19,7 @@ if test "${PTHREAD_CFLAGS-unset}" = "unset"; then case $host in *-mingw*) PTHREAD_CFLAGS="" ;; + *-cygwin*) PTHREAD_CFLAGS="" ;; *-hpux11*) PTHREAD_CFLAGS="" ;; *-darwin*) PTHREAD_CFLAGS="" ;; *-solaris*|*-linux-gnu) @@ -31,6 +32,7 @@ if test "${PTHREAD_LIBS-unset}" = "unset"; then case $host in *-mingw*) PTHREAD_LIBS="-lpthreadGC2" ;; + *-cygwin*) PTHREAD_LIBS="-lpthread" ;; *-hpux11*) PTHREAD_LIBS="-lpthread" ;; *-darwin*) PTHREAD_LIBS="" ;; *-solaris*) --git a/src/combined/ffmpeg/ff_video_decoder.c b/src/combined/ffmpeg/ff_video_decoder.c --- a/src/combined/ffmpeg/ff_video_decoder.c +++ b/src/combined/ffmpeg/ff_video_decoder.c @@ -143,12 +143,20 @@ static void ff_check_colorspace (ff_video_decoder_t *this) { int i, cm; +#ifdef AVCODEC_HAS_COLORSPACE cm = this->context->colorspace << 1; +#else + cm = 0; +#endif + /* ffmpeg bug: color_range not set by svq3 decoder */ i = this->context->pix_fmt; - if (cm && ((i == PIX_FMT_YUVJ420P) || (i == PIX_FMT_YUVJ444P) || - (this->context->color_range == AVCOL_RANGE_JPEG))) + if (cm && ((i == PIX_FMT_YUVJ420P) || (i == PIX_FMT_YUVJ444P))) cm |= 1; +#ifdef AVCODEC_HAS_COLORSPACE + if (this->context->color_range == AVCOL_RANGE_JPEG) + cm |= 1; +#endif /* report changes of colorspyce and/or color range */ if (cm != this->color_matrix) { @@ -460,9 +468,10 @@ break; } +#ifdef AVCODEC_HAS_REORDERED_OPAQUE /* dont want initial AV_NOPTS_VALUE here */ this->context->reordered_opaque = 0; - +#endif } static void choose_speed_over_accuracy_cb(void *user_data, xine_cfg_entry_t *entry) { --git a/src/combined/ffmpeg/ffmpeg_compat.h b/src/combined/ffmpeg/ffmpeg_compat.h --- a/src/combined/ffmpeg/ffmpeg_compat.h +++ b/src/combined/ffmpeg/ffmpeg_compat.h @@ -24,10 +24,14 @@ #define XINE_AVCODEC_COMPAT_H #ifndef LIBAVCODEC_VERSION_MAJOR -# error ffmpeg headers must be included first ! +# ifdef LIBAVCODEC_VERSION_INT +# define LIBAVCODEC_VERSION_MAJOR ((LIBAVCODEC_VERSION_INT)>>16) +# define LIBAVCODEC_VERSION_MINOR (((LIBAVCODEC_VERSION_INT)>>8) & 0xff) +# else +# error ffmpeg headers must be included first ! +# endif #endif - #if LIBAVCODEC_VERSION_MAJOR > 51 # define bits_per_sample bits_per_coded_sample #endif @@ -44,6 +48,11 @@ # undef AVCODEC_HAS_REORDERED_OPAQUE #endif +/* colorspace and color_range were added before 52.29.0 */ +#if LIBAVCODEC_VERSION_MAJOR > 52 || (LIBAVCODEC_VERSION_MAJOR == 52 && LIBAVCODEC_VERSION_MINOR >= 29) +# define AVCODEC_HAS_COLORSPACE +#endif + /**/ #if LIBAVCODEC_VERSION_MAJOR > 53 || (LIBAVCODEC_VERSION_MAJOR == 53 && LIBAVCODEC_VERSION_MINOR >= 8) # define avcodec_init() do {} while(0) --git a/src/xine-engine/Makefile.am b/src/xine-engine/Makefile.am --- a/src/xine-engine/Makefile.am +++ b/src/xine-engine/Makefile.am @@ -15,7 +15,7 @@ if WIN32 DEF_FILE = libxine-$(XINE_MAJOR).def -def_ldflags=-Wl,--output-def,$(DEF_FILE) $(LDFLAGS_NOUNDEFINED) +def_ldflags=-Wl,--output-def,$(DEF_FILE) else DEF_FILE = endif @@ -45,7 +45,7 @@ $(LIBXINEPOSIX) $(RT_LIBS) $(NET_LIBS) $(XDG_BASEDIR_LIBS) \ $(AVUTIL_LIBS) -libxine_la_LDFLAGS = $(AM_LDFLAGS) $(def_ldflags) $(GCSECTIONS) \ +libxine_la_LDFLAGS = $(LDFLAGS_NOUNDEFINED) $(AM_LDFLAGS) $(def_ldflags) $(GCSECTIONS) \ -weak libxine-interface.la \ -version-info $(XINE_LT_CURRENT):$(XINE_LT_REVISION):$(XINE_LT_AGE) --git a/src/xine-utils/utils.c b/src/xine-utils/utils.c --- a/src/xine-utils/utils.c +++ b/src/xine-utils/utils.c @@ -41,6 +41,7 @@ #include <time.h> #include <unistd.h> #include <fcntl.h> +#include <ctype.h> #include <sys/socket.h> #if HAVE_EXECINFO_H @@ -55,8 +56,7 @@ #include <langinfo.h> #endif -#if defined(__CYGWIN__) || defined(WIN32) -#include <ctype.h> +#if defined(WIN32) #include <windows.h> #endif |
From: Petri H. <phi...@us...> - 2012-06-06 09:50:10
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1338976164 -10800 # Node ID a393982277711df2ebd66b9b66f0ad3b7753405e # Branch default # Parent c48a632b26c92b1573f18710940573cc2bcb47ac # Parent 52cd6b04707be620172de04fe8a117d099b3d1d5 Merge from 1.1 diff --git a/src/xine-engine/Makefile.am b/src/xine-engine/Makefile.am --- a/src/xine-engine/Makefile.am +++ b/src/xine-engine/Makefile.am @@ -69,8 +69,9 @@ if WIN32 install-exec-local: - cp -p $(DEF_FILE) $(DESTDIR)$(libdir) + -cp -p $(DEF_FILE) $(DESTDIR)$(libdir) endif uninstall-local: - rm -f $(DEF_FILE) "$(DESTDIR)$(libdir)"/libxine-interface.la + rm -f "$(DESTDIR)$(libdir)"/libxine-interface.la + -rm -f $(DESTDIR)$(libdir)/$(DEF_FILE) |
From: Petri H. <phi...@us...> - 2012-06-08 06:54:50
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1339137666 -10800 # Node ID 67178c9e4ea99e5669a494096d5bc267dbb01368 # Branch default # Parent a393982277711df2ebd66b9b66f0ad3b7753405e # Parent d4cec195eac3b963a24e321204e622f1bfca41ae Merge from 1.1 diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -261,7 +261,7 @@ } streamType; -#define WRAP_THRESHOLD 270000 +#define WRAP_THRESHOLD 360000 #define PTS_AUDIO 0 #define PTS_VIDEO 1 |
From: Petri H. <phi...@us...> - 2012-06-08 08:18:44
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1339142693 -10800 # Node ID bdafef29aa2ffe178f7d2586182eaa415205a132 # Branch default # Parent 5ea1f935cb40964a1eb9befd27cb6299e2c7f12e # Parent 146e325cb3bfc960f9b7b677695563da6cfe30b5 Merge from 1.1 diff --git a/src/xine-engine/audio_decoder.c b/src/xine-engine/audio_decoder.c --- a/src/xine-engine/audio_decoder.c +++ b/src/xine-engine/audio_decoder.c @@ -467,7 +467,7 @@ int _x_audio_decoder_init (xine_stream_t *stream) { pthread_attr_t pth_attrs; -#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING +#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING > 0) struct sched_param pth_params; #endif int err; @@ -507,7 +507,7 @@ */ pthread_attr_init(&pth_attrs); -#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING +#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING > 0) pthread_attr_getschedparam(&pth_attrs, &pth_params); pth_params.sched_priority = sched_get_priority_min(SCHED_OTHER); pthread_attr_setschedparam(&pth_attrs, &pth_params); --git a/src/xine-engine/audio_out.c b/src/xine-engine/audio_out.c --- a/src/xine-engine/audio_out.c +++ b/src/xine-engine/audio_out.c @@ -2307,7 +2307,7 @@ this->audio_loop_running = 1; pthread_attr_init(&pth_attrs); -#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING +#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING > 0) pthread_attr_setscope(&pth_attrs, PTHREAD_SCOPE_SYSTEM); #endif --git a/src/xine-engine/video_decoder.c b/src/xine-engine/video_decoder.c --- a/src/xine-engine/video_decoder.c +++ b/src/xine-engine/video_decoder.c @@ -519,7 +519,7 @@ } else { pthread_attr_t pth_attrs; -#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING +#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING > 0) struct sched_param pth_params; #endif int err, num_buffers; @@ -550,7 +550,7 @@ stream->spu_track_map_entries = 0; pthread_attr_init(&pth_attrs); -#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING +#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING > 0) pthread_attr_getschedparam(&pth_attrs, &pth_params); pth_params.sched_priority = sched_get_priority_min(SCHED_OTHER); pthread_attr_setschedparam(&pth_attrs, &pth_params); --git a/src/xine-engine/video_out.c b/src/xine-engine/video_out.c --- a/src/xine-engine/video_out.c +++ b/src/xine-engine/video_out.c @@ -2337,7 +2337,7 @@ this->grab_only = 0; pthread_attr_init(&pth_attrs); -#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING +#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING > 0) pthread_attr_setscope(&pth_attrs, PTHREAD_SCOPE_SYSTEM); #endif |
From: Petri H. <phi...@us...> - 2012-06-08 08:55:58
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1339144924 -10800 # Node ID 5116be93922adc4712439dabe76458e54e3f13d5 # Branch default # Parent bdafef29aa2ffe178f7d2586182eaa415205a132 # Parent e9b8b0ab8e4524e7de41b3a91b58e382d87294fd Merge from 1.1 diff --git a/src/demuxers/demux_mng.c b/src/demuxers/demux_mng.c --- a/src/demuxers/demux_mng.c +++ b/src/demuxers/demux_mng.c @@ -226,6 +226,9 @@ /* send start buffers */ _x_demux_control_start(this->stream); + /* required when loop playing short streams (gapless switch) */ + _x_demux_control_newpts(this->stream, 0, 0); + /* send init info to decoder */ this->bih.biBitCount = 24; buf = this->video_fifo->buffer_pool_alloc(this->video_fifo); |
From: Petri H. <phi...@us...> - 2012-06-12 07:17:14
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1339485399 -10800 # Node ID 2e285ce4af9f9c9ddaeffc2d4e6b849f80421f78 # Branch default # Parent b0df4b6003ad2b7454059c2d82ef7f8f29e48e9e # Parent 7ba8ab5c2128ad3884cbfc1b453f4c33f1c3f3cb Merge from 1.1 diff --git a/.hgsigs b/.hgsigs --- a/.hgsigs +++ b/.hgsigs @@ -22,3 +22,4 @@ 342128b2fcf59bfe8844b282a228581aa8bbbbde 0 iD8DBQBPSokwsBKtjPGfWZ8RAmo0AKDHz2T3y4gD3kVfIyilXltO/F7dVwCgxGCtufhxSoMA10HTIpUvqLI3INg= dde68fe11b973767f0b743ced2b41a244e1e0b78 0 iD8DBQBPSokzsBKtjPGfWZ8RAlZZAJ9wLB2jL+oQBohbv45Dp2nvVyRrMgCcCtg4omZNCMxbLHXt8p015OU+vj8= c3293ab97f3242d2e16548e0a3ce2d72cdfeb6e6 0 iD8DBQBP046tsBKtjPGfWZ8RAlklAKCCzTzxEEQyxzWPFUS5YEyWUtkKkACgxeYIqB4HgTfHr4sYq5F/MwFzPpY= +948bb6010a3e36f1f555fd6215e3db638e8c0b30 0 iD8DBQBP046nsBKtjPGfWZ8RAjcmAKCz5W1Voa6avUbB8N5GGqVrZbZP1ACgtsqN2yfBwgHE+KGc74nA8U3CSvU= --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -161,6 +161,7 @@ acba7a8c29cca74b112c2c6db4310ddeb1524696 1.1.19 342128b2fcf59bfe8844b282a228581aa8bbbbde 1.1.20 dde68fe11b973767f0b743ced2b41a244e1e0b78 1.1.20.1 +948bb6010a3e36f1f555fd6215e3db638e8c0b30 1.1.21 01846b148cbaa03141bae2e51f8d9df00a2843fb 1.2.0 ac2c5ea4bc52322c176c2e601a36c298091bfc9b 1.2.1 c3293ab97f3242d2e16548e0a3ce2d72cdfeb6e6 1.2.2 --git a/src/video_dec/yuv.c b/src/video_dec/yuv.c --- a/src/video_dec/yuv.c +++ b/src/video_dec/yuv.c @@ -97,8 +97,8 @@ (this->stream->video_out->open) (this->stream->video_out, this->stream); bih = (xine_bmiheader *) buf->content; - this->width = (bih->biWidth + 3) & ~0x03; - this->height = (bih->biHeight + 3) & ~0x03; + this->width = bih->biWidth; + this->height = bih->biHeight; if (buf->decoder_flags & BUF_FLAG_ASPECT) this->ratio = (double)buf->decoder_info[1] / (double)buf->decoder_info[2]; @@ -121,14 +121,19 @@ switch (buf->type) { case BUF_VIDEO_YUY2: + this->width = (this->width + 1) & ~1; _x_meta_info_set_utf8(this->stream, XINE_META_INFO_VIDEOCODEC, "Raw YUY2"); break; case BUF_VIDEO_YV12: + this->width = (this->width + 1) & ~1; + this->height = (this->height + 1) & ~1; _x_meta_info_set_utf8(this->stream, XINE_META_INFO_VIDEOCODEC, "Raw YV12"); break; case BUF_VIDEO_YVU9: + this->width = (this->width + 3) & ~3; + this->height = (this->height + 3) & ~3; _x_meta_info_set_utf8(this->stream, XINE_META_INFO_VIDEOCODEC, "Raw YVU9"); break; @@ -137,6 +142,8 @@ break; case BUF_VIDEO_I420: + this->width = (this->width + 1) & ~1; + this->height = (this->height + 1) & ~1; _x_meta_info_set_utf8(this->stream, XINE_META_INFO_VIDEOCODEC, "Raw I420"); break; |
From: Petri H. <phi...@us...> - 2012-06-15 09:15:38
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1339751497 -10800 # Node ID 9ccd7c15752e919b002a4010cf1b7037ba3b2f9f # Branch default # Parent aed3ec9fe168af40021e197498330bb9ab540ca4 # Parent dfe7cef908b75beac6cc8febaa634be3143f2343 Merge from 1.1 diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,9 @@ * Add fast libjpeg based JPEG decoder * Add max. Xv image size detection to Xv video output plugin +xine-lib (1.1.22) ????-??-?? + * Fix segfault when trying to display large images with Xv output plugins + xine-lib (1.2.2) 2012-06-09 * Fix musepack decoder compilation if libmpcdec headers aren't available. * Configure tests for xinerama & VideoCD support now soft-fail properly. --git a/src/video_dec/gdkpixbuf.c b/src/video_dec/gdkpixbuf.c --- a/src/video_dec/gdkpixbuf.c +++ b/src/video_dec/gdkpixbuf.c @@ -133,8 +133,24 @@ lprintf("image loaded successfully\n"); /* + * alloc video frame + */ + img = this->stream->video_out->get_frame (this->stream->video_out, width, height, + (double)width / (double)height, + XINE_IMGFMT_YUY2, + VO_BOTH_FIELDS); + + /* crop if allocated frame is smaller than requested */ + if (width > img->width) + width = img->width; + if (height > img->height) + height = img->height; + img->ratio = (double)width / (double)height; + + /* * rgb data -> yuv_planes */ + width &= ~1; /* must be even for init_yuv_planes */ init_yuv_planes(&yuv_planes, width, height); n_channels = gdk_pixbuf_get_n_channels (pixbuf); @@ -155,12 +171,8 @@ gdk_pixbuf_unref (pixbuf); /* - * alloc and draw video frame + * draw video frame */ - img = this->stream->video_out->get_frame (this->stream->video_out, width, - height, (double)width/(double)height, - XINE_IMGFMT_YUY2, - VO_BOTH_FIELDS); img->pts = buf->pts; img->duration = 3600; img->bad_frame = 0; --git a/src/video_dec/image.c b/src/video_dec/image.c --- a/src/video_dec/image.c +++ b/src/video_dec/image.c @@ -102,7 +102,7 @@ this->index += buf->size; if (buf->decoder_flags & BUF_FLAG_FRAME_END) { - int width, height, i; + int width, height, i, x, y, img_stride; int status; MagickWand *wand; uint8_t *img_buf, *img_buf_ptr; @@ -133,9 +133,10 @@ return; } - width = MagickGetImageWidth(wand) & ~1; /* must be even for init_yuv_planes */ + width = MagickGetImageWidth(wand); height = MagickGetImageHeight(wand); img_buf = malloc(width * height * 3); + img_stride = 3 * width; #if MAGICK_VERSION < 0x671 MagickGetImagePixels(wand, 0, 0, width, height, "RGB", CharPixel, img_buf); DestroyMagickWand(wand); @@ -152,12 +153,29 @@ lprintf("image loaded successfully\n"); /* + * alloc video frame and set cropping + */ + img = this->stream->video_out->get_frame (this->stream->video_out, width, height, + (double)width / (double)height, + XINE_IMGFMT_YUY2, + VO_BOTH_FIELDS); + + if (width > img->width) + width = img->width; + if (height > img->height) + height = img->height; + img->ratio = (double)width / (double)height; + + /* * rgb data -> yuv_planes */ + width &= ~1; /* must be even for init_yuv_planes */ init_yuv_planes(&yuv_planes, width, height); img_buf_ptr = img_buf; - for (i=0; i < width*height; i++) { + i = 0; + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { uint8_t r = *(img_buf_ptr++); uint8_t g = *(img_buf_ptr++); uint8_t b = *(img_buf_ptr++); @@ -165,16 +183,15 @@ yuv_planes.y[i] = COMPUTE_Y(r, g, b); yuv_planes.u[i] = COMPUTE_U(r, g, b); yuv_planes.v[i] = COMPUTE_V(r, g, b); + i++; + } + img_buf_ptr += img_stride - 3 * width; } free(img_buf); /* - * alloc and draw video frame + * draw video frame */ - img = this->stream->video_out->get_frame (this->stream->video_out, width, - height, (double)width/(double)height, - XINE_IMGFMT_YUY2, - VO_BOTH_FIELDS); img->pts = buf->pts; img->duration = 3600; img->bad_frame = 0; --git a/src/video_out/video_out_xcbxv.c b/src/video_out/video_out_xcbxv.c --- a/src/video_out/video_out_xcbxv.c +++ b/src/video_out/video_out_xcbxv.c @@ -99,6 +99,7 @@ unsigned int xv_pitches[3]; unsigned int xv_offsets[3]; + int req_width, req_height; } xv_frame_t; @@ -360,8 +361,8 @@ width = (width + 7) & ~0x7; } - if ((frame->width != width) - || (frame->height != height) + if ((frame->req_width != width) + || (frame->req_height != height) || (frame->format != format)) { /* printf (LOG_MODULE ": updating frame to %d x %d (ratio=%d, format=%08x)\n",width,height,ratio_code,format); */ @@ -390,13 +391,21 @@ frame->vo_frame.base[2] = frame->image + frame->xv_offsets[1]; } - frame->width = width; - frame->height = height; + /* allocated frame size may not match requested size */ + frame->req_width = width; + frame->req_height = height; + frame->width = frame->xv_width; + frame->height = frame->xv_height; frame->format = format; pthread_mutex_unlock(&this->main_mutex); } + if (frame->vo_frame.width > frame->width) + frame->vo_frame.width = frame->width; + if (frame->vo_frame.height > frame->height) + frame->vo_frame.height = frame->height; + frame->ratio = ratio; } --git a/src/video_out/video_out_xv.c b/src/video_out/video_out_xv.c --- a/src/video_out/video_out_xv.c +++ b/src/video_out/video_out_xv.c @@ -102,6 +102,7 @@ XvImage *image; XShmSegmentInfo shminfo; + int req_width, req_height; } xv_frame_t; @@ -443,8 +444,8 @@ width = (width + 7) & ~0x7; } - if ((frame->width != width) - || (frame->height != height) + if ((frame->req_width != width) + || (frame->req_height != height) || (frame->format != format)) { /* printf (LOG_MODULE ": updating frame to %d x %d (ratio=%d, format=%08x)\n",width,height,ratio_code,format); */ @@ -475,13 +476,21 @@ frame->vo_frame.base[2] = frame->image->data + frame->image->offsets[1]; } - frame->width = width; - frame->height = height; + /* allocated frame size may not match requested size */ + frame->req_width = width; + frame->req_height = height; + frame->width = frame->image->width; + frame->height = frame->image->height; frame->format = format; UNLOCK_DISPLAY(this); } + if (frame->vo_frame.width > frame->width) + frame->vo_frame.width = frame->width; + if (frame->vo_frame.height > frame->height) + frame->vo_frame.height = frame->height; + frame->ratio = ratio; } |
From: Petri H. <phi...@us...> - 2012-08-16 11:05:44
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1345115091 -10800 # Node ID 1153adddbe153f88968bcd0cd7a65937fbe766e7 # Branch default # Parent cfb648a8715fee66aa2004c69bdb580b0fd0cac5 # Parent 6d0c16b8b933611e2fb940be5c8b046397672922 Merge from 1.1 diff --git a/src/audio_out/audio_coreaudio_out.c b/src/audio_out/audio_coreaudio_out.c --- a/src/audio_out/audio_coreaudio_out.c +++ b/src/audio_out/audio_coreaudio_out.c @@ -51,6 +51,7 @@ #include <AudioUnit/AudioUnitProperties.h> #include <AudioUnit/AudioUnitParameters.h> #include <AudioUnit/AudioOutputUnit.h> +#include <CoreServices/CoreServices.h> #define AO_OUT_COREAUDIO_IFACE_VERSION 9 |
From: Petri H. <phi...@us...> - 2012-08-17 06:06:39
|
# HG changeset patch # User Petri Hintukainen <phi...@us...> # Date 1345183575 -10800 # Node ID 5111963c9f1748d0a067677ec71372e63d00c4bd # Branch default # Parent e772b03e1267a9cd6ed91c9ea244af3bc4171970 # Parent 5432c5ffac2f2eeb3c99b60ac5de3cfcc709bd67 Merge from 1.1 diff --git a/src/video_out/yuv2rgb.h b/src/video_out/yuv2rgb.h --- a/src/video_out/yuv2rgb.h +++ b/src/video_out/yuv2rgb.h @@ -1,6 +1,6 @@ #ifndef HAVE_YUV2RGB_H -#define HAVE_YUV2RGB_h +#define HAVE_YUV2RGB_H #include "config.h" |