X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmux%2Fasf.c;h=e6a21a77819e43a611ce62d7f696d1b19d324719;hb=5dbc70c99be39d53beb4d4548fd5767eddd17cf1;hp=e836ca9f23a1af9a56e883b62bb9676462def0c0;hpb=13ae40b0efc4f1b1ce205d9a057537047fcab3f4;p=vlc diff --git a/modules/mux/asf.c b/modules/mux/asf.c index e836ca9f23..e6a21a7781 100644 --- a/modules/mux/asf.c +++ b/modules/mux/asf.c @@ -30,7 +30,7 @@ # include "config.h" #endif -#include +#include #include #include #include @@ -61,6 +61,9 @@ static void Close ( vlc_object_t * ); #define RATING_LONGTEXT N_("\"Rating\" to put in ASF comments." ) #define PACKETSIZE_TEXT N_("Packet Size") #define PACKETSIZE_LONGTEXT N_("ASF packet size -- default is 4096 bytes") +#define BITRATE_TEXT N_("Bitrate override") +#define BITRATE_LONGTEXT N_("Do not try to guess ASF bitrate. Setting this, allows you to control how Windows Media Player will cache streamed content. Set to audio+video bitrate in bytes") + vlc_module_begin(); set_description( N_("ASF muxer") ); @@ -83,14 +86,17 @@ vlc_module_begin(); COMMENT_LONGTEXT, true ); add_string( SOUT_CFG_PREFIX "rating", "", NULL, RATING_TEXT, RATING_LONGTEXT, true ); - add_integer( "sout-asf-packet-size", 4096, NULL, PACKETSIZE_TEXT, PACKETSIZE_LONGTEXT, true ); + add_integer( SOUT_CFG_PREFIX "packet-size", 4096, NULL, PACKETSIZE_TEXT, + PACKETSIZE_LONGTEXT, true ); + add_integer( SOUT_CFG_PREFIX "bitrate-override", 0, NULL, BITRATE_TEXT, + BITRATE_LONGTEXT, true ); vlc_module_end(); /***************************************************************************** * Locales prototypes *****************************************************************************/ -static const char *ppsz_sout_options[] = { +static const char *const ppsz_sout_options[] = { "title", "author", "copyright", "comment", "rating", NULL }; @@ -129,6 +135,7 @@ struct sout_mux_sys_t mtime_t i_dts_last; mtime_t i_preroll_time; int64_t i_bitrate; + int64_t i_bitrate_override; int i_track; asf_track_t track[MAX_ASF_TRACKS]; @@ -206,12 +213,16 @@ static int Open( vlc_object_t *p_this ) p_sys->i_dts_last = 0; p_sys->i_preroll_time = 2000; p_sys->i_bitrate = 0; + p_sys->i_bitrate_override = 0; p_sys->i_seq = 0; p_sys->b_write_header = true; p_sys->i_track = 0; p_sys->i_packet_size = config_GetInt( p_mux, "sout-asf-packet-size" ); + p_sys->i_bitrate_override = config_GetInt( p_mux, "sout-asf-bitrate-override" ); msg_Dbg( p_mux, "Packet size %d", p_sys->i_packet_size); + if (p_sys->i_bitrate_override) + msg_Dbg( p_mux, "Bitrate override %"PRId64, p_sys->i_bitrate_override); p_sys->i_packet_count= 0; /* Generate a random fid */ @@ -480,6 +491,8 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input ) { p_sys->i_bitrate += 512000; } + if (p_sys->i_bitrate_override) + p_sys->i_bitrate = p_sys->i_bitrate_override; break; } case VIDEO_ES: @@ -564,6 +577,8 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input ) { p_sys->i_bitrate += 1000000; } + if (p_sys->i_bitrate_override) + p_sys->i_bitrate = p_sys->i_bitrate_override; break; } default: @@ -582,7 +597,27 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input ) *****************************************************************************/ static int DelStream( sout_mux_t *p_mux, sout_input_t *p_input ) { - VLC_UNUSED(p_input); + /* if bitrate ain't defined in commanline, reduce it when tracks are deleted + */ + sout_mux_sys_t *p_sys = p_mux->p_sys; + asf_track_t *tk = p_input->p_sys; + if(!p_sys->i_bitrate_override) + { + if( tk->i_cat == AUDIO_ES ) + { + if( p_input->p_fmt->i_bitrate > 24000 ) + p_sys->i_bitrate -= p_input->p_fmt->i_bitrate; + else + p_sys->i_bitrate -= 512000; + } + else if(tk->i_cat == VIDEO_ES ) + { + if( p_input->p_fmt->i_bitrate > 50000 ) + p_sys->i_bitrate -= p_input->p_fmt->i_bitrate; + else + p_sys->i_bitrate -= 1000000; + } + } msg_Dbg( p_mux, "removing input" ); return VLC_SUCCESS; }