aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/mxfenc.c
diff options
context:
space:
mode:
authorJason Stevens <jay@wizardofthenet.com>2018-09-08 06:26:31 -0700
committerCarl Eugen Hoyos <ceffmpeg@gmail.com>2018-09-10 23:17:54 +0200
commit5632044939910de1ededcd897777bde00cd32ecc (patch)
treedb6acfa6c34d2b3ddcf71a2ff3dff04711581b0c /libavformat/mxfenc.c
parent69f1853a2831addd662041ceb2d90df355b0e60a (diff)
downloadffmpeg-5632044939910de1ededcd897777bde00cd32ecc.tar.gz
libavformat/mxfenc: add missing dnxhr mxfcontainer essence ULs
Add missing dnxhr mxf container essence ULs to the mxf encoder. This fixes dnxhr mxf files being quarantined by Avid Media Composer. Signed-off-by: Jason Stevens <jay@wizardofthenet.com> Reviewed-by: Baptiste Coudurier
Diffstat (limited to 'libavformat/mxfenc.c')
-rw-r--r--libavformat/mxfenc.c53
1 files changed, 52 insertions, 1 deletions
diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
index 7f629dbe53..66814ef6a1 100644
--- a/libavformat/mxfenc.c
+++ b/libavformat/mxfenc.c
@@ -146,6 +146,11 @@ enum ULIndex {
INDEX_DNXHD_720p_8bit_HIGH,
INDEX_DNXHD_720p_8bit_MEDIUM,
INDEX_DNXHD_720p_8bit_LOW,
+ INDEX_DNXHR_LB,
+ INDEX_DNXHR_SQ,
+ INDEX_DNXHR_HQ,
+ INDEX_DNXHR_HQX,
+ INDEX_DNXHR_444,
INDEX_JPEG2000,
INDEX_H264,
};
@@ -345,6 +350,31 @@ static const MXFContainerEssenceEntry mxf_essence_container_uls[] = {
{ 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
{ 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x13,0x00,0x00 },
mxf_write_cdci_desc },
+ // DNxHR LB - CID 1274
+ { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0d,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
+ { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
+ { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x28,0x00,0x00 },
+ mxf_write_cdci_desc },
+ // DNxHR SQ - CID 1273
+ { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0d,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
+ { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
+ { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x27,0x00,0x00 },
+ mxf_write_cdci_desc },
+ // DNxHR HQ - CID 1272
+ { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0d,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
+ { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
+ { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x26,0x00,0x00 },
+ mxf_write_cdci_desc },
+ // DNxHR HQX - CID 1271
+ { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0d,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
+ { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
+ { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x25,0x00,0x00 },
+ mxf_write_cdci_desc },
+ // DNxHR 444 - CID 1270
+ { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0d,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
+ { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
+ { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x24,0x00,0x00 },
+ mxf_write_cdci_desc },
// JPEG2000
{ { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x0c,0x01,0x00 },
{ 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x08,0x00 },
@@ -1959,7 +1989,11 @@ AVPacket *pkt)
header_cid = pkt->data + 0x28;
cid = header_cid[0] << 24 | header_cid[1] << 16 | header_cid[2] << 8 | header_cid[3];
- if ((frame_size = avpriv_dnxhd_get_frame_size(cid)) < 0)
+ if ((frame_size = avpriv_dnxhd_get_frame_size(cid)) == DNXHD_VARIABLE) {
+ frame_size = avpriv_dnxhd_get_hr_frame_size(cid, st->codecpar->width, st->codecpar->height);
+ }
+
+ if (frame_size < 0)
return -1;
if ((sc->interlaced = avpriv_dnxhd_get_interlaced(cid)) < 0)
return AVERROR_INVALIDDATA;
@@ -1998,6 +2032,23 @@ AVPacket *pkt)
case 1253:
sc->index = INDEX_DNXHD_720p_8bit_LOW;
break;
+ case 1274:
+ sc->index = INDEX_DNXHR_LB;
+ break;
+ case 1273:
+ sc->index = INDEX_DNXHR_SQ;
+ break;
+ case 1272:
+ sc->index = INDEX_DNXHR_HQ;
+ break;
+ case 1271:
+ sc->index = INDEX_DNXHR_HQX;
+ sc->component_depth = st->codecpar->bits_per_raw_sample;
+ break;
+ case 1270:
+ sc->index = INDEX_DNXHR_444;
+ sc->component_depth = st->codecpar->bits_per_raw_sample;
+ break;
default:
return -1;
}