From patchwork Sat Jan 27 05:09:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastien Cote X-Patchwork-Id: 45858 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:8786:b0:199:de12:6fa6 with SMTP id ph6csp384633pzb; Fri, 26 Jan 2024 21:11:26 -0800 (PST) X-Google-Smtp-Source: AGHT+IHWVy1Mf9hzzh62EU4VVCw9GAlzSdgjxA8TBazDXz8OO4kgkOqr5iTLhUOSPRYsKYLtEkr4 X-Received: by 2002:a19:2d51:0:b0:50e:7fb1:6456 with SMTP id t17-20020a192d51000000b0050e7fb16456mr1011765lft.4.1706332286213; Fri, 26 Jan 2024 21:11:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1706332286; cv=none; d=google.com; s=arc-20160816; b=DZlYOmtxh5CqtzRB3fcs01MxcidjxbosziLg+m+ts6WsdIWFa7VBDTFb+o7wXZoDlY AJwi7BYSrFg3pDccofPovBBht8KdcPq3t7SPk85qcUmAUWF3f8uuZG47J5XH9A2beFWq uSstUSIztQlsabNDifNyxF0PGTHZgVIy/QHsGPMibTKdTkToctpT5Ocz49aRJ6ONryoa NQ9i90if2ItD3RXF8voVTzBK1V+v8KQ2gX6irpsFgJVnmTzTvNtTRrhBBa46B7LAQQNX SNZ/7d3EXMDvi/8sBPUGfM2E6YdDlxUxAj4BkyALIUxhBbYq0aiHDuHSQT/smISCPNW9 xuyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=ZWgfGpNMr5awfLxzRq3DEAyGGwWmHOQ77atx8XYy7D4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=iSjIdEkRmBvYH7szjs2bF2yzBF1ahSMOELiffh6rbrK37MQP8SD878eqodWkQvX9Lu Fa9/QxmTCiFUgMxOulQHL1ueP2flWfkGpJO+rbN/O662v1P+gDb6A9pfdX0whn9X1Lxy UcOZHGZcd0rTs7vbWD7RiPfZCPjnuVwvJfqKphIZ+nQ1AQ9fduRf3xHmKAXOWcteOQ55 miuXVera7YsLp104Gzs+WHFONVSHfJU8AWUQCDUXxN78mPcbcHPuskb8m29uHPiwrPvY hcK2bW2YIVy0um5j/+eLpszoYhEmJ4Dp72ROUD8g0qisd8oP1v2IcnyfRvJePdZk8I/O 7YCA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=SQzeOum6; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l22-20020a1709067d5600b00a341e30b009si1212028ejp.1020.2024.01.26.21.11.25; Fri, 26 Jan 2024 21:11:26 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=SQzeOum6; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 665F168D157; Sat, 27 Jan 2024 07:11:22 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f178.google.com (mail-oi1-f178.google.com [209.85.167.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AD12168D13F for ; Sat, 27 Jan 2024 07:11:15 +0200 (EET) Received: by mail-oi1-f178.google.com with SMTP id 5614622812f47-3bb9d54575cso877963b6e.2 for ; Fri, 26 Jan 2024 21:11:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706332273; x=1706937073; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=L7b+wa2IoCA6ltF5NYmsb71wd+iwunkfNQ5+DqMSq+8=; b=SQzeOum62rwShbbyJVZqYH05RvF9L0KBYhh7GmQJbO+xxHaQ5PUA45/hTDxx7QMXaV nWbu3eAWFxEjZkDnKsFmJwZF9xKme+vZWGhn1QHiX+qDN15MNCuiXaBowfPUNC459IXV m3jA9ENQgrRbrMTL09JQUe3dEftm7PPQtFjDP6SBpxCRc8HhNTTQ/WQwqaCbpS5/YRsX qgqe0Mx63PeiM7gVDaZu1CFx5h/i9epJSRKfaNUxINdB4fp6gpGIWLXePF8ci4IlnGwp E8JTTs85wFg/8zH9fcmra5Ixls4IfcZbdNppfXb/mYiLptPLxWYXEwvvSd0CN7Co2cNM GLHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706332273; x=1706937073; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=L7b+wa2IoCA6ltF5NYmsb71wd+iwunkfNQ5+DqMSq+8=; b=F3s45ITBq+BPx/O2YEDtYAs45xJ0VtJZv8YFykHzw7xQOI344QbmvafYjHKUSiahoM VSZM80vPJhIMWIGrHk7mJQU9YcEpI3VtAbrh4Bg1iEVdWOC/BNqeNtf5EhZ8SjuV/zmr mErClgRtkdQ4PcZNHkWedzATG8bu2n/HejvcDRHCiZzyIgbFsK4f6h5nHkceaxERYIae Wbx38k7kLF+1wn6vfCktVwgVbsAIci/NTVBg4+g+87dDINJ2N6p1ckxmfEe+w0xq6IG8 77E0MAz/ByruSZxNSmXsuu2dvRKrCbxl2+oDRGtcjjjXD9xuCdXlO53FyjcTZa5K5F8F SG0w== X-Gm-Message-State: AOJu0YzkCV7rftJkK2tozAozyjqyPL+4nfEnOSlSZ+BPJNY0Yx645rjP D5rT0HEcOPe9VPqG/TnuEmh43Aafs5L5Tfn7Wa+m3QgAPrgb7iRzQVqCDt6u X-Received: by 2002:a05:6808:1701:b0:3bd:c0e1:cc4e with SMTP id bc1-20020a056808170100b003bdc0e1cc4emr1283612oib.22.1706332273274; Fri, 26 Jan 2024 21:11:13 -0800 (PST) Received: from ramblenride.. ([2604:3d09:f83:e00:7182:4e23:17b3:2fe4]) by smtp.gmail.com with ESMTPSA id 9-20020a630009000000b005ccf10e73b8sm1719058pga.91.2024.01.26.21.11.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 21:11:12 -0800 (PST) From: Sebastien Cote To: ffmpeg-devel@ffmpeg.org Date: Fri, 26 Jan 2024 22:09:44 -0700 Message-Id: <20240127050944.26604-1-sebas642@gmail.com> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/1] libavformat/rtpenc_jpeg.c: add support for the DRI marker X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: IM1uT4r+Eld0 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 --- 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);