Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH v2 1/1] libavformat/rtpenc_jpeg.c: add support for the DRI marker
@ 2024-01-27  5:09 Sebastien Cote
  0 siblings, 0 replies; only message in thread
From: Sebastien Cote @ 2024-01-27  5:09 UTC (permalink / raw)
  To: ffmpeg-devel

This patch adds support for the DRI marker in the JPEG RTP encoder.
Apologies for the bad line breaks in the previous patch. The production line for this patch is 100% Linux.

Signed-off-by: Sebastien Cote <sebas642@gmail.com>
---
 libavformat/rtpenc_jpeg.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/libavformat/rtpenc_jpeg.c b/libavformat/rtpenc_jpeg.c
index e4e95931f4..de2148a29d 100644
--- a/libavformat/rtpenc_jpeg.c
+++ b/libavformat/rtpenc_jpeg.c
@@ -33,6 +33,7 @@ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size)
     uint8_t type = 2; /* initialized non-0/1 value for RTP/JPEG type check*/
     uint8_t w, h;
     uint8_t *p;
+    uint16_t rst_marker_interval = 0;
     int off = 0; /* fragment offset of the current JPEG frame */
     int len;
     int i;
@@ -155,6 +156,22 @@ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size)
                     dht_size = 0;
                     continue;
             }
+        } else if (buf[i + 1] == DRI) {
+            uint16_t dri_size = 0;
+            if (i + 5 > size) {
+                av_log(s1, AV_LOG_ERROR, "Too short JPEG header. Aborted!\n");
+                return;
+            }
+
+            dri_size = AV_RB16(&buf[i + 2]);
+            rst_marker_interval = AV_RB16(&buf[i + 4]);
+
+            if (i + 1 + dri_size > size) {
+                av_log(s1, AV_LOG_ERROR, "Too short JPEG header. Aborted!\n");
+                return;
+            }
+
+            i += 1 + dri_size;
         } else if (buf[i + 1] == SOS) {
             /* SOS is last marker in the header */
             i += AV_RB16(&buf[i + 2]) + 2;
@@ -196,10 +213,16 @@ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size)
         }
     }
 
+    if (rst_marker_interval > 0)
+        type += 64;
+
     p = s->buf_ptr;
     while (size > 0) {
         int hdr_size = 8;
 
+        if (rst_marker_interval > 0)
+            hdr_size += 4;
+
         if (off == 0 && nb_qtables)
             hdr_size += 4 + 64 * nb_qtables;
 
@@ -214,6 +237,11 @@ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size)
         bytestream_put_byte(&p, w);
         bytestream_put_byte(&p, h);
 
+        if (rst_marker_interval > 0) {
+            bytestream_put_be16(&p, rst_marker_interval);
+            bytestream_put_be16(&p, 0xFFFF);
+        }
+
         if (off == 0 && nb_qtables) {
             /* set quantization tables header */
             bytestream_put_byte(&p, 0);
-- 
2.40.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-01-27  5:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-27  5:09 [FFmpeg-devel] [PATCH v2 1/1] libavformat/rtpenc_jpeg.c: add support for the DRI marker Sebastien Cote

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git