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
308b989e
Commit
308b989e
authored
Apr 02, 2018
by
Mark Thompson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavc: Add VP9 metadata bitstream filter
Can adjust the colour information.
parent
b5df289e
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
191 additions
and
0 deletions
+191
-0
configure
configure
+1
-0
bitstream_filters.texi
doc/bitstream_filters.texi
+26
-0
Makefile
libavcodec/Makefile
+1
-0
bitstream_filters.c
libavcodec/bitstream_filters.c
+1
-0
vp9_metadata_bsf.c
libavcodec/vp9_metadata_bsf.c
+162
-0
No files found.
configure
View file @
308b989e
...
...
@@ -2989,6 +2989,7 @@ hevc_metadata_bsf_select="cbs_h265"
mjpeg2jpeg_bsf_select
=
"jpegtables"
mpeg2_metadata_bsf_select
=
"cbs_mpeg2"
trace_headers_bsf_select
=
"cbs"
vp9_metadata_bsf_select
=
"cbs_vp9"
# external libraries
aac_at_decoder_deps
=
"audiotoolbox"
...
...
doc/bitstream_filters.texi
View file @
308b989e
...
...
@@ -507,6 +507,32 @@ This can be useful for debugging low-level stream issues.
Supports H.264, H.265, MPEG-2 and VP9.
@section vp9_metadata
Modify metadata embedded in a VP9 stream.
@table @option
@item color_space
Set the color space value in the frame header.
@table @samp
@item unknown
@item bt601
@item bt709
@item smpte170
@item smpte240
@item bt2020
@item rgb
@end table
@item color_range
Set the color range value in the frame header. Note that this cannot
be set in RGB streams.
@table @samp
@item tv
@item pc
@end table
@end table
@section vp9_superframe
Merge VP9 invisible (alt-ref) frames back into VP9 superframes. This
...
...
libavcodec/Makefile
View file @
308b989e
...
...
@@ -1066,6 +1066,7 @@ OBJS-$(CONFIG_NULL_BSF) += null_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
OBJS-$(CONFIG_VP9_METADATA_BSF)
+=
vp9_metadata_bsf.o
OBJS-$(CONFIG_VP9_RAW_REORDER_BSF)
+=
vp9_raw_reorder_bsf.o
OBJS-$(CONFIG_VP9_SUPERFRAME_BSF)
+=
vp9_superframe_bsf.o
OBJS-$(CONFIG_VP9_SUPERFRAME_SPLIT_BSF)
+=
vp9_superframe_split_bsf.o
...
...
libavcodec/bitstream_filters.c
View file @
308b989e
...
...
@@ -49,6 +49,7 @@ extern const AVBitStreamFilter ff_null_bsf;
extern
const
AVBitStreamFilter
ff_remove_extradata_bsf
;
extern
const
AVBitStreamFilter
ff_text2movsub_bsf
;
extern
const
AVBitStreamFilter
ff_trace_headers_bsf
;
extern
const
AVBitStreamFilter
ff_vp9_metadata_bsf
;
extern
const
AVBitStreamFilter
ff_vp9_raw_reorder_bsf
;
extern
const
AVBitStreamFilter
ff_vp9_superframe_bsf
;
extern
const
AVBitStreamFilter
ff_vp9_superframe_split_bsf
;
...
...
libavcodec/vp9_metadata_bsf.c
0 → 100644
View file @
308b989e
/*
* 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
*/
#include "libavutil/avstring.h"
#include "libavutil/common.h"
#include "libavutil/opt.h"
#include "bsf.h"
#include "cbs.h"
#include "cbs_vp9.h"
typedef
struct
VP9MetadataContext
{
const
AVClass
*
class
;
CodedBitstreamContext
*
cbc
;
CodedBitstreamFragment
fragment
;
int
color_space
;
int
color_range
;
int
color_range_rgb_warned
;
}
VP9MetadataContext
;
static
int
vp9_metadata_filter
(
AVBSFContext
*
bsf
,
AVPacket
*
out
)
{
VP9MetadataContext
*
ctx
=
bsf
->
priv_data
;
AVPacket
*
in
=
NULL
;
CodedBitstreamFragment
*
frag
=
&
ctx
->
fragment
;
int
err
,
i
;
err
=
ff_bsf_get_packet
(
bsf
,
&
in
);
if
(
err
<
0
)
return
err
;
err
=
ff_cbs_read_packet
(
ctx
->
cbc
,
frag
,
in
);
if
(
err
<
0
)
{
av_log
(
bsf
,
AV_LOG_ERROR
,
"Failed to read packet.
\n
"
);
goto
fail
;
}
for
(
i
=
0
;
i
<
frag
->
nb_units
;
i
++
)
{
VP9RawFrame
*
frame
=
frag
->
units
[
i
].
content
;
VP9RawFrameHeader
*
header
=
&
frame
->
header
;
if
(
ctx
->
color_space
>=
0
)
{
header
->
color_space
=
ctx
->
color_space
;
}
if
(
ctx
->
color_range
>=
0
)
{
if
(
ctx
->
color_range
==
0
&&
header
->
color_space
==
VP9_CS_RGB
&&
!
ctx
->
color_range_rgb_warned
)
{
av_log
(
bsf
,
AV_LOG_WARNING
,
"Warning: color_range cannot "
"be set to limited in RGB streams.
\n
"
);
ctx
->
color_range_rgb_warned
=
1
;
}
else
{
header
->
color_range
=
ctx
->
color_range
;
}
}
}
err
=
ff_cbs_write_packet
(
ctx
->
cbc
,
out
,
frag
);
if
(
err
<
0
)
{
av_log
(
bsf
,
AV_LOG_ERROR
,
"Failed to write packet.
\n
"
);
goto
fail
;
}
err
=
av_packet_copy_props
(
out
,
in
);
if
(
err
<
0
)
goto
fail
;
err
=
0
;
fail:
ff_cbs_fragment_uninit
(
ctx
->
cbc
,
frag
);
if
(
err
<
0
)
av_packet_unref
(
out
);
av_packet_free
(
&
in
);
return
err
;
}
static
int
vp9_metadata_init
(
AVBSFContext
*
bsf
)
{
VP9MetadataContext
*
ctx
=
bsf
->
priv_data
;
return
ff_cbs_init
(
&
ctx
->
cbc
,
AV_CODEC_ID_VP9
,
bsf
);
}
static
void
vp9_metadata_close
(
AVBSFContext
*
bsf
)
{
VP9MetadataContext
*
ctx
=
bsf
->
priv_data
;
ff_cbs_close
(
&
ctx
->
cbc
);
}
#define OFFSET(x) offsetof(VP9MetadataContext, x)
#define FLAGS (AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_BSF_PARAM)
static
const
AVOption
vp9_metadata_options
[]
=
{
{
"color_space"
,
"Set colour space (section 7.2.2)"
,
OFFSET
(
color_space
),
AV_OPT_TYPE_INT
,
{
.
i64
=
-
1
},
-
1
,
VP9_CS_RGB
,
FLAGS
,
"cs"
},
{
"unknown"
,
"Unknown/unspecified"
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
VP9_CS_UNKNOWN
},
.
flags
=
FLAGS
,
.
unit
=
"cs"
},
{
"bt601"
,
"ITU-R BT.601-7"
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
VP9_CS_BT_601
},
.
flags
=
FLAGS
,
.
unit
=
"cs"
},
{
"bt709"
,
"ITU-R BT.709-6"
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
VP9_CS_BT_709
},
.
flags
=
FLAGS
,
.
unit
=
"cs"
},
{
"smpte170"
,
"SMPTE-170"
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
VP9_CS_SMPTE_170
},
.
flags
=
FLAGS
,
.
unit
=
"cs"
},
{
"smpte240"
,
"SMPTE-240"
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
VP9_CS_SMPTE_240
},
.
flags
=
FLAGS
,
.
unit
=
"cs"
},
{
"bt2020"
,
"ITU-R BT.2020-2"
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
VP9_CS_BT_2020
},
.
flags
=
FLAGS
,
.
unit
=
"cs"
},
{
"rgb"
,
"sRGB / IEC 61966-2-1"
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
VP9_CS_RGB
},
.
flags
=
FLAGS
,
.
unit
=
"cs"
},
{
"color_range"
,
"Set colour range (section 7.2.2)"
,
OFFSET
(
color_range
),
AV_OPT_TYPE_INT
,
{
.
i64
=
-
1
},
-
1
,
1
,
FLAGS
,
"cr"
},
{
"tv"
,
"TV (limited) range"
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
0
},
.
flags
=
FLAGS
,
.
unit
=
"cr"
},
{
"pc"
,
"PC (full) range"
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
1
},
.
flags
=
FLAGS
,
.
unit
=
"cr"
},
{
NULL
}
};
static
const
AVClass
vp9_metadata_class
=
{
.
class_name
=
"vp9_metadata_bsf"
,
.
item_name
=
av_default_item_name
,
.
option
=
vp9_metadata_options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
static
const
enum
AVCodecID
vp9_metadata_codec_ids
[]
=
{
AV_CODEC_ID_VP9
,
AV_CODEC_ID_NONE
,
};
const
AVBitStreamFilter
ff_vp9_metadata_bsf
=
{
.
name
=
"vp9_metadata"
,
.
priv_data_size
=
sizeof
(
VP9MetadataContext
),
.
priv_class
=
&
vp9_metadata_class
,
.
init
=
&
vp9_metadata_init
,
.
close
=
&
vp9_metadata_close
,
.
filter
=
&
vp9_metadata_filter
,
.
codec_ids
=
vp9_metadata_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