The patch that caligula sent works. I tested it on the git from yesterday and firefox is now able to read the jpg ffserver output properly with that applied. The only difference is that I added an enter on line 26 because it was two lines into one. Can it be committed now?


diff -Nrup ffmpeg-2.6.1--orig/ffserver.c ffmpeg-2.6.1/ffserver.c
--- ffmpeg-2.6.1--orig/ffserver.c    2015-03-16 20:25:48.000000000 +0100
+++ ffmpeg-2.6.1/ffserver.c    2015-04-05 02:33:53.000000000 +0200
@@ -967,6 +967,10 @@ static int handle_connection(HTTPContext
         /* 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 */
diff -Nrup ffmpeg-2.6.1--orig/ffserver_config.c ffmpeg-2.6.1/ffserver_config.c --- ffmpeg-2.6.1--orig/ffserver_config.c 2015-03-16 20:25:48.000000000 +0100
+++ ffmpeg-2.6.1/ffserver_config.c    2015-04-05 02:33:53.000000000 +0200
@@ -862,8 +862,10 @@ static int ffserver_parse_config_stream(
         } else {
             stream->stream_type = STREAM_TYPE_LIVE;
             /* 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);
             if (!stream->fmt)
                 ERROR("Unknown Format: '%s'\n", arg);
diff -Nrup ffmpeg-2.6.1--orig/ffserver_config.h ffmpeg-2.6.1/ffserver_config.h --- ffmpeg-2.6.1--orig/ffserver_config.h 2015-03-16 20:25:48.000000000 +0100
+++ ffmpeg-2.6.1/ffserver_config.h    2015-04-05 02:33:53.000000000 +0200
@@ -79,6 +79,7 @@ typedef struct FFServerStream {
     int multicast_port;           /* first port used for multicast */
     int multicast_ttl;
int loop; /* if true, send the stream in loops (only meaningful if file) */
+    char single_frame;            /* only single frame */

     /* feed specific */
int feed_opened; /* true if someone is writing to the feed */ diff -Nrup ffmpeg-2.6.1--orig/libavformat/allformats.c ffmpeg-2.6.1/libavformat/allformats.c --- ffmpeg-2.6.1--orig/libavformat/allformats.c 2015-03-16 20:25:52.000000000 +0100 +++ ffmpeg-2.6.1/libavformat/allformats.c 2015-04-05 02:33:53.000000000 +0200
@@ -273,6 +273,7 @@ void av_register_all(void)
     REGISTER_MUXER   (SEGMENT,          stream_segment);
     REGISTER_DEMUXER (SHORTEN,          shorten);
     REGISTER_DEMUXER (SIFF,             siff);
+    REGISTER_MUXER   (SINGLEJPEG,       singlejpeg);
     REGISTER_DEMUXER (SLN,              sln);
     REGISTER_DEMUXER (SMACKER,          smacker);
     REGISTER_MUXDEMUX(SMJPEG,           smjpeg);
diff -Nrup ffmpeg-2.6.1--orig/libavformat/rawenc.c ffmpeg-2.6.1/libavformat/rawenc.c --- ffmpeg-2.6.1--orig/libavformat/rawenc.c 2015-03-16 20:25:54.000000000 +0100 +++ ffmpeg-2.6.1/libavformat/rawenc.c 2015-04-05 02:33:53.000000000 +0200
@@ -250,6 +250,17 @@ AVOutputFormat ff_mjpeg_muxer = {
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
+
+AVOutputFormat ff_singlejpeg_muxer = {
+    .name              = "singlejpeg",
+    .long_name         = NULL_IF_CONFIG_SMALL("JPEG single image"),
+    .mime_type         = "image/jpeg",
+    .extensions        = "jpg,jpeg",
+    .audio_codec       = AV_CODEC_ID_NONE,
+    .video_codec       = AV_CODEC_ID_MJPEG,
+    .write_packet      = ff_raw_write_packet,
+    .flags             = AVFMT_NOTIMESTAMPS,
+};
 #endif

 #if CONFIG_MLP_MUXER
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to