diff --git a/ffserver.c b/ffserver.c index 53939b7a64..8bf38225cf 100644 --- a/ffserver.c +++ b/ffserver.c @@ -381,9 +381,8 @@ static void start_children(FFStream *feed) char *slash; int i; - for (i = 3; i < 256; i++) { + for (i = 3; i < 256; i++) close(i); - } if (!ffserver_debug) { i = open("/dev/null", O_RDWR); @@ -398,11 +397,10 @@ static void start_children(FFStream *feed) av_strlcpy(pathname, my_program_name, sizeof(pathname)); slash = strrchr(pathname, '/'); - if (!slash) { + if (!slash) slash = pathname; - } else { + else slash++; - } strcpy(slash, "ffmpeg"); /* This is needed to make relative pathnames work */ @@ -478,9 +476,9 @@ static void start_multicast(void) rtp_c = rtp_new_connection(&dest_addr, stream, session_id, RTSP_PROTOCOL_RTP_UDP_MULTICAST); - if (!rtp_c) { + if (!rtp_c) continue; - } + if (open_input_stream(rtp_c, "") < 0) { fprintf(stderr, "Could not open input stream for stream '%s'\n", stream->filename); @@ -617,14 +615,12 @@ static int http_server(void) poll_entry = poll_table; /* new HTTP connection request ? */ - if (poll_entry->revents & POLLIN) { + if (poll_entry->revents & POLLIN) new_connection(server_fd, 0); - } poll_entry++; /* new RTSP connection request ? */ - if (poll_entry->revents & POLLIN) { + if (poll_entry->revents & POLLIN) new_connection(rtsp_server_fd, 1); - } } } @@ -702,11 +698,10 @@ static void close_connection(HTTPContext *c) cp = &first_http_ctx; while ((*cp) != NULL) { c1 = *cp; - if (c1 == c) { + if (c1 == c) *cp = c->next; - } else { + else cp = &c1->next; - } } /* remove references, if any (XXX: do it faster) */ @@ -722,9 +717,8 @@ static void close_connection(HTTPContext *c) /* close each frame parser */ for(i=0;ifmt_in->nb_streams;i++) { st = c->fmt_in->streams[i]; - if (st->codec->codec) { + if (st->codec->codec) avcodec_close(st->codec); - } } av_close_input_file(c->fmt_in); } @@ -741,9 +735,8 @@ static void close_connection(HTTPContext *c) av_free(ctx); } h = c->rtp_handles[i]; - if (h) { + if (h) url_close(h); - } } ctx = &c->fmt_ctx; @@ -847,9 +840,8 @@ static int handle_connection(HTTPContext *c) if (c->buffer_ptr >= c->buffer_end) { av_freep(&c->pb_buffer); /* if error, exit */ - if (c->http_error) { + if (c->http_error) return -1; - } /* all the buffer was sent : synchronize to the incoming stream */ c->state = HTTPSTATE_SEND_DATA_HEADER; c->buffer_ptr = c->buffer_end = c->buffer; @@ -978,13 +970,12 @@ static int extract_rates(char *rates, int ratelen, const char *request) while (*q && *q != '\n' && *q != ':') q++; - if (sscanf(q, ":%d:%d", &stream_no, &rate_no) != 2) { + if (sscanf(q, ":%d:%d", &stream_no, &rate_no) != 2) break; - } + stream_no--; - if (stream_no < ratelen && stream_no >= 0) { + if (stream_no < ratelen && stream_no >= 0) rates[stream_no] = rate_no; - } while (*q && *q != '\n' && !isspace(*q)) q++; @@ -1015,9 +1006,8 @@ static int find_stream_in_feed(FFStream *feed, AVCodecContext *codec, int bit_ra if (feed_codec->codec_id != codec->codec_id || feed_codec->sample_rate != codec->sample_rate || feed_codec->width != codec->width || - feed_codec->height != codec->height) { + feed_codec->height != codec->height) continue; - } /* Potential stream */ @@ -1129,9 +1119,8 @@ static int validate_acl(FFStream *stream, HTTPContext *c) unsigned long src_addr = src->s_addr; for (acl = stream->acl; acl; acl = acl->next) { - if (src_addr >= acl->first.s_addr && src_addr <= acl->last.s_addr) { + if (src_addr >= acl->first.s_addr && src_addr <= acl->last.s_addr) return (acl->action == IP_ALLOW) ? 1 : 0; - } last_action = acl->action; } @@ -1218,9 +1207,8 @@ static int http_parse_request(HTTPContext *c) if (p) { av_strlcpy(info, p, sizeof(info)); *p = '\0'; - } else { + } else info[0] = '\0'; - } av_strlcpy(filename, url + ((*url == '/') ? 1 : 0), sizeof(filename)-1); @@ -1310,9 +1298,8 @@ static int http_parse_request(HTTPContext *c) goto send_error; } - if (c->post == 0 && stream->stream_type == STREAM_TYPE_LIVE) { + if (c->post == 0 && stream->stream_type == STREAM_TYPE_LIVE) current_bandwidth += stream->bandwidth; - } if (c->post == 0 && max_bandwidth < current_bandwidth) { c->http_error = 200; @@ -1471,9 +1458,8 @@ static int http_parse_request(HTTPContext *c) logline = p; break; } - if (strncasecmp(p, "Pragma: client-id=", 18) == 0) { + if (strncasecmp(p, "Pragma: client-id=", 18) == 0) client_id = strtol(p + 18, 0, 10); - } p = strchr(p, '\n'); if (!p) break; @@ -1525,9 +1511,8 @@ static int http_parse_request(HTTPContext *c) } #ifdef DEBUG_WMP - if (strcmp(stream->filename + strlen(stream->filename) - 4, ".asf") == 0) { + if (strcmp(stream->filename + strlen(stream->filename) - 4, ".asf") == 0) http_log("\nGot request:\n%s\n", c->buffer); - } #endif if (c->stream->stream_type == STREAM_TYPE_STATUS) @@ -1593,8 +1578,7 @@ static void fmt_bytecount(ByteIOContext *pb, int64_t count) static const char *suffix = " kMGTP"; const char *s; - for (s = suffix; count >= 100000 && s[1]; count /= 1000, s++) { - } + for (s = suffix; count >= 100000 && s[1]; count /= 1000, s++); url_fprintf(pb, "%"PRId64"%c", count, *s); } @@ -1621,9 +1605,8 @@ static void compute_stats(HTTPContext *c) url_fprintf(pb, "\r\n"); url_fprintf(pb, "FFServer Status\n"); - if (c->stream->feed_filename) { + if (c->stream->feed_filename) url_fprintf(pb, "\n", c->stream->feed_filename); - } url_fprintf(pb, "\n"); url_fprintf(pb, "

FFServer Status

\n"); /* format status */ @@ -1639,11 +1622,11 @@ static void compute_stats(HTTPContext *c) av_strlcpy(sfilename, stream->filename, sizeof(sfilename) - 10); eosf = sfilename + strlen(sfilename); if (eosf - sfilename >= 4) { - if (strcmp(eosf - 4, ".asf") == 0) { + if (strcmp(eosf - 4, ".asf") == 0) strcpy(eosf - 4, ".asx"); - } else if (strcmp(eosf - 3, ".rm") == 0) { + else if (strcmp(eosf - 3, ".rm") == 0) strcpy(eosf - 3, ".ram"); - } else if (stream->fmt == &rtp_muxer) { + else if (stream->fmt == &rtp_muxer) { /* generate a sample RTSP director if unicast. Generate an SDP redirector if multicast */ @@ -1704,11 +1687,10 @@ static void compute_stats(HTTPContext *c) stream->bandwidth, video_bit_rate / 1000, video_codec_name, video_codec_name_extra, audio_bit_rate / 1000, audio_codec_name, audio_codec_name_extra); - if (stream->feed) { + if (stream->feed) url_fprintf(pb, "%s", stream->feed->filename); - } else { + else url_fprintf(pb, "%s", stream->feed_filename); - } url_fprintf(pb, "\n"); } break; @@ -1884,9 +1866,8 @@ static void open_parser(AVFormatContext *s, int i) codec = avcodec_find_decoder(st->codec->codec_id); if (codec && (codec->capabilities & CODEC_CAP_PARSE_ONLY)) { st->codec->parse_only = 1; - if (avcodec_open(st->codec, codec) < 0) { + if (avcodec_open(st->codec, codec) < 0) st->codec->parse_only = 0; - } } } } @@ -1904,23 +1885,21 @@ static int open_input_stream(HTTPContext *c, const char *info) strcpy(input_filename, c->stream->feed->feed_filename); buf_size = FFM_PACKET_SIZE; /* compute position (absolute time) */ - if (find_info_tag(buf, sizeof(buf), "date", info)) { + if (find_info_tag(buf, sizeof(buf), "date", info)) stream_pos = parse_date(buf, 0); - } else if (find_info_tag(buf, sizeof(buf), "buffer", info)) { + else if (find_info_tag(buf, sizeof(buf), "buffer", info)) { int prebuffer = strtol(buf, 0, 10); stream_pos = av_gettime() - prebuffer * (int64_t)1000000; - } else { + } else stream_pos = av_gettime() - c->stream->prebuffer * (int64_t)1000; - } } else { strcpy(input_filename, c->stream->feed_filename); buf_size = 0; /* compute position (relative time) */ - if (find_info_tag(buf, sizeof(buf), "date", info)) { + if (find_info_tag(buf, sizeof(buf), "date", info)) stream_pos = parse_date(buf, 1); - } else { + else stream_pos = 0; - } } if (input_filename[0] == '\0') return -1; @@ -1954,9 +1933,8 @@ static int open_input_stream(HTTPContext *c, const char *info) } #if 1 - if (c->fmt_in->iformat->read_seek) { + if (c->fmt_in->iformat->read_seek) c->fmt_in->iformat->read_seek(c->fmt_in, 0, stream_pos, 0); - } #endif /* set the start time (needed for maxtime and RTP packet timing) */ c->start_time = cur_time; @@ -1978,9 +1956,9 @@ static int64_t get_packet_send_clock(HTTPContext *c) int bytes_left, bytes_sent, frame_bytes; frame_bytes = c->cur_frame_bytes; - if (frame_bytes <= 0) { + if (frame_bytes <= 0) return c->cur_pts; - } else { + else { bytes_left = c->buffer_end - c->buffer_ptr; bytes_sent = frame_bytes - bytes_left; return c->cur_pts + (c->cur_frame_duration * bytes_sent) / frame_bytes; @@ -2057,17 +2035,16 @@ static int http_prepare_data(HTTPContext *c) AVPacket pkt; /* read a packet from the input stream */ - if (c->stream->feed) { + if (c->stream->feed) ffm_set_write_index(c->fmt_in, c->stream->feed->feed_write_index, c->stream->feed->feed_size); - } if (c->stream->max_time && - c->stream->max_time + c->start_time - cur_time < 0) { + c->stream->max_time + c->start_time - cur_time < 0) /* We have timed out */ c->state = HTTPSTATE_SEND_DATA_TRAILER; - } else { + else { redo: if (av_read_frame(c->fmt_in, &pkt) < 0) { if (c->stream->feed && c->stream->feed->feed_opened) { @@ -2100,22 +2077,18 @@ static int http_prepare_data(HTTPContext *c) if (c->switch_pending) { c->switch_pending = 0; for(i=0;istream->nb_streams;i++) { - if (c->switch_feed_streams[i] == pkt.stream_index) { - if (pkt.flags & PKT_FLAG_KEY) { + if (c->switch_feed_streams[i] == pkt.stream_index) + if (pkt.flags & PKT_FLAG_KEY) do_switch_stream(c, i); - } - } - if (c->switch_feed_streams[i] >= 0) { + if (c->switch_feed_streams[i] >= 0) c->switch_pending = 1; - } } } for(i=0;istream->nb_streams;i++) { if (c->feed_streams[i] == pkt.stream_index) { pkt.stream_index = i; - if (pkt.flags & PKT_FLAG_KEY) { + if (pkt.flags & PKT_FLAG_KEY) c->got_key_frame |= 1 << i; - } /* See if we have all the key frames, then * we start to send. This logic is not quite * right, but it works for the case of a @@ -2124,9 +2097,8 @@ static int http_prepare_data(HTTPContext *c) * typically a key frame). */ if (!c->stream->send_on_key || - ((c->got_key_frame + 1) >> c->stream->nb_streams)) { + ((c->got_key_frame + 1) >> c->stream->nb_streams)) goto send_it; - } } } } else { @@ -2191,9 +2163,8 @@ static int http_prepare_data(HTTPContext *c) pkt.pts = av_rescale_q(pkt.pts, c->fmt_in->streams[pkt.stream_index]->time_base, ctx->streams[pkt.stream_index]->time_base); - if (av_write_frame(ctx, &pkt)) { + if (av_write_frame(ctx, &pkt)) c->state = HTTPSTATE_SEND_DATA_TRAILER; - } len = url_close_dyn_buf(&ctx->pb, &c->pb_buffer); c->cur_frame_bytes = len; @@ -2243,10 +2214,9 @@ static int http_send_data(HTTPContext *c) ret = http_prepare_data(c); if (ret < 0) return -1; - else if (ret != 0) { + else if (ret != 0) /* state change requested */ break; - } } else { if (c->is_packetized) { /* RTP data output */ @@ -2285,9 +2255,8 @@ static int http_send_data(HTTPContext *c) if (!rtsp_c) return -1; /* if already sending something, then wait. */ - if (rtsp_c->state != RTSPSTATE_WAIT_REQUEST) { + if (rtsp_c->state != RTSPSTATE_WAIT_REQUEST) break; - } if (url_open_dyn_buf(pb) < 0) goto fail1; interleaved_index = c->packet_stream_index * 2; @@ -2312,19 +2281,17 @@ static int http_send_data(HTTPContext *c) /* send everything we can NOW */ len = send(rtsp_c->fd, rtsp_c->packet_buffer_ptr, rtsp_c->packet_buffer_end - rtsp_c->packet_buffer_ptr, 0); - if (len > 0) { + if (len > 0) rtsp_c->packet_buffer_ptr += len; - } if (rtsp_c->packet_buffer_ptr < rtsp_c->packet_buffer_end) { /* if we could not send all the data, we will send it later, so a new state is needed to "lock" the RTSP TCP connection */ rtsp_c->state = RTSPSTATE_SEND_PACKET; break; - } else { + } else /* all data has been sent */ av_freep(&c->packet_buffer); - } } else { /* send RTP packet directly in UDP */ c->buffer_ptr += 4; @@ -2338,15 +2305,14 @@ static int http_send_data(HTTPContext *c) len = send(c->fd, c->buffer_ptr, c->buffer_end - c->buffer_ptr, 0); if (len < 0) { if (ff_neterrno() != FF_NETERROR(EAGAIN) && - ff_neterrno() != FF_NETERROR(EINTR)) { + ff_neterrno() != FF_NETERROR(EINTR)) /* error : close connection */ return -1; - } else { + else return 0; - } - } else { + } else c->buffer_ptr += len; - } + c->data_count += len; update_datarate(&c->datarate, c->data_count); if (c->stream) @@ -2396,14 +2362,13 @@ static int http_receive_data(HTTPContext *c) len = recv(c->fd, c->buffer_ptr, c->buffer_end - c->buffer_ptr, 0); if (len < 0) { if (ff_neterrno() != FF_NETERROR(EAGAIN) && - ff_neterrno() != FF_NETERROR(EINTR)) { + ff_neterrno() != FF_NETERROR(EINTR)) /* error : close connection */ goto fail; - } - } else if (len == 0) { + } else if (len == 0) /* end of connection : close it */ goto fail; - } else { + else { c->buffer_ptr += len; c->data_count += len; update_datarate(&c->datarate, c->data_count); @@ -2444,9 +2409,8 @@ static int http_receive_data(HTTPContext *c) /* wake up any waiting connections */ for(c1 = first_http_ctx; c1 != NULL; c1 = c1->next) { if (c1->state == HTTPSTATE_WAIT_FEED && - c1->stream->feed == c->stream->feed) { + c1->stream->feed == c->stream->feed) c1->state = HTTPSTATE_SEND_DATA; - } } } else { /* We have a header in our hands that contains useful data */ @@ -2483,10 +2447,9 @@ static int http_receive_data(HTTPContext *c) av_freep(&s.priv_data); goto fail; } - for (i = 0; i < s.nb_streams; i++) { + for (i = 0; i < s.nb_streams; i++) memcpy(feed->streams[i]->codec, s.streams[i]->codec, sizeof(AVCodecContext)); - } av_freep(&s.priv_data); } c->buffer_ptr = c->buffer; @@ -2631,21 +2594,21 @@ static int rtsp_parse_request(HTTPContext *c) /* handle sequence number */ c->seq = header->seq; - if (!strcmp(cmd, "DESCRIBE")) { + if (!strcmp(cmd, "DESCRIBE")) rtsp_cmd_describe(c, url); - } else if (!strcmp(cmd, "OPTIONS")) { + else if (!strcmp(cmd, "OPTIONS")) rtsp_cmd_options(c, url); - } else if (!strcmp(cmd, "SETUP")) { + else if (!strcmp(cmd, "SETUP")) rtsp_cmd_setup(c, url, header); - } else if (!strcmp(cmd, "PLAY")) { + else if (!strcmp(cmd, "PLAY")) rtsp_cmd_play(c, url, header); - } else if (!strcmp(cmd, "PAUSE")) { + else if (!strcmp(cmd, "PAUSE")) rtsp_cmd_pause(c, url, header); - } else if (!strcmp(cmd, "TEARDOWN")) { + else if (!strcmp(cmd, "TEARDOWN")) rtsp_cmd_teardown(c, url, header); - } else { + else rtsp_reply_error(c, RTSP_STATUS_METHOD); - } + the_end: len = url_close_dyn_buf(c->pb, &c->pb_buffer); c->pb = NULL; /* safety */ @@ -2683,16 +2646,16 @@ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer, url_fprintf(pb, "s=%s\n", title); if (stream->comment[0] != '\0') url_fprintf(pb, "i=%s\n", stream->comment); - if (stream->is_multicast) { + if (stream->is_multicast) url_fprintf(pb, "c=IN IP4 %s\n", inet_ntoa(stream->multicast_ip)); - } + /* for each stream, we output the necessary info */ private_payload_type = RTP_PT_PRIVATE; for(i = 0; i < stream->nb_streams; i++) { st = stream->streams[i]; - if (st->codec->codec_id == CODEC_ID_MPEG2TS) { + if (st->codec->codec_id == CODEC_ID_MPEG2TS) mediatype = "video"; - } else { + else { switch(st->codec->codec_type) { case CODEC_TYPE_AUDIO: mediatype = "audio"; @@ -2710,11 +2673,11 @@ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer, payload_type = rtp_get_payload_type(st->codec); if (payload_type < 0) payload_type = private_payload_type++; - if (stream->is_multicast) { + if (stream->is_multicast) port = stream->multicast_port + 2 * i; - } else { + else port = 0; - } + url_fprintf(pb, "m=%s %d RTP/AVP %d\n", mediatype, port, payload_type); if (payload_type >= RTP_PT_PRIVATE) { @@ -2729,9 +2692,8 @@ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer, data = st->codec->extradata; if (data) { url_fprintf(pb, "a=fmtp:%d config=", payload_type); - for(j=0;jcodec->extradata_size;j++) { + for(j=0;jcodec->extradata_size;j++) url_fprintf(pb, "%02x", data[j]); - } url_fprintf(pb, "\n"); } } @@ -2876,10 +2838,9 @@ static void rtsp_cmd_setup(HTTPContext *c, const char *url, found: /* generate session id if needed */ - if (h->session_id[0] == '\0') { + if (h->session_id[0] == '\0') snprintf(h->session_id, sizeof(h->session_id), "%08x%08x", av_random(&random_state), av_random(&random_state)); - } /* find rtp session, and create it if none found */ rtp_c = find_rtp_session(h->session_id); @@ -2960,9 +2921,8 @@ static void rtsp_cmd_setup(HTTPContext *c, const char *url, default: break; } - if (setup.transport_option[0] != '\0') { + if (setup.transport_option[0] != '\0') url_fprintf(c->pb, ";%s", setup.transport_option); - } url_fprintf(c->pb, "\r\n"); @@ -3180,13 +3140,12 @@ static int rtp_new_av_stream(HTTPContext *c, ctx->streams[0] = st; if (!c->stream->feed || - c->stream->feed == c->stream) { + c->stream->feed == c->stream) memcpy(st, c->stream->streams[stream_index], sizeof(AVStream)); - } else { + else memcpy(st, c->stream->feed->streams[c->stream->feed_streams[stream_index]], sizeof(AVStream)); - } st->priv_data = NULL; /* build destination RTP address */ @@ -3318,11 +3277,10 @@ static void remove_stream(FFStream *stream) FFStream **ps; ps = &first_stream; while (*ps != NULL) { - if (*ps == stream) { + if (*ps == stream) *ps = (*ps)->next; - } else { + else ps = &(*ps)->next; - } } } @@ -3415,9 +3373,9 @@ static void build_file_streams(void) } extract_mpeg4_header(infile); - for(i=0;inb_streams;i++) { + for(i=0;inb_streams;i++) add_av_stream1(stream, infile->streams[i]->codec); - } + av_close_input_file(infile); } } @@ -3436,9 +3394,8 @@ static void build_feed_streams(void) if (feed) { if (!stream->is_feed) { /* we handle a stream coming from a feed */ - for(i=0;inb_streams;i++) { + for(i=0;inb_streams;i++) stream->feed_streams[i] = add_av_stream(feed, stream->streams[i]); - } } } } @@ -3448,9 +3405,8 @@ static void build_feed_streams(void) feed = stream->feed; if (feed) { if (stream->is_feed) { - for(i=0;inb_streams;i++) { + for(i=0;inb_streams;i++) stream->feed_streams[i] = i; - } } } } @@ -3511,20 +3467,18 @@ static void build_feed_streams(void) matches = 0; } } - if (!matches) { + if (!matches) break; - } } - } else { + } else printf("Deleting feed file '%s' as stream counts differ (%d != %d)\n", feed->feed_filename, s->nb_streams, feed->nb_streams); - } av_close_input_file(s); - } else { + } else printf("Deleting feed file '%s' as it appears to be corrupt\n", feed->feed_filename); - } + if (!matches) { if (feed->readonly) { printf("Unable to delete feed file '%s' as it is marked readonly\n", @@ -3722,9 +3676,8 @@ static int opt_audio_codec(const char *arg) break; p = p->next; } - if (p == NULL) { + if (p == NULL) return CODEC_ID_NONE; - } return p->id; } @@ -3739,9 +3692,8 @@ static int opt_video_codec(const char *arg) break; p = p->next; } - if (p == NULL) { + if (p == NULL) return CODEC_ID_NONE; - } return p->id; } @@ -3865,9 +3817,8 @@ static int parse_ffconfig(const char *filename) fprintf(stderr, "%s:%d: Invalid MaxBandwidth: %s\n", filename, line_num, arg); errors++; - } else { + } else max_bandwidth = val; - } } else if (!strcasecmp(cmd, "CustomLog")) { get_arg(logfilename, sizeof(logfilename), &p); } else if (!strcasecmp(cmd, "feed_filename, sizeof(feed->feed_filename), &p); - } else if (stream) { + } else if (stream) get_arg(stream->feed_filename, sizeof(stream->feed_filename), &p); - } } else if (!strcasecmp(cmd, "FileMaxSize")) { if (feed) { const char *p1; @@ -4007,12 +3957,11 @@ static int parse_ffconfig(const char *filename) break; sfeed = sfeed->next_feed; } - if (!sfeed) { + if (!sfeed) fprintf(stderr, "%s:%d: feed '%s' not defined\n", filename, line_num, arg); - } else { + else stream->feed = sfeed; - } } } else if (!strcasecmp(cmd, "Format")) { get_arg(arg, sizeof(arg), &p); @@ -4051,30 +4000,24 @@ static int parse_ffconfig(const char *filename) errors++; } } else if (!strcasecmp(cmd, "Author")) { - if (stream) { + if (stream) get_arg(stream->author, sizeof(stream->author), &p); - } } else if (!strcasecmp(cmd, "Comment")) { - if (stream) { + if (stream) get_arg(stream->comment, sizeof(stream->comment), &p); - } } else if (!strcasecmp(cmd, "Copyright")) { - if (stream) { + if (stream) get_arg(stream->copyright, sizeof(stream->copyright), &p); - } } else if (!strcasecmp(cmd, "Title")) { - if (stream) { + if (stream) get_arg(stream->title, sizeof(stream->title), &p); - } } else if (!strcasecmp(cmd, "Preroll")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) stream->prebuffer = atof(arg) * 1000; - } } else if (!strcasecmp(cmd, "StartSendOnKey")) { - if (stream) { + if (stream) stream->send_on_key = 1; - } } else if (!strcasecmp(cmd, "AudioCodec")) { get_arg(arg, sizeof(arg), &p); audio_id = opt_audio_codec(arg); @@ -4093,24 +4036,20 @@ static int parse_ffconfig(const char *filename) } } else if (!strcasecmp(cmd, "MaxTime")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) stream->max_time = atof(arg) * 1000; - } } else if (!strcasecmp(cmd, "AudioBitRate")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) audio_enc.bit_rate = atoi(arg) * 1000; - } } else if (!strcasecmp(cmd, "AudioChannels")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) audio_enc.channels = atoi(arg); - } } else if (!strcasecmp(cmd, "AudioSampleRate")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) audio_enc.sample_rate = atoi(arg); - } } else if (!strcasecmp(cmd, "AudioQuality")) { get_arg(arg, sizeof(arg), &p); if (stream) { @@ -4175,17 +4114,14 @@ static int parse_ffconfig(const char *filename) } } else if (!strcasecmp(cmd, "VideoGopSize")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) video_enc.gop_size = atoi(arg); - } } else if (!strcasecmp(cmd, "VideoIntraOnly")) { - if (stream) { + if (stream) video_enc.gop_size = 1; - } } else if (!strcasecmp(cmd, "VideoHighQuality")) { - if (stream) { + if (stream) video_enc.mb_decision = FF_MB_DECISION_BITS; - } } else if (!strcasecmp(cmd, "Video4MotionVector")) { if (stream) { video_enc.mb_decision = FF_MB_DECISION_BITS; //FIXME remove @@ -4193,21 +4129,17 @@ static int parse_ffconfig(const char *filename) } } else if (!strcasecmp(cmd, "VideoTag")) { get_arg(arg, sizeof(arg), &p); - if ((strlen(arg) == 4) && stream) { + if ((strlen(arg) == 4) && stream) video_enc.codec_tag = ff_get_fourcc(arg); - } } else if (!strcasecmp(cmd, "BitExact")) { - if (stream) { + if (stream) video_enc.flags |= CODEC_FLAG_BITEXACT; - } } else if (!strcasecmp(cmd, "DctFastint")) { - if (stream) { + if (stream) video_enc.dct_algo = FF_DCT_FASTINT; - } } else if (!strcasecmp(cmd, "IdctSimple")) { - if (stream) { + if (stream) video_enc.idct_algo = FF_IDCT_SIMPLE; - } } else if (!strcasecmp(cmd, "Qscale")) { get_arg(arg, sizeof(arg), &p); if (stream) { @@ -4246,24 +4178,20 @@ static int parse_ffconfig(const char *filename) } } else if (!strcasecmp(cmd, "LumaElim")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) video_enc.luma_elim_threshold = atoi(arg); - } } else if (!strcasecmp(cmd, "ChromaElim")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) video_enc.chroma_elim_threshold = atoi(arg); - } } else if (!strcasecmp(cmd, "LumiMask")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) video_enc.lumi_masking = atof(arg); - } } else if (!strcasecmp(cmd, "DarkMask")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) video_enc.dark_masking = atof(arg); - } } else if (!strcasecmp(cmd, "NoVideo")) { video_id = CODEC_ID_NONE; } else if (!strcasecmp(cmd, "NoAudio")) { @@ -4272,11 +4200,11 @@ static int parse_ffconfig(const char *filename) IPAddressACL acl; get_arg(arg, sizeof(arg), &p); - if (strcasecmp(arg, "allow") == 0) { + if (strcasecmp(arg, "allow") == 0) acl.action = IP_ALLOW; - } else if (strcasecmp(arg, "deny") == 0) { + else if (strcasecmp(arg, "deny") == 0) acl.action = IP_DENY; - } else { + else { fprintf(stderr, "%s:%d: ACL action '%s' is not ALLOW or DENY\n", filename, line_num, arg); errors++; @@ -4288,9 +4216,8 @@ static int parse_ffconfig(const char *filename) fprintf(stderr, "%s:%d: ACL refers to invalid host or ip address '%s'\n", filename, line_num, arg); errors++; - } else { + } else acl.last = acl.first; - } get_arg(arg, sizeof(arg), &p); @@ -4309,11 +4236,11 @@ static int parse_ffconfig(const char *filename) acl.next = 0; *nacl = acl; - if (stream) { + if (stream) naclp = &stream->acl; - } else if (feed) { + else if (feed) naclp = &feed->acl; - } else { + else { fprintf(stderr, "%s:%d: ACL found not in or \n", filename, line_num); errors++; @@ -4345,18 +4272,15 @@ static int parse_ffconfig(const char *filename) } } else if (!strcasecmp(cmd, "MulticastPort")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) stream->multicast_port = atoi(arg); - } } else if (!strcasecmp(cmd, "MulticastTTL")) { get_arg(arg, sizeof(arg), &p); - if (stream) { + if (stream) stream->multicast_ttl = atoi(arg); - } } else if (!strcasecmp(cmd, "NoLoop")) { - if (stream) { + if (stream) stream->loop = 0; - } } else if (!strcasecmp(cmd, "")) { if (!stream) { fprintf(stderr, "%s:%d: No corresponding for \n", @@ -4395,9 +4319,8 @@ static int parse_ffconfig(const char *filename) redirect->stream_type = STREAM_TYPE_REDIRECT; } } else if (!strcasecmp(cmd, "URL")) { - if (redirect) { + if (redirect) get_arg(redirect->feed_filename, sizeof(redirect->feed_filename), &p); - } } else if (!strcasecmp(cmd, "")) { if (!redirect) { fprintf(stderr, "%s:%d: No corresponding for \n", @@ -4485,10 +4408,9 @@ static void handle_child_exit(int sig) feed->pid = 0; fprintf(stderr, "%s: Pid %d exited with status %d after %d seconds\n", feed->filename, pid, status, uptime); - if (uptime < 30) { + if (uptime < 30) /* Turn off any more restarts */ feed->child_argv = 0; - } } } }