diff --git a/modules/access/dvb/en50221.c b/modules/access/dvb/en50221.c index b2d8991..fbf2147 100644 --- a/modules/access/dvb/en50221.c +++ b/modules/access/dvb/en50221.c @@ -151,7 +151,7 @@ static uint8_t *SetLength( uint8_t *p_data, int i_length ) * Transport layer */ -#define MAX_TPDU_SIZE 2048 +#define MAX_TPDU_SIZE 4096 #define MAX_TPDU_DATA (MAX_TPDU_SIZE - 4) #define DATA_INDICATOR 0x80 diff --git a/modules/access/v4l2.c b/modules/access/v4l2.c index 4b1c67c..113162d 100644 --- a/modules/access/v4l2.c +++ b/modules/access/v4l2.c @@ -204,7 +204,11 @@ static void AccessClose( vlc_object_t * ); "please use 'v4l2:/""/ :input-slave=alsa:/""/' or " \ "'v4l2:/""/ :input-slave=oss:/""/' instead." ) +#define ASPECT_TEXT N_("Picture aspect-ratio n:m") +#define ASPECT_LONGTEXT N_("Define input picture aspect-ratio to use. Default is 4:3" ) + typedef enum { + IO_METHOD_AUTO, IO_METHOD_READ, IO_METHOD_MMAP, IO_METHOD_USERPTR, @@ -216,9 +220,9 @@ static const char *const psz_standards_list_text[] = { N_("Default"), N_("SECAM"), N_("PAL"), N_("NTSC") }; static const int i_iomethod_list[] = - { IO_METHOD_READ, IO_METHOD_MMAP, IO_METHOD_USERPTR }; + { IO_METHOD_AUTO, IO_METHOD_READ, IO_METHOD_MMAP, IO_METHOD_USERPTR }; static const char *const psz_iomethod_list_text[] = - { N_("READ"), N_("MMAP"), N_("USERPTR") }; + { N_("AUTO"), N_("READ"), N_("MMAP"), N_("USERPTR") }; static const int i_tuner_audio_modes_list[] = { V4L2_TUNER_MODE_MONO, V4L2_TUNER_MODE_STEREO, @@ -251,13 +255,15 @@ vlc_module_begin () true ) add_integer( CFG_PREFIX "audio-input", 0, NULL, AUDIO_INPUT_TEXT, AUDIO_INPUT_LONGTEXT, true ) - add_integer( CFG_PREFIX "io", IO_METHOD_MMAP, NULL, IOMETHOD_TEXT, + add_integer( CFG_PREFIX "io", IO_METHOD_AUTO, NULL, IOMETHOD_TEXT, IOMETHOD_LONGTEXT, true ) change_integer_list( i_iomethod_list, psz_iomethod_list_text, NULL ) add_integer( CFG_PREFIX "width", -1, NULL, WIDTH_TEXT, WIDTH_LONGTEXT, true ) add_integer( CFG_PREFIX "height", -1, NULL, HEIGHT_TEXT, HEIGHT_LONGTEXT, true ) + add_string( CFG_PREFIX "aspect-ratio", "4:3", NULL, ASPECT_TEXT, + ASPECT_LONGTEXT, true ) add_float( CFG_PREFIX "fps", 0, NULL, FPS_TEXT, FPS_LONGTEXT, true ) add_integer( CFG_PREFIX "caching", DEFAULT_PTS_DELAY / 1000, NULL, CACHING_TEXT, CACHING_LONGTEXT, true ) @@ -363,6 +369,7 @@ static int AccessControl( access_t *, int, va_list ); static int Demux( demux_t * ); static block_t *AccessRead( access_t * ); +static ssize_t AccessReadStream( access_t * p_access, uint8_t * p_buffer, size_t i_len ); static block_t* GrabVideo( vlc_object_t *p_demux, demux_sys_t *p_sys ); static block_t* ProcessVideoFrame( vlc_object_t *p_demux, uint8_t *p_frame, size_t ); @@ -525,6 +532,7 @@ struct demux_sys_t int i_width; int i_height; + unsigned int i_aspect; float f_fps; /* <= 0.0 mean to grab at full rate */ mtime_t i_video_pts; /* only used when f_fps > 0 */ int i_fourcc; @@ -687,6 +695,19 @@ static void GetV4L2Params( demux_sys_t *p_sys, vlc_object_t *p_obj ) p_sys->psz_set_ctrls = var_CreateGetString( p_obj, "v4l2-set-ctrls" ); + char *psz_aspect = var_CreateGetString( p_obj, "v4l2-aspect-ratio" ); + if( psz_aspect && *psz_aspect && strchr( psz_aspect, ":" ) ) + { + char psz_delim = strchr( psz_aspect, ":" ); + p_sys->i_aspect = atoi( psz_aspect ) * VOUT_ASPECT_FACTOR / atoi( psz_delim + 1 ); + } + else + { + p_sys->i_aspect = 4 * VOUT_ASPECT_FACTOR / 3 ; + + } + free( psz_aspect ); + p_sys->psz_device = NULL; p_sys->i_fd = -1; @@ -793,6 +814,11 @@ static void ParseMRL( demux_sys_t *p_sys, char *psz_path, vlc_object_t *p_obj ) p_sys->io = IO_METHOD_USERPTR; psz_parser += strlen( "userptr" ); } + else if( !strncmp( psz_parser, "auto", strlen( "auto" ) ) ) + { + p_sys->io = IO_METHOD_AUTO; + psz_parser += strlen( "auto" ); + } else { p_sys->io = strtol( psz_parser, &psz_parser, 0 ); @@ -812,6 +838,17 @@ static void ParseMRL( demux_sys_t *p_sys, char *psz_path, vlc_object_t *p_obj ) strtol( psz_parser + strlen( "height=" ), &psz_parser, 0 ); } + else if( !strncmp( psz_parser, "aspect-ratio=", + strlen( "aspect-ratio=" ) ) ) + { + unsigned int num,den; + num = strtol( psz_parser + strlen( "aspect-ratio=" ), + &psz_parser, 0 ); + den = strtol( psz_parser + strlen( ":" ), + &psz_parser, 0 ); + if( num && den ) + p_sys->i_aspect = num * VOUT_ASPECT_FACTOR / den; + } else if( !strncmp( psz_parser, "controls-reset", strlen( "controls-reset" ) ) ) { @@ -990,6 +1027,9 @@ static void DemuxClose( vlc_object_t *p_this ) } break; + + default: + break; } } @@ -1017,6 +1057,9 @@ static void DemuxClose( vlc_object_t *p_this ) free( p_sys->p_buffers[i].start ); } break; + + default: + break; } free( p_sys->p_buffers ); } @@ -1056,7 +1099,6 @@ static int AccessOpen( vlc_object_t * p_this ) if( *p_access->psz_access == '\0' ) return VLC_EGENERIC; access_InitFields( p_access ); - ACCESS_SET_CALLBACKS( NULL, AccessRead, AccessControl, NULL ); p_sys = calloc( 1, sizeof( demux_sys_t )); if( !p_sys ) return VLC_ENOMEM; p_access->p_sys = (access_sys_t*)p_sys; @@ -1071,14 +1113,34 @@ static int AccessOpen( vlc_object_t * p_this ) msg_Dbg( p_this, "Trying direct kernel v4l2" ); use_kernel_v4l2( p_sys ); if( FindMainDevice( p_this, p_sys, false ) == VLC_SUCCESS) + { + if( p_sys->io == IO_METHOD_READ ) + { + ACCESS_SET_CALLBACKS( AccessReadStream, NULL, AccessControl, NULL ); + } + else + { + ACCESS_SET_CALLBACKS( NULL, AccessRead, AccessControl, NULL ); + } return VLC_SUCCESS; + } } msg_Dbg( p_this, "Trying libv4l2 wrapper" ); use_libv4l2( p_sys ); #endif if( FindMainDevice( p_this, p_sys, false ) == VLC_SUCCESS ) + { + if( p_sys->io == IO_METHOD_READ ) + { + ACCESS_SET_CALLBACKS( AccessReadStream, NULL, AccessControl, NULL ); + } + else + { + ACCESS_SET_CALLBACKS( NULL, AccessRead, AccessControl, NULL ); + } return VLC_SUCCESS; + } AccessClose( p_this ); return VLC_EGENERIC; @@ -1199,6 +1261,46 @@ static block_t *AccessRead( access_t * p_access ) return NULL; } +static ssize_t AccessReadStream( access_t * p_access, uint8_t * p_buffer, size_t i_len ) +{ + demux_sys_t *p_sys = (demux_sys_t *) p_access->p_sys; + struct pollfd ufd; + int i_ret; + + ufd.fd = p_sys->i_fd; + ufd.events = POLLIN; + + if( p_access->info.b_eof ) + return 0; + + do + { + if( !vlc_object_alive (p_access) ) + return 0; + + ufd.revents = 0; + } + while( ( i_ret = poll( &ufd, 1, 500 ) ) == 0 ); + + if( i_ret < 0 ) + { + msg_Err( p_access, "Polling error (%m)." ); + return -1; + } + + i_ret = v4l2_read( p_sys->i_fd, p_buffer, i_len ); + if( i_ret == 0 ) + { + p_access->info.b_eof = true; + } + else if( i_ret > 0 ) + { + p_access->info.i_pos += i_ret; + } + + return i_ret; +} + /***************************************************************************** * Demux: Processes the audio or video frame *****************************************************************************/ @@ -1357,6 +1459,8 @@ static block_t* GrabVideo( vlc_object_t *p_demux, demux_sys_t *p_sys ) break; + default: + break; } /* Timestamp */ @@ -1843,6 +1947,7 @@ static int OpenVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, bool b_demux ) msg_Err( p_obj, "device does not support read i/o" ); goto open_failed; } + msg_Dbg( p_obj, "using read i/o" ); break; case IO_METHOD_MMAP: @@ -1852,6 +1957,10 @@ static int OpenVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, bool b_demux ) msg_Err( p_obj, "device does not support streaming i/o" ); goto open_failed; } + if( p_sys->io == IO_METHOD_MMAP ) + msg_Dbg( p_obj, "using streaming i/o (mmap)" ); + else + msg_Dbg( p_obj, "using streaming i/o (userptr)" ); break; default: @@ -1866,16 +1975,19 @@ static int OpenVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, bool b_demux ) { crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; crop.c = cropcap.defrect; /* reset to default */ - if( v4l2_ioctl( i_fd, VIDIOC_S_CROP, &crop ) < 0 ) + if( crop.c.width > 0 && crop.c.height > 0 ) /* Fix for fm tuners */ { - switch( errno ) + if( v4l2_ioctl( i_fd, VIDIOC_S_CROP, &crop ) < 0 ) { - case EINVAL: - /* Cropping not supported. */ - break; - default: - /* Errors ignored. */ - break; + switch( errno ) + { + case EINVAL: + /* Cropping not supported. */ + break; + default: + /* Errors ignored. */ + break; + } } } } @@ -1911,8 +2023,8 @@ static int OpenVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, bool b_demux ) msg_Dbg( p_obj, "trying specified size %dx%d", p_sys->i_width, p_sys->i_height ); } - fmt.fmt.pix.width = p_sys->i_width; - fmt.fmt.pix.height = p_sys->i_height; + fmt.fmt.pix.width = __MAX(0, p_sys->i_width); + fmt.fmt.pix.height = __MAX(0, p_sys->i_height); fmt.fmt.pix.field = V4L2_FIELD_NONE; if (b_demux) @@ -2129,7 +2241,8 @@ static int OpenVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, bool b_demux ) switch( p_sys->io ) { case IO_METHOD_READ: - if( InitRead( p_obj, p_sys, fmt.fmt.pix.sizeimage ) != VLC_SUCCESS ) goto open_failed; + if( b_demux ) + if( InitRead( p_obj, p_sys, fmt.fmt.pix.sizeimage ) != VLC_SUCCESS ) goto open_failed; break; case IO_METHOD_MMAP: @@ -2140,15 +2253,20 @@ static int OpenVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, bool b_demux ) if( InitUserP( p_obj, p_sys, i_fd, fmt.fmt.pix.sizeimage ) != VLC_SUCCESS ) goto open_failed; break; + default: + goto open_failed; + break; } - /* Add */ - es_fmt.video.i_width = p_sys->i_width; - es_fmt.video.i_height = p_sys->i_height; - es_fmt.video.i_aspect = 4 * VOUT_ASPECT_FACTOR / 3; - if( b_demux ) { + /* Add */ + es_fmt.video.i_width = p_sys->i_width; + es_fmt.video.i_height = p_sys->i_height; + + /* Get aspect-ratio */ + es_fmt.video.i_aspect = p_sys->i_aspect; + demux_t *p_demux = (demux_t *) p_obj; msg_Dbg( p_demux, "added new video es %4.4s %dx%d", (char*)&es_fmt.i_codec, es_fmt.video.i_width, es_fmt.video.i_height ); @@ -2216,6 +2334,10 @@ static int OpenVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, bool b_demux ) } break; + + default: + goto open_failed; + break; } /* report fps */ @@ -2283,10 +2405,12 @@ static bool ProbeVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, msg_Dbg( p_obj, "the device has the capabilities: (%c) Video Capure, " "(%c) Audio, " - "(%c) Tuner", + "(%c) Tuner, " + "(%c) Radio", ( p_sys->dev_cap.capabilities & V4L2_CAP_VIDEO_CAPTURE ? 'X':' '), ( p_sys->dev_cap.capabilities & V4L2_CAP_AUDIO ? 'X':' '), - ( p_sys->dev_cap.capabilities & V4L2_CAP_TUNER ? 'X':' ') ); + ( p_sys->dev_cap.capabilities & V4L2_CAP_TUNER ? 'X':' '), + ( p_sys->dev_cap.capabilities & V4L2_CAP_RADIO ? 'X':' ') ); msg_Dbg( p_obj, "supported I/O methods are: (%c) Read/Write, " "(%c) Streaming, " @@ -2295,6 +2419,30 @@ static bool ProbeVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, ( p_sys->dev_cap.capabilities & V4L2_CAP_STREAMING ? 'X':' ' ), ( p_sys->dev_cap.capabilities & V4L2_CAP_ASYNCIO ? 'X':' ' ) ); + if( p_sys->io == IO_METHOD_AUTO ) + { + if( p_sys->dev_cap.capabilities & V4L2_CAP_STREAMING ) + p_sys->io = IO_METHOD_MMAP; + else if( p_sys->dev_cap.capabilities & V4L2_CAP_READWRITE ) + p_sys->io = IO_METHOD_READ; + else + msg_Err( p_obj, "No known I/O method supported" ); + } + + if( p_sys->dev_cap.capabilities & V4L2_CAP_RDS_CAPTURE ) + msg_Dbg( p_obj, "device supports RDS" ); + +#ifdef V4L2_CAP_HW_FREQ_SEEK + if( p_sys->dev_cap.capabilities & V4L2_CAP_HW_FREQ_SEEK ) + msg_Dbg( p_obj, "device supports hardware frequency seeking" ); +#endif + + if( p_sys->dev_cap.capabilities & V4L2_CAP_VBI_CAPTURE ) + msg_Dbg( p_obj, "device support raw VBI capture" ); + + if( p_sys->dev_cap.capabilities & V4L2_CAP_SLICED_VBI_CAPTURE ) + msg_Dbg( p_obj, "device support sliced VBI capture" ); + /* Now, enumerate all the video inputs. This is useless at the moment since we have no way to present that info to the user except with debug messages */ @@ -2303,12 +2451,14 @@ static bool ProbeVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, { struct v4l2_input t_input; memset( &t_input, 0, sizeof(t_input) ); + p_sys->i_input = 0; while( v4l2_ioctl( i_fd, VIDIOC_ENUMINPUT, &t_input ) >= 0 ) { p_sys->i_input++; t_input.index = p_sys->i_input; } + free( p_sys->p_inputs ); p_sys->p_inputs = calloc( 1, p_sys->i_input * sizeof( struct v4l2_input ) ); if( !p_sys->p_inputs ) goto open_failed; @@ -2344,6 +2494,7 @@ static bool ProbeVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, t_standards.index = p_sys->i_standard; } + free( p_sys->p_standards ); p_sys->p_standards = calloc( 1, p_sys->i_standard * sizeof( struct v4l2_standard ) ); if( !p_sys->p_standards ) goto open_failed; @@ -2409,6 +2560,7 @@ static bool ProbeVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, tuner.index = p_sys->i_tuner; } + free( p_sys->p_tuners ); p_sys->p_tuners = calloc( 1, p_sys->i_tuner * sizeof( struct v4l2_tuner ) ); if( !p_sys->p_tuners ) goto open_failed; @@ -2472,6 +2624,7 @@ static bool ProbeVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, p_sys->i_codec = i_index; + free( p_sys->p_codecs ); p_sys->p_codecs = calloc( 1, p_sys->i_codec * sizeof( struct v4l2_fmtdesc ) ); for( i_index = 0; i_index < p_sys->i_codec; i_index++ ) diff --git a/modules/codec/faad.c b/modules/codec/faad.c index e050a94..ae44675 100644 --- a/modules/codec/faad.c +++ b/modules/codec/faad.c @@ -233,8 +233,17 @@ static aout_buffer_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) /* Append the block to the temporary buffer */ if( p_sys->i_buffer_size < p_sys->i_buffer + p_block->i_buffer ) { - p_sys->i_buffer_size = p_sys->i_buffer + p_block->i_buffer; - p_sys->p_buffer = realloc( p_sys->p_buffer, p_sys->i_buffer_size ); + size_t i_buffer_size = p_sys->i_buffer + p_block->i_buffer; + uint8_t *p_buffer = realloc( p_sys->p_buffer, i_buffer_size ); + if( p_buffer ) + { + p_sys->i_buffer_size = i_buffer_size; + p_sys->p_buffer = p_buffer; + } + else + { + p_block->i_buffer = 0; + } } if( p_block->i_buffer > 0 ) diff --git a/modules/codec/kate.c b/modules/codec/kate.c index a6d8ef4..9fe0af9 100644 --- a/modules/codec/kate.c +++ b/modules/codec/kate.c @@ -864,7 +864,7 @@ static void PostprocessTigerImage( plane_t *p_plane, unsigned int i_width ) if( a ) { #ifdef WORDS_BIGENDIAN - uint8_t tmp = pixel[2]; + uint8_t tmp = p_pixel[2]; p_pixel[0] = p_pixel[3] * 255 / a; p_pixel[3] = a; p_pixel[2] = p_pixel[1] * 255 / a; diff --git a/modules/codec/subtitles/t140.c b/modules/codec/subtitles/t140.c index 5e0c25a..2b89199 100644 --- a/modules/codec/subtitles/t140.c +++ b/modules/codec/subtitles/t140.c @@ -101,5 +101,9 @@ static block_t *Encode( encoder_t *p_enc, subpicture_t *p_spu ) p_block = block_New( p_enc, len ); memcpy( p_block->p_buffer, p_region->psz_text, len ); + p_block->i_pts = p_block->i_dts = p_spu->i_start; + if( !p_spu->b_ephemer && ( p_spu->i_stop > p_spu->i_start ) ) + p_block->i_length = p_spu->i_stop - p_spu->i_start; + return p_block; } diff --git a/modules/codec/x264.c b/modules/codec/x264.c index e76ac3b..243bcba 100644 --- a/modules/codec/x264.c +++ b/modules/codec/x264.c @@ -1359,6 +1359,21 @@ static int Open ( vlc_object_t *p_this ) p_enc->fmt_out.i_extra = 0; p_enc->fmt_out.p_extra = NULL; +#if X264_BUILD >= 76 + p_enc->fmt_out.i_extra = x264_encoder_headers( p_sys->h, &nal, &i_nal ); + p_enc->fmt_out.p_extra = malloc( p_enc->fmt_out.i_extra ); + if( !p_enc->fmt_out.p_extra ) + { + Close( VLC_OBJECT(p_enc) ); + return VLC_ENOMEM; + } + void *p_tmp = p_enc->fmt_out.p_extra; + for( i = 0; i < i_nal; i++ ) + { + memcpy( p_tmp, nal[i].p_payload, nal[i].i_payload ); + p_tmp += nal[i].i_payload; + } +#else x264_encoder_headers( p_sys->h, &nal, &i_nal ); for( i = 0; i < i_nal; i++ ) { @@ -1380,6 +1395,7 @@ static int Open ( vlc_object_t *p_this ) p_enc->fmt_out.i_extra += i_size; } +#endif return VLC_SUCCESS; } @@ -1416,10 +1432,15 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pict ) for( i = 0, i_out = 0; i < i_nal; i++ ) { +#if X264_BUILD >= 76 + memcpy( p_sys->p_buffer + i_out, nal[i].p_payload, nal[i].i_payload ); + i_out += nal[i].i_payload; +#else int i_size = p_sys->i_buffer - i_out; x264_nal_encode( p_sys->p_buffer + i_out, &i_size, 1, &nal[i] ); i_out += i_size; +#endif } p_block = block_New( p_enc, i_out ); diff --git a/modules/demux/avi/avi.c b/modules/demux/avi/avi.c index 4fe88b4..47a97e4 100644 --- a/modules/demux/avi/avi.c +++ b/modules/demux/avi/avi.c @@ -672,7 +672,18 @@ aviindex: /* *** movie length in sec *** */ p_sys->i_length = AVI_MovieGetLength( p_demux ); - if( p_sys->i_length < (mtime_t)p_avih->i_totalframes * + + /* Check the index completeness */ + unsigned int i_idx_totalframes = 0; + for( unsigned int i = 0; i < p_sys->i_track; i++ ) + { + const avi_track_t *tk = p_sys->track[i]; + if( tk->i_cat == VIDEO_ES && tk->p_index ) + i_idx_totalframes = __MAX(i_idx_totalframes, tk->i_idxnb); + continue; + } + if( i_idx_totalframes != p_avih->i_totalframes && + p_sys->i_length < (mtime_t)p_avih->i_totalframes * (mtime_t)p_avih->i_microsecperframe / (mtime_t)1000000 ) { diff --git a/modules/demux/playlist/m3u.c b/modules/demux/playlist/m3u.c index 9770b29..f727c87 100644 --- a/modules/demux/playlist/m3u.c +++ b/modules/demux/playlist/m3u.c @@ -114,28 +114,6 @@ void Close_M3U( vlc_object_t *p_this ) } -/* Gruik! */ -static inline char *MaybeFromLocaleDup (const char *str) -{ - if (str == NULL) - return NULL; - - return IsUTF8 (str) ? strdup (str) : FromLocaleDup (str); -} - - -static inline void MaybeFromLocaleRep (char **str) -{ - char *const orig_str = *str; - - if ((orig_str != NULL) && !IsUTF8 (orig_str)) - { - *str = FromLocaleDup (orig_str); - free (orig_str); - } -} - - static int Demux( demux_t *p_demux ) { char *psz_line; @@ -178,9 +156,9 @@ static int Demux( demux_t *p_demux ) if( i_parsed_duration >= 0 ) i_duration = i_parsed_duration * INT64_C(1000000); if( psz_name ) - psz_name = strdup( psz_name ); + psz_name = FromLocaleDup( psz_name ); if( psz_artist ) - psz_artist = strdup( psz_artist ); + psz_artist = FromLocaleDup( psz_artist ); } else if( !strncasecmp( psz_parse, "EXTVLCOPT:", sizeof("EXTVLCOPT:") -1 ) ) @@ -190,7 +168,7 @@ static int Demux( demux_t *p_demux ) psz_parse += sizeof("EXTVLCOPT:") -1; if( !*psz_parse ) goto error; - psz_option = MaybeFromLocaleDup( psz_parse ); + psz_option = FromLocaleDup( psz_parse ); if( psz_option ) INSERT_ELEM( ppsz_options, i_options, i_options, psz_option ); @@ -203,14 +181,13 @@ static int Demux( demux_t *p_demux ) else if( *psz_parse ) { char *psz_mrl; - if( !psz_name || !*psz_name ) - { + + psz_parse = FromLocale( psz_parse ); + if( !psz_name && psz_parse ) /* Use filename as name for relative entries */ - psz_name = MaybeFromLocaleDup( psz_parse ); - } + psz_name = strdup( psz_parse ); psz_mrl = ProcessMRL( psz_parse, p_demux->p_sys->psz_prefix ); - MaybeFromLocaleRep( &psz_mrl ); b_cleanup = true; if( !psz_mrl ) goto error; @@ -218,12 +195,14 @@ static int Demux( demux_t *p_demux ) p_input = input_item_NewExt( p_demux, psz_mrl, psz_name, i_options, ppsz_options, 0, i_duration ); + LocaleFree( psz_parse ); + free( psz_mrl ); + if ( psz_artist && *psz_artist ) input_item_SetArtist( p_input, psz_artist ); input_item_AddSubItem( p_current_input, p_input ); vlc_gc_decref( p_input ); - free( psz_mrl ); } error: diff --git a/modules/demux/ts.c b/modules/demux/ts.c index 514096b..b36dc4f 100644 --- a/modules/demux/ts.c +++ b/modules/demux/ts.c @@ -2083,6 +2083,9 @@ static int PIDFillFormat( ts_pid_t *pid, int i_stream_type ) case 0x85: /* DTS (audio) */ es_format_Init( fmt, AUDIO_ES, VLC_FOURCC( 'd', 't', 's', ' ' ) ); break; + case 0x87: /* E-AC3 */ + es_format_Init( fmt, AUDIO_ES, VLC_FOURCC( 'e', 'a', 'c', '3' ) ); + break; case 0x91: /* A52 vls (audio) */ es_format_Init( fmt, AUDIO_ES, VLC_FOURCC( 'a', '5', '2', 'b' ) ); @@ -3671,7 +3674,6 @@ static void PMTSetupEsHDMV( demux_t *p_demux, ts_pid_t *pid, break; case 0x84: /* E-AC3 */ - case 0x87: /* E-AC3 */ case 0xA1: /* Secondary E-AC3 */ p_fmt->i_cat = AUDIO_ES; p_fmt->i_codec = VLC_FOURCC( 'e', 'a', 'c', '3' ); diff --git a/modules/gui/qt4/components/playlist/playlist_item.cpp b/modules/gui/qt4/components/playlist/playlist_item.cpp index b0436f0..0edde6a 100644 --- a/modules/gui/qt4/components/playlist/playlist_item.cpp +++ b/modules/gui/qt4/components/playlist/playlist_item.cpp @@ -48,7 +48,7 @@ */ -void PLItem::init( int _i_id, int _i_input_id, bool _is_node, PLItem *parent, PLModel *m, QSettings *settings ) +void PLItem::init( int _i_id, int _i_input_id, PLItem *parent, PLModel *m, QSettings *settings ) { parentItem = parent; /* Can be NULL, but only for the rootItem */ i_id = _i_id; /* Playlist item specific id */ @@ -56,7 +56,6 @@ void PLItem::init( int _i_id, int _i_input_id, bool _is_node, PLItem *parent, PL model = m; /* PLModel (QAbsmodel) */ i_type = -1; /* Item type - Avoid segfault */ b_current = false; /* Is the item the current Item or not */ - b_is_node = _is_node; assert( model ); /* We need a model */ @@ -92,21 +91,19 @@ void PLItem::init( int _i_id, int _i_input_id, bool _is_node, PLItem *parent, PL Call the above function init So far the first constructor isn't used... */ -PLItem::PLItem( int _i_id, int _i_input_id, bool _is_node, PLItem *parent, PLModel *m ) +PLItem::PLItem( int _i_id, int _i_input_id, PLItem *parent, PLModel *m ) { - init( _i_id, _i_input_id, _is_node, parent, m, NULL ); + init( _i_id, _i_input_id, parent, m, NULL ); } PLItem::PLItem( playlist_item_t * p_item, PLItem *parent, PLModel *m ) { - init( p_item->i_id, p_item->p_input->i_id, p_item->i_children > -1, - parent, m, NULL ); + init( p_item->i_id, p_item->p_input->i_id, parent, m, NULL ); } PLItem::PLItem( playlist_item_t * p_item, QSettings *settings, PLModel *m ) { - init( p_item->i_id, p_item->p_input->i_id, p_item->i_children > -1, - NULL, m, settings ); + init( p_item->i_id, p_item->p_input->i_id, NULL, m, settings ); } PLItem::~PLItem() @@ -177,7 +174,6 @@ void PLItem::update( playlist_item_t *p_item, bool iscurrent ) /* Useful for the model */ i_type = p_item->p_input->i_type; b_current = iscurrent; - b_is_node = p_item->i_children > -1; item_col_strings.clear(); diff --git a/modules/gui/qt4/components/playlist/playlist_item.hpp b/modules/gui/qt4/components/playlist/playlist_item.hpp index c9d186b..26ce13c 100644 --- a/modules/gui/qt4/components/playlist/playlist_item.hpp +++ b/modules/gui/qt4/components/playlist/playlist_item.hpp @@ -40,7 +40,7 @@ class PLItem { friend class PLModel; public: - PLItem( int, int, bool, PLItem *parent , PLModel * ); + PLItem( int, int, PLItem *parent , PLModel * ); PLItem( playlist_item_t *, PLItem *parent, PLModel * ); PLItem( playlist_item_t *, QSettings *, PLModel * ); ~PLItem(); @@ -72,10 +72,9 @@ protected: int i_id; int i_input_id; int i_showflags; - bool b_is_node; private: - void init( int, int, bool, PLItem *, PLModel *, QSettings * ); + void init( int, int, PLItem *, PLModel *, QSettings * ); void updateColumnHeaders(); PLItem *parentItem; PLModel *model; diff --git a/modules/gui/qt4/components/playlist/playlist_model.cpp b/modules/gui/qt4/components/playlist/playlist_model.cpp index 9a28d42..add3ddc 100644 --- a/modules/gui/qt4/components/playlist/playlist_model.cpp +++ b/modules/gui/qt4/components/playlist/playlist_model.cpp @@ -119,12 +119,7 @@ Qt::ItemFlags PLModel::flags( const QModelIndex &index ) const { Qt::ItemFlags defaultFlags = QAbstractItemModel::flags( index ); if( index.isValid() ) - { - PLItem *item = static_cast( index.internalPointer() ); - if ( item->b_is_node ) - defaultFlags |= Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled; - else defaultFlags |= Qt::ItemIsDragEnabled; - } + return Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | defaultFlags; else if ( rootItem->i_id != p_playlist->p_root_onelevel->i_id && rootItem->i_id != p_playlist->p_root_category->i_id ) defaultFlags |= Qt::ItemIsDropEnabled; diff --git a/modules/gui/qt4/components/playlist/standardpanel.cpp b/modules/gui/qt4/components/playlist/standardpanel.cpp index c9e5550..ca421c6 100644 --- a/modules/gui/qt4/components/playlist/standardpanel.cpp +++ b/modules/gui/qt4/components/playlist/standardpanel.cpp @@ -87,15 +87,11 @@ StandardPLPanel::StandardPLPanel( PlaylistWidget *_parent, view->header()->resizeSection( 0, 200 ); view->header()->resizeSection( 1, 80 ); } + view->header()->setSortIndicatorShown( true ); view->header()->setClickable( true ); view->header()->setContextMenuPolicy( Qt::CustomContextMenu ); getSettings()->endGroup(); - /* Set sorting enable by hand, so it doesn't run sort on start */ - view->header()->setSortIndicator( -1, Qt::AscendingOrder ); - view->header()->setSortIndicatorShown( true ); - CONNECT( view->header(), sortIndicatorChanged( int, Qt::SortOrder ), - view, sortByColumn( int ) ); /* Connections for the TreeView */ CONNECT( view, activated( const QModelIndex& ) , model,activateItem( const QModelIndex& ) ); diff --git a/modules/gui/qt4/dialogs_provider.cpp b/modules/gui/qt4/dialogs_provider.cpp index 0c4da89..c39bb2f 100644 --- a/modules/gui/qt4/dialogs_provider.cpp +++ b/modules/gui/qt4/dialogs_provider.cpp @@ -532,7 +532,7 @@ void DialogsProvider::saveAPlaylist() char filter[24]; char module[12]; } types[] = { - { N_("XSPF playlist (*.xpsf)"), "export-xspf", }, + { N_("XSPF playlist (*.xspf)"), "export-xspf", }, { N_("M3U playlist (*.m3u)"), "export-m3u", }, { N_("HTML playlist (*.html)"), "export-html", }, }; diff --git a/modules/gui/qt4/main_interface.hpp b/modules/gui/qt4/main_interface.hpp index d352fae..c9af6ef 100644 --- a/modules/gui/qt4/main_interface.hpp +++ b/modules/gui/qt4/main_interface.hpp @@ -180,7 +180,7 @@ private slots: void showCryptedLabel( bool ); signals: void askGetVideo( WId *p_id, vout_thread_t *, int *pi_x, int *pi_y, - unsigned int *pi_width, unsigned int *pi_height ); + unsigned *pi_width, unsigned *pi_height ); void askReleaseVideo( ); void askVideoToResize( unsigned int, unsigned int ); void askUpdate(); diff --git a/modules/stream_filter/rar.c b/modules/stream_filter/rar.c index a5fd829..f828058 100644 --- a/modules/stream_filter/rar.c +++ b/modules/stream_filter/rar.c @@ -525,7 +525,7 @@ static int SkipFile( stream_t *s,const rar_block_t *p_hdr ) rar_file_chunk_t *p_chunk = malloc( sizeof( *p_chunk ) ); if( p_chunk ) { - p_chunk->i_offset = stream_Tell( s->p_source ); + p_chunk->i_offset = stream_Tell( s->p_source ) + p_hdr->i_size; p_chunk->i_size = p_hdr->i_add_size; p_chunk->i_cummulated_size = 0; if( p_current->i_chunk > 0 ) diff --git a/modules/video_filter/canvas.c b/modules/video_filter/canvas.c index e6c79cd..f2074e5 100644 --- a/modules/video_filter/canvas.c +++ b/modules/video_filter/canvas.c @@ -102,6 +102,7 @@ static int alloc_init( filter_t *, void * ); * Module descriptor *****************************************************************************/ vlc_module_begin () + set_shortname( N_("Canvas") ) set_description( N_("Automatically resize and pad a video") ) set_capability( "video filter2", 0 ) set_callbacks( Activate, Destroy ) diff --git a/modules/video_filter/croppadd.c b/modules/video_filter/croppadd.c index 63b5341..887e6e5 100644 --- a/modules/video_filter/croppadd.c +++ b/modules/video_filter/croppadd.c @@ -76,6 +76,7 @@ static picture_t *Filter( filter_t *, picture_t * ); * Module descriptor *****************************************************************************/ vlc_module_begin () + set_shortname( N_("Cropadd") ) set_description( N_("Video scaling filter") ) set_capability( "video filter2", 0 ) set_callbacks( OpenFilter, CloseFilter ) diff --git a/share/lua/playlist/appletrailers.lua b/share/lua/playlist/appletrailers.lua index 7544255..3e2688d 100644 --- a/share/lua/playlist/appletrailers.lua +++ b/share/lua/playlist/appletrailers.lua @@ -53,7 +53,7 @@ function parse() else extraname = "" end - table.insert( p, { path = path; name = title..extraname; description = description; url = vlc.path } ) + table.insert( p, { path = path; name = title..extraname; description = description; url = vlc.path; options = ":http-user-agent=\"QuickTime vlc lua edition\"" } ) end if string.match( line, "" ) then diff --git a/src/misc/update.c b/src/misc/update.c index a0f4334..d7e6179 100644 --- a/src/misc/update.c +++ b/src/misc/update.c @@ -1081,12 +1081,12 @@ void update_Delete( update_t *p_update ) if( p_update->p_check ) { - assert( !p_update->p_download ); vlc_object_kill( p_update->p_check ); vlc_thread_join( p_update->p_check ); vlc_object_release( p_update->p_check ); } - else if( p_update->p_download ) + + if( p_update->p_download ) { vlc_object_kill( p_update->p_download ); vlc_thread_join( p_update->p_download ); @@ -1613,9 +1613,9 @@ static void* update_DownloadReal( vlc_object_t *p_this ) psz_downloaded = size_str( l_downloaded ); f_progress = (float)l_downloaded/(float)l_size; - if( asprintf( &psz_status, _( "%s\nDownloading... %s/%s %.1f%% done" ), + if( asprintf( &psz_status, _( "%s\nDownloading... %s/%s - %.1f%% done" ), p_update->release.psz_url, psz_downloaded, psz_size, - f_progress ) != -1 ) + f_progress*100 ) != -1 ) { dialog_ProgressSet( p_progress, psz_status, f_progress ); free( psz_status ); @@ -1735,9 +1735,6 @@ end: free( p_buffer ); free( psz_size ); - p_udt->p_update->p_download = NULL; - - vlc_object_release( p_udt ); vlc_restorecancel( canc ); return NULL; }