random1 = av_lfg_get(&random_state);
/* open the RTP connection */
- snprintf(session_id, sizeof(session_id), "%08x%08x",
- random0, random1);
+ snprintf(session_id, sizeof(session_id), "%08x%08x", random0, random1);
/* choose a port if none given */
if (stream->multicast_port == 0) {
/* close connection if trailer sent */
if (c->state == HTTPSTATE_SEND_DATA_TRAILER)
return -1;
+ /* Check if it is a single jpeg frame 123 */
+ if (c->stream->single_frame && c->data_count > c->cur_frame_bytes && c->cur_frame_bytes > 0) {
+ close_connection(c);
+ }
break;
case HTTPSTATE_RECEIVE_DATA:
/* no need to read if no events */
break;
}
- if (c->switch_feed_streams[i] >= 0 && c->switch_feed_streams[i] != c->feed_streams[i])
+ if (c->switch_feed_streams[i] >= 0 &&
+ c->switch_feed_streams[i] != c->feed_streams[i]) {
action_required = 1;
+ }
}
return action_required;
}
acl = av_mallocz(sizeof(FFServerIPAddressACL));
+ if (!acl) {
+ fclose(f);
+ return NULL;
+ }
/* Build ACL */
while (fgets(line, sizeof(line), f)) {
if (stream->dynamic_acl[0]) {
acl = parse_dynamic_acl(stream, c);
-
ret = validate_acl_list(acl, c);
-
free_acl_list(acl);
}
}
/* set buffer size */
- if (buf_size > 0) ffio_set_buf_size(s->pb, buf_size);
+ if (buf_size > 0) {
+ ret = ffio_set_buf_size(s->pb, buf_size);
+ if (ret < 0) {
+ http_log("Failed to set buffer size\n");
+ return ret;
+ }
+ }
s->flags |= AVFMT_FLAG_GENPTS;
c->fmt_in = s;
frame_bytes = c->cur_frame_bytes;
if (frame_bytes <= 0)
return c->cur_pts;
- 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;
- }
+
+ 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;
}
switch(c->state) {
case HTTPSTATE_SEND_DATA_HEADER:
ctx = avformat_alloc_context();
+ if (!ctx)
+ return AVERROR(ENOMEM);
c->fmt_ctx = *ctx;
av_freep(&ctx);
av_dict_copy(&(c->fmt_ctx.metadata), c->stream->metadata, 0);
c->fmt_ctx.streams = av_mallocz_array(c->stream->nb_streams,
sizeof(AVStream *));
+ if (!c->fmt_ctx.streams)
+ return AVERROR(ENOMEM);
for(i=0;i<c->stream->nb_streams;i++) {
AVStream *src;
c->fmt_ctx.streams[i] = av_mallocz(sizeof(AVStream));
+
/* if file or feed, then just take streams from FFServerStream struct */
if (!c->stream->feed ||
c->stream->feed == c->stream)
ffm file, so must wait for more data */
c->state = HTTPSTATE_WAIT_FEED;
return 1; /* state changed */
- } else if (ret == AVERROR(EAGAIN)) {
+ }
+ if (ret == AVERROR(EAGAIN)) {
/* input not ready, come back later */
return 0;
+ }
+ if (c->stream->loop) {
+ avformat_close_input(&c->fmt_in);
+ if (open_input_stream(c, "") < 0)
+ goto no_loop;
+ goto redo;
} else {
- if (c->stream->loop) {
- avformat_close_input(&c->fmt_in);
- if (open_input_stream(c, "") < 0)
- goto no_loop;
- goto redo;
- } else {
no_loop:
/* must send trailer now because EOF or error */
c->state = HTTPSTATE_SEND_DATA_TRAILER;
- }
}
} else {
int source_index = pkt.stream_index;
avc->streams[i]->codec = stream->streams[i]->codec;
}
*pbuffer = av_mallocz(2048);
+ if (!*pbuffer)
+ goto sdp_done;
av_sdp_create(&avc, 1, *pbuffer, 2048);
sdp_done:
return NULL;
if (copy) {
fst->codec = avcodec_alloc_context3(codec->codec);
+ if (!fst->codec) {
+ av_free(fst);
+ return NULL;
+ }
avcodec_copy_context(fst->codec, codec);
} else {
/* live streams must use the actual feed's codec since it may be
if (avformat_open_input(&s, feed->feed_filename, NULL, NULL) >= 0) {
/* set buffer size */
- ffio_set_buf_size(s->pb, FFM_PACKET_SIZE);
+ int ret = ffio_set_buf_size(s->pb, FFM_PACKET_SIZE);
+ if (ret < 0) {
+ http_log("Failed to set buffer size\n");
+ exit(1);
+ }
+
/* Now see if it matches */
if (s->nb_streams == feed->nb_streams) {
matches = 1;
if (avio_check(feed->feed_filename, AVIO_FLAG_WRITE) <= 0) {
AVFormatContext *s = avformat_alloc_context();
+ if (!s) {
+ http_log("Failed to allocate context\n");
+ exit(1);
+ }
+
if (feed->readonly) {
http_log("Unable to create feed file '%s' as it is marked readonly\n",
feed->feed_filename);