[FFmpeg-devel] [PATCH 4/4] avformat/mxfenc: allow muxing prores
Baptiste Coudurier
baptiste.coudurier at gmail.com
Thu Dec 6 01:03:10 EET 2018
Hi Paul
On Wed, Dec 5, 2018 at 9:52 AM Paul B Mahol <onemda at gmail.com> wrote:
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
> libavformat/mxfenc.c | 49 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 49 insertions(+)
>
> diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
> index 3549b4137d..e481b19ff3 100644
> --- a/libavformat/mxfenc.c
> +++ b/libavformat/mxfenc.c
> @@ -146,6 +146,7 @@ enum ULIndex {
> INDEX_JPEG2000,
> INDEX_H264,
> INDEX_S436M,
> + INDEX_PRORES,
> };
>
> static const struct {
> @@ -159,6 +160,7 @@ static const struct {
> { AV_CODEC_ID_DNXHD, INDEX_DNXHD },
> { AV_CODEC_ID_JPEG2000, INDEX_JPEG2000 },
> { AV_CODEC_ID_H264, INDEX_H264 },
> + { AV_CODEC_ID_PRORES, INDEX_PRORES },
> { AV_CODEC_ID_NONE }
> };
>
> @@ -314,6 +316,11 @@ static const MXFContainerEssenceEntry
> mxf_essence_container_uls[] = {
> {
> 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x17,0x01,0x02,0x00
> },
> {
> 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x01,0x5C,0x00
> },
> mxf_write_s436m_anc_desc },
> + // ProRes
> + { {
> 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0d,0x0d,0x01,0x03,0x01,0x02,0x1c,0x01,0x00
> },
> + {
> 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x17,0x00
> },
> + {
> 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0d,0x04,0x01,0x02,0x02,0x03,0x06,0x03,0x00
> },
> + mxf_write_cdci_desc },
> { {
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
> },
> {
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
> },
> {
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
> },
> @@ -1945,6 +1952,43 @@ static int mxf_write_partition(AVFormatContext *s,
> int bodysid,
> return 0;
> }
>
> +static const struct {
> + int profile;
> + UID codec_ul;
> +} mxf_prores_codec_uls[] = {
> + { FF_PROFILE_PRORES_PROXY, {
> 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0d,0x04,0x01,0x02,0x02,0x03,0x06,0x01,0x00
> } },
> + { FF_PROFILE_PRORES_LT, {
> 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0d,0x04,0x01,0x02,0x02,0x03,0x06,0x02,0x00
> } },
> + { FF_PROFILE_PRORES_STANDARD, {
> 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0d,0x04,0x01,0x02,0x02,0x03,0x06,0x03,0x00
> } },
> + { FF_PROFILE_PRORES_HQ, {
> 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0d,0x04,0x01,0x02,0x02,0x03,0x06,0x04,0x00
> } },
> + { FF_PROFILE_PRORES_4444, {
> 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0d,0x04,0x01,0x02,0x02,0x03,0x06,0x05,0x00
> } },
> + { FF_PROFILE_PRORES_XQ, {
> 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0d,0x04,0x01,0x02,0x02,0x03,0x06,0x06,0x00
> } },
> +};
> +
> +static int mxf_parse_prores_frame(AVFormatContext *s, AVStream *st,
> AVPacket *pkt)
> +{
> + MXFContext *mxf = s->priv_data;
> + MXFStreamContext *sc = st->priv_data;
> + int i, profile;
> +
> + if (mxf->header_written)
> + return 1;
> +
> + sc->codec_ul = NULL;
> + profile = st->codecpar->profile;
>
We should fetch the profile from the bitstream.
--
Baptiste Coudurier
More information about the ffmpeg-devel
mailing list