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
679a6377
Commit
679a6377
authored
Dec 10, 2013
by
Guillaume Martres
Committed by
Michael Niedermayer
Dec 10, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hevc: avoid some unnecessary differences with libav
Signed-off-by:
Michael Niedermayer
<
michaelni@gmx.at
>
parent
6026a5ad
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
24 additions
and
61 deletions
+24
-61
hevc.c
libavcodec/hevc.c
+2
-2
hevc.h
libavcodec/hevc.h
+7
-13
hevc_ps.c
libavcodec/hevc_ps.c
+2
-3
hevc_refs.c
libavcodec/hevc_refs.c
+1
-1
hevc_sei.c
libavcodec/hevc_sei.c
+1
-1
hevcdsp_template.c
libavcodec/hevcdsp_template.c
+11
-41
No files found.
libavcodec/hevc.c
View file @
679a6377
...
...
@@ -2294,7 +2294,7 @@ static int decode_nal_unit(HEVCContext *s, const uint8_t *nal, int length)
}
/* FIXME: This is adapted from ff_h264_decode_nal, avoiding duplication
between these functions would be nice. */
*
between these functions would be nice. */
int
ff_hevc_extract_rbsp
(
HEVCContext
*
s
,
const
uint8_t
*
src
,
int
length
,
HEVCNAL
*
nal
)
{
...
...
@@ -2857,7 +2857,7 @@ static int hevc_decode_extradata(HEVCContext *s)
avctx
->
extradata
[
2
]
>
1
))
{
/* It seems the extradata is encoded as hvcC format.
* Temporarily, we support configurationVersion==0 until 14496-15 3rd
* finalized. When finalized, configurationVersion will be 1 and we
*
is
finalized. When finalized, configurationVersion will be 1 and we
* can recognize hvcC by checking if avctx->extradata[0]==1 or not. */
int
i
,
j
,
num_arrays
,
nal_len_size
;
...
...
libavcodec/hevc.h
View file @
679a6377
...
...
@@ -374,8 +374,6 @@ typedef struct HEVCVPS {
uint8_t
vps_poc_proportional_to_timing_flag
;
int
vps_num_ticks_poc_diff_one
;
///< vps_num_ticks_poc_diff_one_minus1 + 1
int
vps_num_hrd_parameters
;
int
vps_extension_flag
;
}
HEVCVPS
;
typedef
struct
ScalingList
{
...
...
@@ -508,7 +506,7 @@ typedef struct HEVCPPS {
int
beta_offset
;
///< beta_offset_div2 * 2
int
tc_offset
;
///< tc_offset_div2 * 2
in
t
scaling_list_data_present_flag
;
uint8_
t
scaling_list_data_present_flag
;
ScalingList
scaling_list
;
uint8_t
lists_modification_present_flag
;
...
...
@@ -516,9 +514,6 @@ typedef struct HEVCPPS {
int
num_extra_slice_header_bits
;
uint8_t
slice_header_extension_present_flag
;
uint8_t
pps_extension_flag
;
uint8_t
pps_extension_data_flag
;
// Inferred parameters
int
*
column_width
;
///< ColumnWidth
int
*
row_height
;
///< RowHeight
...
...
@@ -580,8 +575,7 @@ typedef struct SliceHeader {
int
beta_offset
;
///< beta_offset_div2 * 2
int
tc_offset
;
///< tc_offset_div2 * 2
int
max_num_merge_cand
;
///< 5 - 5_minus_max_num_merge_cand
unsigned
int
max_num_merge_cand
;
///< 5 - 5_minus_max_num_merge_cand
int
*
entry_point_offset
;
int
*
offset
;
...
...
@@ -768,7 +762,7 @@ typedef struct HEVCLocalContext {
typedef
struct
HEVCContext
{
const
AVClass
*
c
;
// needed by private avoptions
AVCodecContext
*
avctx
;
AVCodecContext
*
avctx
;
struct
HEVCContext
*
sList
[
MAX_NB_THREADS
];
...
...
@@ -791,9 +785,9 @@ typedef struct HEVCContext {
AVFrame
*
tmp_frame
;
AVFrame
*
output_frame
;
HEVCVPS
*
vps
;
const
HEVCVPS
*
vps
;
const
HEVCSPS
*
sps
;
HEVCPPS
*
pps
;
const
HEVCPPS
*
pps
;
AVBufferRef
*
vps_list
[
MAX_VPS_COUNT
];
AVBufferRef
*
sps_list
[
MAX_SPS_COUNT
];
AVBufferRef
*
pps_list
[
MAX_PPS_COUNT
];
...
...
@@ -876,8 +870,8 @@ typedef struct HEVCContext {
uint8_t
md5
[
3
][
16
];
uint8_t
is_md5
;
in
t
context_initialized
;
int
is_nalff
;
///< this flag is != 0 if bitstream is encapsulated
uint8_
t
context_initialized
;
uint8_t
is_nalff
;
///< this flag is != 0 if bitstream is encapsulated
///< as a format defined in 14496-15
int
apply_defdispwin
;
...
...
libavcodec/hevc_ps.c
View file @
679a6377
...
...
@@ -412,8 +412,7 @@ int ff_hevc_decode_nal_vps(HEVCContext *s)
decode_hrd
(
s
,
common_inf_present
,
vps
->
vps_max_sub_layers
);
}
}
vps
->
vps_extension_flag
=
get_bits1
(
gb
);
get_bits1
(
gb
);
/* vps_extension_flag */
av_buffer_unref
(
&
s
->
vps_list
[
vps_id
]);
s
->
vps_list
[
vps_id
]
=
vps_buf
;
...
...
@@ -1183,7 +1182,7 @@ int ff_hevc_decode_nal_pps(HEVCContext *s)
}
pps
->
slice_header_extension_present_flag
=
get_bits1
(
gb
);
pps
->
pps_extension_flag
=
get_bits1
(
gb
);
skip_bits1
(
gb
);
// pps_extension_flag
// Inferred parameters
pps
->
col_bd
=
av_malloc_array
(
pps
->
num_tile_columns
+
1
,
sizeof
(
*
pps
->
col_bd
));
...
...
libavcodec/hevc_refs.c
View file @
679a6377
/*
* HEVC video
D
ecoder
* HEVC video
d
ecoder
*
* Copyright (C) 2012 - 2013 Guillaume Martres
* Copyright (C) 2012 - 2013 Gildas Cocherel
...
...
libavcodec/hevc_sei.c
View file @
679a6377
...
...
@@ -22,8 +22,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "hevc.h"
#include "golomb.h"
#include "hevc.h"
static
void
decode_nal_sei_decoded_picture_hash
(
HEVCContext
*
s
)
{
...
...
libavcodec/hevcdsp_template.c
View file @
679a6377
...
...
@@ -194,8 +194,6 @@ static void FUNC(transform_4x4_luma_add)(uint8_t *_dst, int16_t *coeffs,
assign(dst[2 * dstep], e1 - o1); \
assign(dst[3 * dstep], e0 - o0); \
} while (0)
#define TR_4_1(dst, src) TR_4(dst, src, 4, 4, SCALE)
#define TR_4_2(dst, src) TR_4(dst, src, 1, 1, ADD_AND_SCALE)
static
void
FUNC
(
transform_4x4_add
)(
uint8_t
*
_dst
,
int16_t
*
coeffs
,
ptrdiff_t
stride
)
...
...
@@ -209,14 +207,14 @@ static void FUNC(transform_4x4_add)(uint8_t *_dst, int16_t *coeffs,
stride
/=
sizeof
(
pixel
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
TR_4
_1
(
src
,
src
);
TR_4
(
src
,
src
,
4
,
4
,
SCALE
);
src
++
;
}
shift
=
20
-
BIT_DEPTH
;
add
=
1
<<
(
shift
-
1
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
TR_4
_2
(
dst
,
coeffs
);
TR_4
(
dst
,
coeffs
,
1
,
1
,
ADD_AND_SCALE
);
coeffs
+=
4
;
dst
+=
stride
;
}
...
...
@@ -270,13 +268,7 @@ static void FUNC(transform_4x4_add)(uint8_t *_dst, int16_t *coeffs,
} \
} while (0)
#define TR_8_1(dst, src) TR_8(dst, src, 8, 8, SCALE)
#define TR_16_1(dst, src) TR_16(dst, src, 16, 16, SCALE)
#define TR_32_1(dst, src) TR_32(dst, src, 32, 32, SCALE)
#define TR_8_2(dst, src) TR_8(dst, src, 1, 1, ADD_AND_SCALE)
#define TR_16_2(dst, src) TR_16(dst, src, 1, 1, ADD_AND_SCALE)
#define TR_32_2(dst, src) TR_32(dst, src, 1, 1, ADD_AND_SCALE)
static
void
FUNC
(
transform_8x8_add
)(
uint8_t
*
_dst
,
int16_t
*
coeffs
,
ptrdiff_t
stride
)
...
...
@@ -290,14 +282,14 @@ static void FUNC(transform_8x8_add)(uint8_t *_dst, int16_t *coeffs,
stride
/=
sizeof
(
pixel
);
for
(
i
=
0
;
i
<
8
;
i
++
)
{
TR_8
_1
(
src
,
src
);
TR_8
(
src
,
src
,
8
,
8
,
SCALE
);
src
++
;
}
shift
=
20
-
BIT_DEPTH
;
add
=
1
<<
(
shift
-
1
);
for
(
i
=
0
;
i
<
8
;
i
++
)
{
TR_8
_2
(
dst
,
coeffs
);
TR_8
(
dst
,
coeffs
,
1
,
1
,
ADD_AND_SCALE
);
coeffs
+=
8
;
dst
+=
stride
;
}
...
...
@@ -315,14 +307,14 @@ static void FUNC(transform_16x16_add)(uint8_t *_dst, int16_t *coeffs,
stride
/=
sizeof
(
pixel
);
for
(
i
=
0
;
i
<
16
;
i
++
)
{
TR_16
_1
(
src
,
src
);
TR_16
(
src
,
src
,
16
,
16
,
SCALE
);
src
++
;
}
shift
=
20
-
BIT_DEPTH
;
add
=
1
<<
(
shift
-
1
);
for
(
i
=
0
;
i
<
16
;
i
++
)
{
TR_16
_2
(
dst
,
coeffs
);
TR_16
(
dst
,
coeffs
,
1
,
1
,
ADD_AND_SCALE
);
coeffs
+=
16
;
dst
+=
stride
;
}
...
...
@@ -331,15 +323,6 @@ static void FUNC(transform_16x16_add)(uint8_t *_dst, int16_t *coeffs,
static
void
FUNC
(
transform_32x32_add
)(
uint8_t
*
_dst
,
int16_t
*
coeffs
,
ptrdiff_t
stride
)
{
#define IT32x32_even(i,w) ( src[ 0*w] * transform[ 0][i] ) + ( src[16*w] * transform[16][i] )
#define IT32x32_odd(i,w) ( src[ 8*w] * transform[ 8][i] ) + ( src[24*w] * transform[24][i] )
#define IT16x16(i,w) ( src[ 4*w] * transform[ 4][i] ) + ( src[12*w] * transform[12][i] ) + ( src[20*w] * transform[20][i] ) + ( src[28*w] * transform[28][i] )
#define IT8x8(i,w) ( src[ 2*w] * transform[ 2][i] ) + ( src[ 6*w] * transform[ 6][i] ) + ( src[10*w] * transform[10][i] ) + ( src[14*w] * transform[14][i] ) + \
( src[18*w] * transform[18][i] ) + ( src[22*w] * transform[22][i] ) + ( src[26*w] * transform[26][i] ) + ( src[30*w] * transform[30][i] )
#define IT4x4(i,w) ( src[ 1*w] * transform[ 1][i] ) + ( src[ 3*w] * transform[ 3][i] ) + ( src[ 5*w] * transform[ 5][i] ) + ( src[ 7*w] * transform[ 7][i] ) + \
( src[ 9*w] * transform[ 9][i] ) + ( src[11*w] * transform[11][i] ) + ( src[13*w] * transform[13][i] ) + ( src[15*w] * transform[15][i] ) + \
( src[17*w] * transform[17][i] ) + ( src[19*w] * transform[19][i] ) + ( src[21*w] * transform[21][i] ) + ( src[23*w] * transform[23][i] ) + \
( src[25*w] * transform[25][i] ) + ( src[27*w] * transform[27][i] ) + ( src[29*w] * transform[29][i] ) + ( src[31*w] * transform[31][i] )
int
i
;
pixel
*
dst
=
(
pixel
*
)
_dst
;
int
shift
=
7
;
...
...
@@ -349,22 +332,17 @@ static void FUNC(transform_32x32_add)(uint8_t *_dst, int16_t *coeffs,
stride
/=
sizeof
(
pixel
);
for
(
i
=
0
;
i
<
32
;
i
++
)
{
TR_32
_1
(
src
,
src
);
TR_32
(
src
,
src
,
32
,
32
,
SCALE
);
src
++
;
}
src
=
coeffs
;
shift
=
20
-
BIT_DEPTH
;
add
=
1
<<
(
shift
-
1
);
for
(
i
=
0
;
i
<
32
;
i
++
)
{
TR_32
_2
(
dst
,
coeffs
);
TR_32
(
dst
,
coeffs
,
1
,
1
,
ADD_AND_SCALE
);
coeffs
+=
32
;
dst
+=
stride
;
}
#undef IT32x32_even
#undef IT32x32_odd
#undef IT16x16
#undef IT8x8
#undef IT4x4
}
static
void
FUNC
(
sao_band_filter
)(
uint8_t
*
_dst
,
uint8_t
*
_src
,
...
...
@@ -670,6 +648,7 @@ static void FUNC(sao_edge_filter_2)(uint8_t *_dst, uint8_t *_src,
int
chroma
=
!!
c_idx
;
int
*
sao_offset_val
=
sao
->
offset_val
[
c_idx
];
int
sao_eo_class
=
sao
->
eo_class
[
c_idx
];
int
init_x
=
0
,
init_y
=
0
,
width
=
_width
,
height
=
_height
;
static
const
int8_t
pos
[
4
][
2
][
2
]
=
{
{
{
-
1
,
0
},
{
1
,
0
}
},
// horizontal
...
...
@@ -679,9 +658,8 @@ static void FUNC(sao_edge_filter_2)(uint8_t *_dst, uint8_t *_src,
};
static
const
uint8_t
edge_idx
[]
=
{
1
,
2
,
0
,
3
,
4
};
int
init_x
=
0
,
init_y
=
0
,
width
=
_width
,
height
=
_height
;
#define CMP(a, b) ((a) > (b) ? 1 : ((a) == (b) ? 0 : -1))
stride
/=
sizeof
(
pixel
);
init_x
=
-
(
8
>>
chroma
)
-
2
;
...
...
@@ -822,17 +800,9 @@ static void FUNC(sao_edge_filter_3)(uint8_t *_dst, uint8_t *_src,
#undef SCALE
#undef ADD_AND_SCALE
#undef TR_4
#undef TR_4_1
#undef TR_4_2
#undef TR_8
#undef TR_8_1
#undef TR_8_2
#undef TR_16
#undef TR_16_1
#undef TR_16_2
#undef TR_32
#undef TR_32_1
#undef TR_32_2
static
void
FUNC
(
put_hevc_qpel_pixels
)(
int16_t
*
dst
,
ptrdiff_t
dststride
,
uint8_t
*
_src
,
ptrdiff_t
_srcstride
,
...
...
@@ -1216,7 +1186,7 @@ static void FUNC(hevc_loop_filter_luma)(uint8_t *_pix,
const
int
no_p
=
_no_p
[
j
];
const
int
no_q
=
_no_q
[
j
];
if
(
d0
+
d3
>=
beta
/*|| tc <= 0*/
)
{
if
(
d0
+
d3
>=
beta
)
{
pix
+=
4
*
ystride
;
continue
;
}
else
{
...
...
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