@ -208,6 +208,7 @@ typedef struct FFStream {
/* feed specific */
int feed_opened ; /* true if someone is writing to the feed */
int is_feed ; /* true if it is a feed */
int readonly ; /* True if writing is prohibited to the file */
int conns_served ;
int64_t bytes_served ;
int64_t feed_max_size ; /* maximum storage size */
@ -2389,6 +2390,10 @@ static int http_start_receive_data(HTTPContext *c)
if ( c - > stream - > feed_opened )
return - 1 ;
/* Don't permit writing to this one */
if ( c - > stream - > readonly )
return - 1 ;
/* open feed */
fd = open ( c - > stream - > feed_filename , O_RDWR ) ;
if ( fd < 0 )
@ -3455,12 +3460,24 @@ static void build_feed_streams(void)
printf ( " Deleting feed file '%s' as it appears to be corrupt \n " ,
feed - > feed_filename ) ;
}
if ( ! matches )
if ( ! matches ) {
if ( feed - > readonly ) {
printf ( " Unable to delete feed file '%s' as it is marked readonly \n " ,
feed - > feed_filename ) ;
exit ( 1 ) ;
}
unlink ( feed - > feed_filename ) ;
}
}
if ( ! url_exist ( feed - > feed_filename ) ) {
AVFormatContext s1 , * s = & s1 ;
if ( feed - > readonly ) {
printf ( " Unable to create feed file '%s' as it is marked readonly \n " ,
feed - > feed_filename ) ;
exit ( 1 ) ;
}
/* only write the header of the ffm file */
if ( url_fopen ( & s - > pb , feed - > feed_filename , URL_WRONLY ) < 0 ) {
fprintf ( stderr , " Could not open output feed file '%s' \n " ,
@ -3815,6 +3832,13 @@ static int parse_ffconfig(const char *filename)
snprintf ( feed - > child_argv [ i ] , 256 , " http://127.0.0.1:%d/%s " ,
ntohs ( my_http_addr . sin_port ) , feed - > filename ) ;
}
} else if ( ! strcasecmp ( cmd , " ReadOnlyFile " ) ) {
if ( feed ) {
get_arg ( feed - > feed_filename , sizeof ( feed - > feed_filename ) , & p ) ;
feed - > readonly = 1 ;
} else if ( stream ) {
get_arg ( stream - > feed_filename , sizeof ( stream - > feed_filename ) , & p ) ;
}
} else if ( ! strcasecmp ( cmd , " File " ) ) {
if ( feed ) {
get_arg ( feed - > feed_filename , sizeof ( feed - > feed_filename ) , & p ) ;
@ -4053,6 +4077,11 @@ static int parse_ffconfig(const char *filename)
if ( stream ) {
video_enc . flags | = CODEC_FLAG_HQ ;
}
} else if ( ! strcasecmp ( cmd , " Video4MotionVector " ) ) {
if ( stream ) {
video_enc . flags | = CODEC_FLAG_HQ ;
video_enc . flags | = CODEC_FLAG_4MV ;
}
} else if ( ! strcasecmp ( cmd , " VideoQDiff " ) ) {
get_arg ( arg , sizeof ( arg ) , & p ) ;
if ( stream ) {