From: "Cédric Le Barz" <clebarz@ektacom.com>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH] MXF - Add jpeg2000 subdescriptor - Sponsored by INA
Date: Mon, 3 Apr 2023 10:08:25 +0200
Message-ID: <7a09e1d3-8d2e-7318-dab0-776247171251@ektacom.com> (raw)
In-Reply-To: <20230331214701.GC1164690@pb2>
[-- Attachment #1: Type: text/plain, Size: 2071 bytes --]
Hi,
I've attached the patch to this mail, in order to solve newlines
insertion issue.
Regards,
Cédric
Le 31/03/2023 à 23:47, Michael Niedermayer a écrit :
> On Wed, Mar 29, 2023 at 10:54:39PM +0200, Cédric Le Barz wrote:
>> Add jpeg2000 subdescriptor in MXF file.
>>
>> Signed-off-by: Cedric Le Barz <clebarz@ektacom.com>
>> ---
>> ffmpeg/libavformat/mxf.h | 1 +
>> ffmpeg/libavformat/mxfenc.c | 74 ++++++++++++++++++++++++++++++++++++-
>> 2 files changed, 74 insertions(+), 1 deletion(-)
>>
>> diff --git a/ffmpeg/libavformat/mxf.h b/ffmpeg/libavformat/mxf.h
>> index 2561605..7dd1681 100644
>> --- a/ffmpeg/libavformat/mxf.h
>> +++ b/ffmpeg/libavformat/mxf.h
>> @@ -55,6 +55,7 @@ enum MXFMetadataSetType {
>> SoundfieldGroupLabelSubDescriptor,
>> GroupOfSoundfieldGroupsLabelSubDescriptor,
>> FFV1SubDescriptor,
>> + JPEG2000SubDescriptor,
>> };
>> enum MXFFrameLayout {
>> diff --git a/ffmpeg/libavformat/mxfenc.c b/ffmpeg/libavformat/mxfenc.c
>> index a29d678..3bdf90a 100644
>> --- a/ffmpeg/libavformat/mxfenc.c
>> +++ b/ffmpeg/libavformat/mxfenc.c
>> @@ -390,6 +390,20 @@ static const MXFLocalTagPair mxf_local_tag_batch[]
> = {
>> { 0x8302, FF_MXF_MasteringDisplayWhitePointChromaticity },
>> { 0x8303, FF_MXF_MasteringDisplayMaximumLuminance },
>> { 0x8304, FF_MXF_MasteringDisplayMinimumLuminance },
>> + // ff_mxf_jpeg2000_local_tags
>> + { 0x8400,
> {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x09,0x06,0x01,0x01,0x04,0x06,0x10,0x0
> 0,0x00}},
>> /* Sub Descriptors / Opt Ordered array of strong references to sub
>> descriptor sets */
> your patch is corrupted by newlines, i suggest you check word/line wraping
> settings or attach it instead
>
> thx
>
> [...]
> --
> Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> The real ebay dictionary, page 1
> "Used only once" - "Some unspecified defect prevented a second use"
> "In good condition" - "Can be repaird by experienced expert"
> "As is" - "You wouldnt want it even if you were payed for it, if you knew
> ..."
[-- Attachment #2: 0001-Add-jpeg2000-subdescriptor.eml --]
[-- Type: message/rfc822, Size: 7300 bytes --]
From: Cedric Le Barz <clebarz@ektacom.com>
To: ffmpeg-devel@ffmpeg.org
Subject: [PATCH] Add jpeg2000 subdescriptor.
Date: Wed, 29 Mar 2023 22:46:40 +0200
Signed-off-by: Cedric Le Barz <clebarz@ektacom.com>
---
ffmpeg/libavformat/mxf.h | 1 +
ffmpeg/libavformat/mxfenc.c | 74 ++++++++++++++++++++++++++++++++++++-
2 files changed, 74 insertions(+), 1 deletion(-)
diff --git a/ffmpeg/libavformat/mxf.h b/ffmpeg/libavformat/mxf.h
index 2561605..7dd1681 100644
--- a/ffmpeg/libavformat/mxf.h
+++ b/ffmpeg/libavformat/mxf.h
@@ -55,6 +55,7 @@ enum MXFMetadataSetType {
SoundfieldGroupLabelSubDescriptor,
GroupOfSoundfieldGroupsLabelSubDescriptor,
FFV1SubDescriptor,
+ JPEG2000SubDescriptor,
};
enum MXFFrameLayout {
diff --git a/ffmpeg/libavformat/mxfenc.c b/ffmpeg/libavformat/mxfenc.c
index a29d678..3bdf90a 100644
--- a/ffmpeg/libavformat/mxfenc.c
+++ b/ffmpeg/libavformat/mxfenc.c
@@ -390,6 +390,20 @@ static const MXFLocalTagPair mxf_local_tag_batch[] = {
{ 0x8302, FF_MXF_MasteringDisplayWhitePointChromaticity },
{ 0x8303, FF_MXF_MasteringDisplayMaximumLuminance },
{ 0x8304, FF_MXF_MasteringDisplayMinimumLuminance },
+ // ff_mxf_jpeg2000_local_tags
+ { 0x8400, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x09,0x06,0x01,0x01,0x04,0x06,0x10,0x00,0x00}}, /* Sub Descriptors / Opt Ordered array of strong references to sub descriptor sets */
+ { 0x8401, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x01,0x00,0x00,0x00}}, /* 2 bytes : An enumerated value that defines the decoder capabilities. */
+ { 0x8402, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x02,0x00,0x00,0x00}}, /* 4 bytes : Width of the reference grid */
+ { 0x8403, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x03,0x00,0x00,0x00}}, /* 4 bytes : Height of the reference grid */
+ { 0x8404, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x04,0x00,0x00,0x00}}, /* 4 bytes : Horizontal offset from the origin of the reference grid to the left side of the image area */
+ { 0x8405, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x05,0x00,0x00,0x00}}, /* 4 bytes : Vertical offset from the origin of the reference grid to the left side of the image area */
+ { 0x8406, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x06,0x00,0x00,0x00}}, /* 4 bytes : Width of one reference tile with respect to the reference grid, */
+ { 0x8407, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x07,0x00,0x00,0x00}}, /* 4 bytes : Height of one reference tile with respect to the reference grid, */
+ { 0x8408, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x08,0x00,0x00,0x00}}, /* 4 bytes : Horizontal offset from the origin of the reference grid to the left side of the first tile */
+ { 0x8409, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x09,0x00,0x00,0x00}}, /* 4 bytes : Vertical offset from the origin of the reference grid to the left side of the first tile */
+ { 0x840A, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x0A,0x00,0x00,0x00}}, /* 2 bytes : The number of components in the picture */
+ { 0x840B, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x0B,0x00,0x00,0x00}}, /* 8+3n bytes : Array of picture components where each component comprises 3 bytes named Ssizi, XRSizi, YRSizi The array of 3-byte groups is preceded by the array header comprising a 4-byte value of the number of components followed by a 4-byte value of 3. */
+ { 0x840C, {0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0a,0x04,0x01,0x06,0x03,0x0E,0x00,0x00,0x00}}, /* The nature and order of the image components in the compressed domain as carried in the J2C codestream.. */
};
#define MXF_NUM_TAGS FF_ARRAY_ELEMS(mxf_local_tag_batch)
@@ -1095,8 +1109,8 @@ static const UID mxf_wav_descriptor_key = { 0x06,0x0E,0x2B,0x34,0x02,0x53,
static const UID mxf_aes3_descriptor_key = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x47,0x00 };
static const UID mxf_cdci_descriptor_key = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0D,0x01,0x01,0x01,0x01,0x01,0x28,0x00 };
static const UID mxf_generic_sound_descriptor_key = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0D,0x01,0x01,0x01,0x01,0x01,0x42,0x00 };
-
static const UID mxf_avc_subdescriptor_key = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x6E,0x00 };
+static const UID mxf_jpeg2000_subdescriptor_key = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0D,0x01,0x01,0x01,0x01,0x01,0x5A,00 };
static inline uint16_t rescale_mastering_chroma(AVRational q)
{
@@ -1365,6 +1379,60 @@ static void mxf_write_avc_subdesc(AVFormatContext *s, AVStream *st)
mxf_update_klv_size(s->pb, pos);
}
+static void mxf_write_jpeg2000_subdesc(AVFormatContext *s, AVStream *st)
+{
+ AVIOContext *pb = s->pb;
+ int64_t pos;
+
+ int component_count = av_pix_fmt_count_planes(st->codecpar->format);
+
+ avio_write(pb, mxf_jpeg2000_subdescriptor_key, 16);
+ klv_encode_ber4_length(pb, 0);
+ pos = avio_tell(pb);
+
+ mxf_write_local_tag(s, 16, 0x3C0A);
+ mxf_write_uuid(pb, JPEG2000SubDescriptor, 0);
+
+ mxf_write_local_tag(s, 2, 0x8401);
+ avio_wb16(pb, 0x0000);
+ mxf_write_local_tag(s, 4, 0x8402);
+ avio_wb32(pb, st->codecpar->width);
+ mxf_write_local_tag(s, 4, 0x8403);
+ avio_wb32(pb, st->codecpar->height);
+ mxf_write_local_tag(s, 4, 0x8404);
+ avio_wb32(pb, 0);
+ mxf_write_local_tag(s, 4, 0x8405);
+ avio_wb32(pb, 0);
+ mxf_write_local_tag(s, 4, 0x8406);
+ avio_wb32(pb, st->codecpar->width);
+ mxf_write_local_tag(s, 4, 0x8407);
+ avio_wb32(pb, st->codecpar->height);
+ mxf_write_local_tag(s, 4, 0x8408);
+ avio_wb32(pb, 0);
+ mxf_write_local_tag(s, 4, 0x8409);
+ avio_wb32(pb, 0);
+ mxf_write_local_tag(s, 2, 0x840A);
+ avio_wb16(pb, component_count);
+
+ mxf_write_local_tag(s, 8 + 3*component_count, 0x840B);
+ avio_wb32(pb, component_count);
+ avio_wb32(pb, 3);
+ {
+ char _desc [3][3]= { {0x09,0x01,0x01} , {0x09,0x02,0x01} , {0x09,0x02,0x01} };
+ int comp = 0;
+ for ( comp = 0; comp< component_count ;comp++ ) {
+ avio_write(pb, _desc[comp%3] , 3);
+ }
+ }
+ mxf_write_local_tag(s, 16, 0x840C);
+ {
+ char _layout[16] = { 'Y' , '\n', 'U' , '\n', 'V' , '\n', 'F' , 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ avio_write(pb, _layout , 16);
+ }
+ mxf_update_klv_size(pb, pos);
+}
+
static void mxf_write_cdci_desc(AVFormatContext *s, AVStream *st)
{
int64_t pos = mxf_write_cdci_common(s, st, mxf_cdci_descriptor_key);
@@ -1373,6 +1441,9 @@ static void mxf_write_cdci_desc(AVFormatContext *s, AVStream *st)
if (st->codecpar->codec_id == AV_CODEC_ID_H264) {
mxf_write_avc_subdesc(s, st);
}
+ if (st->codecpar->codec_id == AV_CODEC_ID_JPEG2000) {
+ mxf_write_jpeg2000_subdesc(s, st);
+ }
}
static void mxf_write_h264_desc(AVFormatContext *s, AVStream *st)
@@ -3311,3 +3382,4 @@ const FFOutputFormat ff_mxf_opatom_muxer = {
.interleave_packet = mxf_interleave,
.p.priv_class = &mxf_opatom_muxer_class,
};
+
--
2.34.1
[-- Attachment #3: Type: text/plain, Size: 251 bytes --]
_______________________________________________
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 prev parent reply other threads:[~2023-04-03 8:08 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-29 20:54 Cédric Le Barz
2023-03-31 21:47 ` Michael Niedermayer
2023-04-03 8:08 ` Cédric Le Barz [this message]
2023-04-03 15:14 ` Michael Niedermayer
2023-04-05 13:05 ` Cédric Le Barz
2023-04-05 13:53 ` Tomas Härdin
2023-04-25 14:33 ` Cédric Le Barz
2023-04-27 12:45 ` Tomas Härdin
2023-05-02 15:43 ` Cédric Le Barz
2023-05-09 9:49 ` Tomas Härdin
2023-05-09 14:28 ` Pierre-Anthony Lemieux
2023-06-01 15:19 ` Cédric Le Barz
2023-06-04 18:24 ` Tomas Härdin
2023-09-22 9:26 ` Cédric Le Barz
2023-04-05 12:39 ` Tomas Härdin
2023-04-23 1:07 ` Pierre-Anthony Lemieux
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=7a09e1d3-8d2e-7318-dab0-776247171251@ektacom.com \
--to=clebarz@ektacom.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