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
0279cb4f
Commit
0279cb4f
authored
Nov 19, 2018
by
Paul B Mahol
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec: add truehd_core bitstream filter
parent
fa08345e
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
193 additions
and
1 deletion
+193
-1
Changelog
Changelog
+1
-0
configure
configure
+1
-0
bitstream_filters.texi
doc/bitstream_filters.texi
+4
-0
Makefile
libavcodec/Makefile
+1
-0
bitstream_filters.c
libavcodec/bitstream_filters.c
+1
-0
truehd_core_bsf.c
libavcodec/truehd_core_bsf.c
+184
-0
version.h
libavcodec/version.h
+1
-1
No files found.
Changelog
View file @
0279cb4f
...
...
@@ -7,6 +7,7 @@ version <next>:
- dedot filter
- chromashift and rgbashift filters
- freezedetect filter
- truehd_core bitstream filter
version 4.1:
...
...
configure
View file @
0279cb4f
...
...
@@ -3046,6 +3046,7 @@ hevc_metadata_bsf_select="cbs_h265"
mjpeg2jpeg_bsf_select
=
"jpegtables"
mpeg2_metadata_bsf_select
=
"cbs_mpeg2"
trace_headers_bsf_select
=
"cbs"
truehd_core_bsf_select
=
"mlp_parser"
vp9_metadata_bsf_select
=
"cbs_vp9"
# external libraries
...
...
doc/bitstream_filters.texi
View file @
0279cb4f
...
...
@@ -634,6 +634,10 @@ This can be useful for debugging low-level stream issues.
Supports H.264, H.265, MPEG-2 and VP9.
@section truehd_core
Extract the core from a TrueHD stream, dropping ATMOS data.
@section vp9_metadata
Modify metadata embedded in a VP9 stream.
...
...
libavcodec/Makefile
View file @
0279cb4f
...
...
@@ -1085,6 +1085,7 @@ 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
OBJS-$(CONFIG_TRUEHD_CORE_BSF)
+=
truehd_core_bsf.o
mlp_parser.o
mlp.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
...
...
libavcodec/bitstream_filters.c
View file @
0279cb4f
...
...
@@ -51,6 +51,7 @@ 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
;
extern
const
AVBitStreamFilter
ff_truehd_core_bsf
;
extern
const
AVBitStreamFilter
ff_vp9_metadata_bsf
;
extern
const
AVBitStreamFilter
ff_vp9_raw_reorder_bsf
;
extern
const
AVBitStreamFilter
ff_vp9_superframe_bsf
;
...
...
libavcodec/truehd_core_bsf.c
0 → 100644
View file @
0279cb4f
/*
* Copyright (c) 2018 Paul B Mahol
*
* 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 "avcodec.h"
#include "bsf.h"
#include "get_bits.h"
#include "mlp_parser.h"
#include "mlp.h"
typedef
struct
AccessUnit
{
uint8_t
bits
[
4
];
uint16_t
offset
;
uint16_t
optional
;
}
AccessUnit
;
typedef
struct
TrueHDCoreContext
{
const
AVClass
*
class
;
MLPHeaderInfo
hdr
;
}
TrueHDCoreContext
;
static
int
truehd_core_filter
(
AVBSFContext
*
ctx
,
AVPacket
*
out
)
{
TrueHDCoreContext
*
s
=
ctx
->
priv_data
;
GetBitContext
gbc
;
AccessUnit
units
[
MAX_SUBSTREAMS
];
AVPacket
*
in
;
int
ret
,
i
,
size
,
last_offset
=
0
;
int
in_size
,
out_size
;
int
have_header
=
0
;
int
substream_bits
=
0
;
int
start
,
end
;
uint16_t
dts
;
ret
=
ff_bsf_get_packet
(
ctx
,
&
in
);
if
(
ret
<
0
)
return
ret
;
if
(
in
->
size
<
4
)
goto
fail
;
ret
=
init_get_bits
(
&
gbc
,
in
->
data
,
32
);
if
(
ret
<
0
)
goto
fail
;
skip_bits
(
&
gbc
,
4
);
in_size
=
get_bits
(
&
gbc
,
12
)
*
2
;
if
(
in_size
<
4
||
in_size
>
in
->
size
)
goto
fail
;
out_size
=
in_size
;
dts
=
get_bits
(
&
gbc
,
16
);
ret
=
init_get_bits8
(
&
gbc
,
in
->
data
+
4
,
in
->
size
-
4
);
if
(
ret
<
0
)
goto
fail
;
if
(
show_bits_long
(
&
gbc
,
32
)
==
0xf8726fba
)
{
if
((
ret
=
ff_mlp_read_major_sync
(
ctx
,
&
s
->
hdr
,
&
gbc
))
!=
0
)
goto
fail
;
have_header
=
1
;
}
if
(
s
->
hdr
.
num_substreams
>
MAX_SUBSTREAMS
)
goto
fail
;
start
=
get_bits_count
(
&
gbc
);
for
(
i
=
0
;
i
<
s
->
hdr
.
num_substreams
;
i
++
)
{
for
(
int
j
=
0
;
j
<
4
;
j
++
)
units
[
i
].
bits
[
j
]
=
get_bits1
(
&
gbc
);
units
[
i
].
offset
=
get_bits
(
&
gbc
,
12
)
*
2
;
if
(
i
<
FFMIN
(
s
->
hdr
.
num_substreams
,
3
))
{
last_offset
=
units
[
i
].
offset
;
substream_bits
+=
16
;
}
if
(
units
[
i
].
bits
[
0
])
{
units
[
i
].
optional
=
get_bits
(
&
gbc
,
16
);
if
(
i
<
FFMIN
(
s
->
hdr
.
num_substreams
,
3
))
substream_bits
+=
16
;
}
}
end
=
get_bits_count
(
&
gbc
);
size
=
((
end
+
7
)
>>
3
)
+
4
+
last_offset
;
if
(
size
>=
0
&&
size
<=
in
->
size
)
out_size
=
size
;
if
(
out_size
<
in_size
)
{
int
bpos
=
0
,
reduce
=
(
end
-
start
-
substream_bits
)
>>
4
;
uint16_t
parity_nibble
=
0
;
uint16_t
auheader
;
ret
=
av_new_packet
(
out
,
out_size
);
if
(
ret
<
0
)
goto
fail
;
AV_WB16
(
out
->
data
+
2
,
dts
);
parity_nibble
=
dts
;
out
->
size
-=
reduce
*
2
;
parity_nibble
^=
out
->
size
/
2
;
if
(
have_header
)
{
memcpy
(
out
->
data
+
4
,
in
->
data
+
4
,
28
);
out
->
data
[
16
+
4
]
=
(
out
->
data
[
16
+
4
]
&
0x0f
)
|
(
FFMIN
(
s
->
hdr
.
num_substreams
,
3
)
<<
4
);
out
->
data
[
25
+
4
]
=
out
->
data
[
25
+
4
]
&
0xfe
;
out
->
data
[
26
+
4
]
=
0xff
;
out
->
data
[
27
+
4
]
=
0xff
;
AV_WL16
(
out
->
data
+
4
+
26
,
ff_mlp_checksum16
(
out
->
data
+
4
,
26
));
}
for
(
i
=
0
;
i
<
FFMIN
(
s
->
hdr
.
num_substreams
,
3
);
i
++
)
{
uint16_t
substr_hdr
=
0
;
substr_hdr
|=
(
units
[
i
].
bits
[
0
]
<<
15
);
substr_hdr
|=
(
units
[
i
].
bits
[
1
]
<<
14
);
substr_hdr
|=
(
units
[
i
].
bits
[
2
]
<<
13
);
substr_hdr
|=
(
units
[
i
].
bits
[
3
]
<<
12
);
substr_hdr
|=
(
units
[
i
].
offset
/
2
)
&
0x0FFF
;
AV_WB16
(
out
->
data
+
have_header
*
28
+
4
+
bpos
,
substr_hdr
);
parity_nibble
^=
out
->
data
[
have_header
*
28
+
4
+
bpos
++
];
parity_nibble
^=
out
->
data
[
have_header
*
28
+
4
+
bpos
++
];
if
(
units
[
i
].
bits
[
0
])
{
AV_WB16
(
out
->
data
+
have_header
*
28
+
4
+
bpos
,
units
[
i
].
optional
);
parity_nibble
^=
out
->
data
[
have_header
*
28
+
4
+
bpos
++
];
parity_nibble
^=
out
->
data
[
have_header
*
28
+
4
+
bpos
++
];
}
}
parity_nibble
^=
parity_nibble
>>
8
;
parity_nibble
^=
parity_nibble
>>
4
;
parity_nibble
&=
0xF
;
memcpy
(
out
->
data
+
have_header
*
28
+
4
+
bpos
,
in
->
data
+
4
+
(
end
>>
3
),
out_size
-
(
4
+
(
end
>>
3
)));
auheader
=
(
parity_nibble
^
0xF
)
<<
12
;
auheader
|=
(
out
->
size
/
2
)
&
0x0fff
;
AV_WB16
(
out
->
data
,
auheader
);
ret
=
av_packet_copy_props
(
out
,
in
);
}
else
{
av_packet_move_ref
(
out
,
in
);
}
fail:
if
(
ret
<
0
)
av_packet_unref
(
out
);
av_packet_free
(
&
in
);
return
ret
;
}
static
const
enum
AVCodecID
codec_ids
[]
=
{
AV_CODEC_ID_TRUEHD
,
AV_CODEC_ID_NONE
,
};
const
AVBitStreamFilter
ff_truehd_core_bsf
=
{
.
name
=
"truehd_core"
,
.
priv_data_size
=
sizeof
(
TrueHDCoreContext
),
.
filter
=
truehd_core_filter
,
.
codec_ids
=
codec_ids
,
};
libavcodec/version.h
View file @
0279cb4f
...
...
@@ -28,7 +28,7 @@
#include "libavutil/version.h"
#define LIBAVCODEC_VERSION_MAJOR 58
#define LIBAVCODEC_VERSION_MINOR
39
#define LIBAVCODEC_VERSION_MINOR
40
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
...
...
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