X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fmxf.c;h=029486f6d85b4acab4c5dbf88dad654a4458e196;hb=fec2836483c15f169c3f8be39347978f1698ae8d;hp=05cb173ac39f7acb41b2aef54fe47711af353a23;hpb=5ac4d7689d753147f89b3322593d6998e32d27c4;p=ffmpeg diff --git a/libavformat/mxf.c b/libavformat/mxf.c index 05cb173ac39..029486f6d85 100644 --- a/libavformat/mxf.c +++ b/libavformat/mxf.c @@ -2,32 +2,33 @@ * MXF * Copyright (c) 2006 SmartJog S.A., Baptiste Coudurier * - * This file is part of FFmpeg. + * This file is part of Libav. * - * FFmpeg is free software; you can redistribute it and/or + * Libav is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * - * FFmpeg is distributed in the hope that it will be useful, + * Libav is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software + * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/common.h" #include "mxf.h" /** * SMPTE RP224 http://www.smpte-ra.org/mdd/index.html */ const MXFCodecUL ff_mxf_data_definition_uls[] = { - { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x01,0x03,0x02,0x02,0x01,0x00,0x00,0x00 }, 13, CODEC_TYPE_VIDEO }, - { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x01,0x03,0x02,0x02,0x02,0x00,0x00,0x00 }, 13, CODEC_TYPE_AUDIO }, - { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, 0, CODEC_TYPE_DATA }, + { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x01,0x03,0x02,0x02,0x01,0x00,0x00,0x00 }, 13, AVMEDIA_TYPE_VIDEO }, + { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x01,0x03,0x02,0x02,0x02,0x00,0x00,0x00 }, 13, AVMEDIA_TYPE_AUDIO }, + { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, 0, AVMEDIA_TYPE_DATA }, }; const MXFCodecUL ff_mxf_codec_uls[] = { @@ -51,3 +52,47 @@ const MXFCodecUL ff_mxf_codec_uls[] = { //{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x02,0x03,0x02,0x1C,0x00 }, 15, CODEC_ID_DOLBY_E }, /* Dolby-E */ { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, 0, CODEC_ID_NONE }, }; + +static const struct { + enum PixelFormat pix_fmt; + const char data[16]; +} ff_mxf_pixel_layouts[] = { + /** + * See SMPTE 377M E.2.46 + * + * Note: Only RGB, palette based and "abnormal" YUV pixel formats like 4:2:2:4 go here. + * For regular YUV, use CDCIPictureEssenceDescriptor. + * + * Note: Do not use these for encoding descriptors for little-endian formats until we + * get samples or official word from SMPTE on how/if those can be encoded. + */ + {PIX_FMT_ABGR, {'A', 8, 'B', 8, 'G', 8, 'R', 8 }}, + {PIX_FMT_ARGB, {'A', 8, 'R', 8, 'G', 8, 'B', 8 }}, + {PIX_FMT_BGR24, {'B', 8, 'G', 8, 'R', 8 }}, + {PIX_FMT_BGRA, {'B', 8, 'G', 8, 'R', 8, 'A', 8 }}, + {PIX_FMT_RGB24, {'R', 8, 'G', 8, 'B', 8 }}, + {PIX_FMT_RGB444BE,{'F', 4, 'R', 4, 'G', 4, 'B', 4 }}, + {PIX_FMT_RGB48BE, {'R', 8, 'r', 8, 'G', 8, 'g', 8, 'B', 8, 'b', 8 }}, + {PIX_FMT_RGB48BE, {'R', 16, 'G', 16, 'B', 16 }}, + {PIX_FMT_RGB48LE, {'r', 8, 'R', 8, 'g', 8, 'G', 8, 'b', 8, 'B', 8 }}, + {PIX_FMT_RGB555BE,{'F', 1, 'R', 5, 'G', 5, 'B', 5 }}, + {PIX_FMT_RGB565BE,{'R', 5, 'G', 6, 'B', 5 }}, + {PIX_FMT_RGBA, {'R', 8, 'G', 8, 'B', 8, 'A', 8 }}, + {PIX_FMT_PAL8, {'P', 8 }}, +}; + +static const int num_pixel_layouts = FF_ARRAY_ELEMS(ff_mxf_pixel_layouts); + +int ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum PixelFormat *pix_fmt) +{ + int x; + + for(x = 0; x < num_pixel_layouts; x++) { + if (!memcmp(pixel_layout, ff_mxf_pixel_layouts[x].data, 16)) { + *pix_fmt = ff_mxf_pixel_layouts[x].pix_fmt; + return 0; + } + } + + return -1; +}