From: Sebastien Cote <sebas642@gmail.com> To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH 1/1] libavformat/rtpenc_jpeg.c: add support for the DRI marker Date: Fri, 26 Jan 2024 11:12:53 -0700 Message-ID: <CAFY3TqJgOiUo2h3vX7NGm+aH-tFLtZ3sEBpf8ssf9=Bo5ijjDw@mail.gmail.com> (raw) This patch adds support for the DRI marker in the JPEG RTP payloader. --- libavformat/rtpenc_jpeg.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/libavformat/rtpenc_jpeg.c b/libavformat/rtpenc_jpeg.c index e4e95931f4..60f56680e2 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.34.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".
next reply other threads:[~2024-01-26 18:13 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-01-26 18:12 Sebastien Cote [this message] 2024-01-27 0:47 ` Michael Niedermayer
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='CAFY3TqJgOiUo2h3vX7NGm+aH-tFLtZ3sEBpf8ssf9=Bo5ijjDw@mail.gmail.com' \ --to=sebas642@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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