Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
0aba92d4
Commit
0aba92d4
authored
Oct 28, 2018
by
Martin Vignali
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec : add prores_metadata bsf for set the color property of each prores frame
parent
936d18fb
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
240 additions
and
0 deletions
+240
-0
bitstream_filters.texi
doc/bitstream_filters.texi
+66
-0
Makefile
libavcodec/Makefile
+1
-0
bitstream_filters.c
libavcodec/bitstream_filters.c
+1
-0
prores_metadata_bsf.c
libavcodec/prores_metadata_bsf.c
+172
-0
No files found.
doc/bitstream_filters.texi
View file @
0aba92d4
...
...
@@ -530,6 +530,72 @@ ffmpeg -i INPUT -c copy -bsf noise[=1] output.mkv
@section null
This bitstream filter passes the packets through unchanged.
@section prores_metadata
Modify color property metadata embedded in prores stream.
@table @option
@item color_primaries
Set the color primaries.
Available values are:
@table @samp
@item auto
Keep the same color primaries property (default).
@item unknown
@item bt709
@item bt470bg
BT601 625
@item smpte170m
BT601 525
@item bt2020
@item smpte431
DCI P3
@item smpte432
P3 D65
@end table
@item transfer_characteristics
Set the color transfert.
Available values are:
@table @samp
@item auto
Keep the same transfer characteristics property (default).
@item unknown
@item bt709
BT 601, BT 709, BT 2020
@end table
@item matrix_coefficients
Set the matrix coefficient.
Available values are:
@table @samp
@item auto
Keep the same transfer characteristics property (default).
@item unknown
@item bt709
@item smpte170m
BT 601
@item bt2020nc
@end table
@end table
Set Rec709 colorspace for each frame of the file
@example
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov
@end example
@section remove_extra
Remove extradata from packets.
...
...
libavcodec/Makefile
View file @
0aba92d4
...
...
@@ -1081,6 +1081,7 @@ OBJS-$(CONFIG_MP3_HEADER_DECOMPRESS_BSF) += mp3_header_decompress_bsf.o \
OBJS-$(CONFIG_MPEG2_METADATA_BSF)
+=
mpeg2_metadata_bsf.o
OBJS-$(CONFIG_NOISE_BSF)
+=
noise_bsf.o
OBJS-$(CONFIG_NULL_BSF)
+=
null_bsf.o
OBJS-$(CONFIG_PRORES_METADATA_BSF)
+=
prores_metadata_bsf.o
OBJS-$(CONFIG_REMOVE_EXTRADATA_BSF)
+=
remove_extradata_bsf.o
OBJS-$(CONFIG_TEXT2MOVSUB_BSF)
+=
movsub_bsf.o
OBJS-$(CONFIG_TRACE_HEADERS_BSF)
+=
trace_headers_bsf.o
...
...
libavcodec/bitstream_filters.c
View file @
0aba92d4
...
...
@@ -47,6 +47,7 @@ extern const AVBitStreamFilter ff_mpeg4_unpack_bframes_bsf;
extern
const
AVBitStreamFilter
ff_mov2textsub_bsf
;
extern
const
AVBitStreamFilter
ff_noise_bsf
;
extern
const
AVBitStreamFilter
ff_null_bsf
;
extern
const
AVBitStreamFilter
ff_prores_metadata_bsf
;
extern
const
AVBitStreamFilter
ff_remove_extradata_bsf
;
extern
const
AVBitStreamFilter
ff_text2movsub_bsf
;
extern
const
AVBitStreamFilter
ff_trace_headers_bsf
;
...
...
libavcodec/prores_metadata_bsf.c
0 → 100644
View file @
0aba92d4
/*
* Prores Metadata bitstream filter
* Copyright (c) 2018 Jokyo Images
*
* This file is part of FFmpeg.
*
* FFmpeg 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,
* 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
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* Prores Metadata bitstream filter
* set frame colorspace property
*/
#include "libavutil/common.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/opt.h"
#include "bsf.h"
typedef
struct
ProresMetadataContext
{
const
AVClass
*
class
;
int
color_primaries
;
int
transfer_characteristics
;
int
matrix_coefficients
;
}
ProresMetadataContext
;
static
int
prores_metadata
(
AVBSFContext
*
bsf
,
AVPacket
*
pkt
)
{
ProresMetadataContext
*
ctx
=
bsf
->
priv_data
;
int
ret
=
0
;
int
buf_size
;
uint8_t
*
buf
;
ret
=
ff_bsf_get_packet_ref
(
bsf
,
pkt
);
if
(
ret
<
0
)
return
ret
;
ret
=
av_packet_make_writable
(
pkt
);
if
(
ret
<
0
)
goto
fail
;
buf
=
pkt
->
data
;
buf_size
=
pkt
->
size
;
/* check start of the prores frame */
if
(
buf_size
<
28
)
{
av_log
(
bsf
,
AV_LOG_ERROR
,
"not enough data in prores frame
\n
"
);
ret
=
AVERROR_INVALIDDATA
;
goto
fail
;
}
if
(
AV_RL32
(
buf
+
4
)
!=
AV_RL32
(
"icpf"
))
{
av_log
(
bsf
,
AV_LOG_ERROR
,
"invalid frame header
\n
"
);
ret
=
AVERROR_INVALIDDATA
;
goto
fail
;
}
if
(
AV_RB16
(
buf
+
8
)
<
28
)
{
av_log
(
bsf
,
AV_LOG_ERROR
,
"invalid frame header size
\n
"
);
ret
=
AVERROR_INVALIDDATA
;
goto
fail
;
}
/* set the new values */
if
(
ctx
->
color_primaries
!=
-
1
)
buf
[
8
+
14
]
=
ctx
->
color_primaries
;
if
(
ctx
->
transfer_characteristics
!=
-
1
)
buf
[
8
+
15
]
=
ctx
->
transfer_characteristics
;
if
(
ctx
->
matrix_coefficients
!=
-
1
)
buf
[
8
+
16
]
=
ctx
->
matrix_coefficients
;
fail:
if
(
ret
<
0
)
av_packet_unref
(
pkt
);
return
ret
;
}
static
const
enum
AVCodecID
codec_ids
[]
=
{
AV_CODEC_ID_PRORES
,
AV_CODEC_ID_NONE
,
};
static
int
prores_metadata_init
(
AVBSFContext
*
bsf
)
{
ProresMetadataContext
*
ctx
=
bsf
->
priv_data
;
/*! check options */
switch
(
ctx
->
color_primaries
)
{
case
-
1
:
case
0
:
case
AVCOL_PRI_BT709
:
case
AVCOL_PRI_BT470BG
:
case
AVCOL_PRI_SMPTE170M
:
case
AVCOL_PRI_BT2020
:
case
AVCOL_PRI_SMPTE431
:
case
AVCOL_PRI_SMPTE432
:
break
;
default:
av_log
(
bsf
,
AV_LOG_ERROR
,
"Color primaries %d is not a valid value
\n
"
,
ctx
->
color_primaries
);
return
AVERROR
(
EINVAL
);
}
switch
(
ctx
->
matrix_coefficients
)
{
case
-
1
:
case
0
:
case
AVCOL_PRI_BT709
:
case
AVCOL_SPC_SMPTE170M
:
case
AVCOL_SPC_BT2020_NCL
:
break
;
default:
av_log
(
bsf
,
AV_LOG_ERROR
,
"Colorspace %d is not a valid value
\n
"
,
ctx
->
matrix_coefficients
);
return
AVERROR
(
EINVAL
);
}
return
0
;
}
#define OFFSET(x) offsetof(ProresMetadataContext, x)
#define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_BSF_PARAM)
static
const
AVOption
options
[]
=
{
{
"color_primaries"
,
"select color primaries"
,
OFFSET
(
color_primaries
),
AV_OPT_TYPE_INT
,
{.
i64
=-
1
},
-
1
,
AVCOL_PRI_SMPTE432
,
FLAGS
,
"color_primaries"
},
{
"auto"
,
"keep the same color primaries"
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=-
1
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"color_primaries"
},
{
"unknown"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
0
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"color_primaries"
},
{
"bt709"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
AVCOL_PRI_BT709
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"color_primaries"
},
{
"bt470bg"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
AVCOL_PRI_BT470BG
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"color_primaries"
},
{
"smpte170m"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
AVCOL_PRI_SMPTE170M
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"color_primaries"
},
{
"bt2020"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
AVCOL_PRI_BT2020
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"color_primaries"
},
{
"smpte431"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
AVCOL_PRI_SMPTE431
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"color_primaries"
},
{
"smpte432"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
AVCOL_PRI_SMPTE432
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"color_primaries"
},
{
"color_trc"
,
"select color transfer"
,
OFFSET
(
transfer_characteristics
),
AV_OPT_TYPE_INT
,
{.
i64
=-
1
},
-
1
,
AVCOL_TRC_BT709
,
FLAGS
,
"color_trc"
},
{
"auto"
,
"keep the same color transfer"
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=-
1
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"color_trc"
},
{
"unknown"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
0
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"color_trc"
},
{
"bt709"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
AVCOL_TRC_BT709
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"color_trc"
},
{
"colorspace"
,
"select colorspace"
,
OFFSET
(
matrix_coefficients
),
AV_OPT_TYPE_INT
,
{.
i64
=-
1
},
-
1
,
AVCOL_SPC_BT2020_NCL
,
FLAGS
,
"colorspace"
},
{
"auto"
,
"keep the same colorspace"
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=-
1
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"colorspace"
},
{
"unknown"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
0
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"colorspace"
},
{
"bt709"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
AVCOL_SPC_BT709
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"colorspace"
},
{
"smpte170m"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
AVCOL_SPC_SMPTE170M
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"colorspace"
},
{
"bt2020nc"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
AVCOL_SPC_BT2020_NCL
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"colorspace"
},
{
NULL
},
};
static
const
AVClass
prores_metadata_class
=
{
.
class_name
=
"prores_metadata_bsf"
,
.
item_name
=
av_default_item_name
,
.
option
=
options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
const
AVBitStreamFilter
ff_prores_metadata_bsf
=
{
.
name
=
"prores_metadata"
,
.
init
=
prores_metadata_init
,
.
filter
=
prores_metadata
,
.
priv_data_size
=
sizeof
(
ProresMetadataContext
),
.
priv_class
=
&
prores_metadata_class
,
.
codec_ids
=
codec_ids
,
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment