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
f9af3929
Commit
f9af3929
authored
Jul 07, 2018
by
James Almer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec/extract_extradata: add support for AV1
Signed-off-by:
James Almer
<
jamrial@gmail.com
>
parent
45f52d19
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
123 additions
and
1 deletion
+123
-1
Makefile
libavcodec/Makefile
+1
-1
av1.h
libavcodec/av1.h
+42
-0
extract_extradata_bsf.c
libavcodec/extract_extradata_bsf.c
+80
-0
No files found.
libavcodec/Makefile
View file @
f9af3929
...
...
@@ -1046,7 +1046,7 @@ OBJS-$(CONFIG_DUMP_EXTRADATA_BSF) += dump_extradata_bsf.o
OBJS-$(CONFIG_DCA_CORE_BSF)
+=
dca_core_bsf.o
OBJS-$(CONFIG_EAC3_CORE_BSF)
+=
eac3_core_bsf.o
OBJS-$(CONFIG_EXTRACT_EXTRADATA_BSF)
+=
extract_extradata_bsf.o
\
h2645_parse.o
av1_parse.o
h2645_parse.o
OBJS-$(CONFIG_FILTER_UNITS_BSF)
+=
filter_units_bsf.o
OBJS-$(CONFIG_H264_METADATA_BSF)
+=
h264_metadata_bsf.o
OBJS-$(CONFIG_H264_MP4TOANNEXB_BSF)
+=
h264_mp4toannexb_bsf.o
...
...
libavcodec/av1.h
0 → 100644
View file @
f9af3929
/*
* 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
* AV1 common definitions
*/
#ifndef AVCODEC_AV1_H
#define AVCODEC_AV1_H
// OBU types (section 6.2.2).
typedef
enum
{
// 0 reserved.
AV1_OBU_SEQUENCE_HEADER
=
1
,
AV1_OBU_TEMPORAL_DELIMITER
=
2
,
AV1_OBU_FRAME_HEADER
=
3
,
AV1_OBU_TILE_GROUP
=
4
,
AV1_OBU_METADATA
=
5
,
AV1_OBU_FRAME
=
6
,
AV1_OBU_REDUNDANT_FRAME_HEADER
=
7
,
AV1_OBU_TILE_LIST
=
8
,
// 9-14 reserved.
AV1_OBU_PADDING
=
15
,
}
AV1_OBU_Type
;
#endif
/* AVCODEC_AV1_H */
libavcodec/extract_extradata_bsf.c
View file @
f9af3929
...
...
@@ -24,6 +24,8 @@
#include "libavutil/opt.h"
#include "avcodec.h"
#include "av1.h"
#include "av1_parse.h"
#include "bsf.h"
#include "h2645_parse.h"
#include "h264.h"
...
...
@@ -36,6 +38,9 @@ typedef struct ExtractExtradataContext {
int
(
*
extract
)(
AVBSFContext
*
ctx
,
AVPacket
*
pkt
,
uint8_t
**
data
,
int
*
size
);
/* AV1 specifc fields */
AV1Packet
av1_pkt
;
/* H264/HEVC specifc fields */
H2645Packet
h2645_pkt
;
...
...
@@ -52,6 +57,78 @@ static int val_in_array(const int *arr, int len, int val)
return
0
;
}
static
int
extract_extradata_av1
(
AVBSFContext
*
ctx
,
AVPacket
*
pkt
,
uint8_t
**
data
,
int
*
size
)
{
static
const
int
extradata_obu_types
[]
=
{
AV1_OBU_SEQUENCE_HEADER
,
AV1_OBU_METADATA
,
};
ExtractExtradataContext
*
s
=
ctx
->
priv_data
;
int
extradata_size
=
0
,
filtered_size
=
0
;
int
nb_extradata_obu_types
=
FF_ARRAY_ELEMS
(
extradata_obu_types
);
int
i
,
ret
=
0
;
ret
=
ff_av1_packet_split
(
&
s
->
av1_pkt
,
pkt
->
data
,
pkt
->
size
,
ctx
);
if
(
ret
<
0
)
return
ret
;
for
(
i
=
0
;
i
<
s
->
av1_pkt
.
nb_obus
;
i
++
)
{
AV1OBU
*
obu
=
&
s
->
av1_pkt
.
obus
[
i
];
if
(
val_in_array
(
extradata_obu_types
,
nb_extradata_obu_types
,
obu
->
type
))
{
extradata_size
+=
obu
->
raw_size
;
}
else
if
(
s
->
remove
)
{
filtered_size
+=
obu
->
raw_size
;
}
}
if
(
extradata_size
)
{
AVBufferRef
*
filtered_buf
;
uint8_t
*
extradata
,
*
filtered_data
;
if
(
s
->
remove
)
{
filtered_buf
=
av_buffer_alloc
(
filtered_size
+
AV_INPUT_BUFFER_PADDING_SIZE
);
if
(
!
filtered_buf
)
{
return
AVERROR
(
ENOMEM
);
}
memset
(
filtered_buf
->
data
+
filtered_size
,
0
,
AV_INPUT_BUFFER_PADDING_SIZE
);
filtered_data
=
filtered_buf
->
data
;
}
extradata
=
av_malloc
(
extradata_size
+
AV_INPUT_BUFFER_PADDING_SIZE
);
if
(
!
extradata
)
{
av_buffer_unref
(
&
filtered_buf
);
return
AVERROR
(
ENOMEM
);
}
memset
(
extradata
+
extradata_size
,
0
,
AV_INPUT_BUFFER_PADDING_SIZE
);
*
data
=
extradata
;
*
size
=
extradata_size
;
for
(
i
=
0
;
i
<
s
->
av1_pkt
.
nb_obus
;
i
++
)
{
AV1OBU
*
obu
=
&
s
->
av1_pkt
.
obus
[
i
];
if
(
val_in_array
(
extradata_obu_types
,
nb_extradata_obu_types
,
obu
->
type
))
{
memcpy
(
extradata
,
obu
->
raw_data
,
obu
->
raw_size
);
extradata
+=
obu
->
raw_size
;
}
else
if
(
s
->
remove
)
{
memcpy
(
filtered_data
,
obu
->
raw_data
,
obu
->
raw_size
);
filtered_data
+=
obu
->
raw_size
;
}
}
if
(
s
->
remove
)
{
av_buffer_unref
(
&
pkt
->
buf
);
pkt
->
buf
=
filtered_buf
;
pkt
->
data
=
filtered_buf
->
data
;
pkt
->
size
=
filtered_size
;
}
}
return
0
;
}
static
int
extract_extradata_h2645
(
AVBSFContext
*
ctx
,
AVPacket
*
pkt
,
uint8_t
**
data
,
int
*
size
)
{
...
...
@@ -251,6 +328,7 @@ static const struct {
int
(
*
extract
)(
AVBSFContext
*
ctx
,
AVPacket
*
pkt
,
uint8_t
**
data
,
int
*
size
);
}
extract_tab
[]
=
{
{
AV_CODEC_ID_AV1
,
extract_extradata_av1
},
{
AV_CODEC_ID_CAVS
,
extract_extradata_mpeg4
},
{
AV_CODEC_ID_H264
,
extract_extradata_h2645
},
{
AV_CODEC_ID_HEVC
,
extract_extradata_h2645
},
...
...
@@ -311,10 +389,12 @@ fail:
static
void
extract_extradata_close
(
AVBSFContext
*
ctx
)
{
ExtractExtradataContext
*
s
=
ctx
->
priv_data
;
ff_av1_packet_uninit
(
&
s
->
av1_pkt
);
ff_h2645_packet_uninit
(
&
s
->
h2645_pkt
);
}
static
const
enum
AVCodecID
codec_ids
[]
=
{
AV_CODEC_ID_AV1
,
AV_CODEC_ID_CAVS
,
AV_CODEC_ID_H264
,
AV_CODEC_ID_HEVC
,
...
...
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