Fixes Ticket4218 Based on patch by: Otávio Ribeiro Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.7
| @@ -967,6 +967,10 @@ static int handle_connection(HTTPContext *c) | |||||
| /* close connection if trailer sent */ | /* close connection if trailer sent */ | ||||
| if (c->state == HTTPSTATE_SEND_DATA_TRAILER) | if (c->state == HTTPSTATE_SEND_DATA_TRAILER) | ||||
| return -1; | 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; | break; | ||||
| case HTTPSTATE_RECEIVE_DATA: | case HTTPSTATE_RECEIVE_DATA: | ||||
| /* no need to read if no events */ | /* no need to read if no events */ | ||||
| @@ -862,8 +862,10 @@ static int ffserver_parse_config_stream(FFServerConfig *config, const char *cmd, | |||||
| } else { | } else { | ||||
| stream->stream_type = STREAM_TYPE_LIVE; | stream->stream_type = STREAM_TYPE_LIVE; | ||||
| /* JPEG cannot be used here, so use single frame MJPEG */ | /* JPEG cannot be used here, so use single frame MJPEG */ | ||||
| if (!strcmp(arg, "jpeg")) | |||||
| strcpy(arg, "mjpeg"); | |||||
| if (!strcmp(arg, "jpeg")) { | |||||
| strcpy(arg, "singlejpeg"); | |||||
| stream->single_frame=1; | |||||
| } | |||||
| stream->fmt = ffserver_guess_format(arg, NULL, NULL); | stream->fmt = ffserver_guess_format(arg, NULL, NULL); | ||||
| if (!stream->fmt) | if (!stream->fmt) | ||||
| ERROR("Unknown Format: '%s'\n", arg); | ERROR("Unknown Format: '%s'\n", arg); | ||||
| @@ -79,6 +79,7 @@ typedef struct FFServerStream { | |||||
| int multicast_port; /* first port used for multicast */ | int multicast_port; /* first port used for multicast */ | ||||
| int multicast_ttl; | int multicast_ttl; | ||||
| int loop; /* if true, send the stream in loops (only meaningful if file) */ | int loop; /* if true, send the stream in loops (only meaningful if file) */ | ||||
| char single_frame; /* only single frame */ | |||||
| /* feed specific */ | /* feed specific */ | ||||
| int feed_opened; /* true if someone is writing to the feed */ | int feed_opened; /* true if someone is writing to the feed */ | ||||