@ -325,6 +325,16 @@ static int compute_datarate(DataRateData *drd, INT64 count)
return ( ( count - drd - > count1 ) * 1000 ) / ( cur_time - drd - > time1 ) ;
}
static int get_longterm_datarate ( DataRateData * drd , INT64 count )
{
/* You get the first 3 seconds flat out */
if ( cur_time - drd - > time1 < 3000 )
return 0 ;
return compute_datarate ( drd , count ) ;
}
static void start_children ( FFStream * feed )
{
if ( no_launch )
@ -1936,6 +1946,11 @@ int av_read_frame(AVFormatContext *s, AVPacket *pkt)
static int compute_send_delay ( HTTPContext * c )
{
int datarate = 8 * get_longterm_datarate ( & c - > datarate , c - > data_count ) ;
if ( datarate > c - > bandwidth * 2000 ) {
return 1000 ;
}
return 0 ;
}
@ -2010,7 +2025,7 @@ static int http_prepare_data(HTTPContext *c)
/* We have timed out */
c - > state = HTTPSTATE_SEND_DATA_TRAILER ;
} else {
if ( c - > is_packetized ) {
if ( 1 | | c - > is_packetized ) {
if ( compute_send_delay ( c ) > 0 ) {
c - > state = HTTPSTATE_WAIT ;
return 1 ; /* state changed */
@ -3278,6 +3293,16 @@ void add_codec(FFStream *stream, AVCodecContext *av)
av - > qcompress = 0.5 ;
av - > qblur = 0.5 ;
if ( ! av - > rc_eq )
av - > rc_eq = " tex^qComp " ;
if ( ! av - > i_quant_factor )
av - > i_quant_factor = 0.8 ;
if ( ! av - > b_quant_factor )
av - > b_quant_factor = 1.25 ;
if ( ! av - > b_quant_offset )
av - > b_quant_offset = 1.25 ;
break ;
default :
av_abort ( ) ;
@ -3705,6 +3730,7 @@ int parse_ffconfig(const char *filename)
video_enc . flags | = CODEC_FLAG_HQ ;
}
} else if ( ! strcasecmp ( cmd , " VideoQDiff " ) ) {
get_arg ( arg , sizeof ( arg ) , & p ) ;
if ( stream ) {
video_enc . max_qdiff = atoi ( arg ) ;
if ( video_enc . max_qdiff < 1 | | video_enc . max_qdiff > 31 ) {
@ -3714,6 +3740,7 @@ int parse_ffconfig(const char *filename)
}
}
} else if ( ! strcasecmp ( cmd , " VideoQMax " ) ) {
get_arg ( arg , sizeof ( arg ) , & p ) ;
if ( stream ) {
video_enc . qmax = atoi ( arg ) ;
if ( video_enc . qmax < 1 | | video_enc . qmax > 31 ) {
@ -3723,6 +3750,7 @@ int parse_ffconfig(const char *filename)
}
}
} else if ( ! strcasecmp ( cmd , " VideoQMin " ) ) {
get_arg ( arg , sizeof ( arg ) , & p ) ;
if ( stream ) {
video_enc . qmin = atoi ( arg ) ;
if ( video_enc . qmin < 1 | | video_enc . qmin > 31 ) {