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
1edaf601
Commit
1edaf601
authored
Dec 02, 2018
by
Martin Vignali
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec/prores_aw : add 4444 xq support
parent
bbbbf237
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
9 deletions
+28
-9
proresenc_anatoliy.c
libavcodec/proresenc_anatoliy.c
+28
-9
No files found.
libavcodec/proresenc_anatoliy.c
View file @
1edaf601
...
@@ -45,12 +45,13 @@ static const AVProfile profiles[] = {
...
@@ -45,12 +45,13 @@ static const AVProfile profiles[] = {
{
FF_PROFILE_PRORES_STANDARD
,
"apcn"
},
{
FF_PROFILE_PRORES_STANDARD
,
"apcn"
},
{
FF_PROFILE_PRORES_HQ
,
"apch"
},
{
FF_PROFILE_PRORES_HQ
,
"apch"
},
{
FF_PROFILE_PRORES_4444
,
"ap4h"
},
{
FF_PROFILE_PRORES_4444
,
"ap4h"
},
{
FF_PROFILE_PRORES_XQ
,
"ap4x"
},
{
FF_PROFILE_UNKNOWN
}
{
FF_PROFILE_UNKNOWN
}
};
};
static
const
int
qp_start_table
[
5
]
=
{
8
,
3
,
2
,
1
,
1
};
static
const
int
qp_start_table
[
6
]
=
{
8
,
3
,
2
,
1
,
1
,
1
};
static
const
int
qp_end_table
[
5
]
=
{
13
,
9
,
6
,
6
,
5
};
static
const
int
qp_end_table
[
6
]
=
{
13
,
9
,
6
,
6
,
5
,
4
};
static
const
int
bitrate_table
[
5
]
=
{
1000
,
2100
,
3500
,
5400
,
7
000
};
static
const
int
bitrate_table
[
6
]
=
{
1000
,
2100
,
3500
,
5400
,
7000
,
10
000
};
static
const
int
valid_primaries
[
9
]
=
{
AVCOL_PRI_RESERVED0
,
AVCOL_PRI_BT709
,
AVCOL_PRI_UNSPECIFIED
,
AVCOL_PRI_BT470BG
,
static
const
int
valid_primaries
[
9
]
=
{
AVCOL_PRI_RESERVED0
,
AVCOL_PRI_BT709
,
AVCOL_PRI_UNSPECIFIED
,
AVCOL_PRI_BT470BG
,
AVCOL_PRI_SMPTE170M
,
AVCOL_PRI_BT2020
,
AVCOL_PRI_SMPTE431
,
AVCOL_PRI_SMPTE432
,
INT_MAX
};
AVCOL_PRI_SMPTE170M
,
AVCOL_PRI_BT2020
,
AVCOL_PRI_SMPTE431
,
AVCOL_PRI_SMPTE432
,
INT_MAX
};
...
@@ -58,7 +59,7 @@ static const int valid_trc[4] = { AVCOL_TRC_RESERVED0, AVCOL_TRC_BT709, A
...
@@ -58,7 +59,7 @@ static const int valid_trc[4] = { AVCOL_TRC_RESERVED0, AVCOL_TRC_BT709, A
static
const
int
valid_colorspace
[
5
]
=
{
AVCOL_SPC_BT709
,
AVCOL_SPC_UNSPECIFIED
,
AVCOL_SPC_SMPTE170M
,
static
const
int
valid_colorspace
[
5
]
=
{
AVCOL_SPC_BT709
,
AVCOL_SPC_UNSPECIFIED
,
AVCOL_SPC_SMPTE170M
,
AVCOL_SPC_BT2020_NCL
,
INT_MAX
};
AVCOL_SPC_BT2020_NCL
,
INT_MAX
};
static
const
uint8_t
QMAT_LUMA
[
5
][
64
]
=
{
static
const
uint8_t
QMAT_LUMA
[
6
][
64
]
=
{
{
{
4
,
7
,
9
,
11
,
13
,
14
,
15
,
63
,
4
,
7
,
9
,
11
,
13
,
14
,
15
,
63
,
7
,
7
,
11
,
12
,
14
,
15
,
63
,
63
,
7
,
7
,
11
,
12
,
14
,
15
,
63
,
63
,
...
@@ -104,10 +105,19 @@ static const uint8_t QMAT_LUMA[5][64] = {
...
@@ -104,10 +105,19 @@ static const uint8_t QMAT_LUMA[5][64] = {
4
,
4
,
4
,
4
,
4
,
5
,
5
,
6
,
4
,
4
,
4
,
4
,
4
,
5
,
5
,
6
,
4
,
4
,
4
,
4
,
5
,
5
,
6
,
7
,
4
,
4
,
4
,
4
,
5
,
5
,
6
,
7
,
4
,
4
,
4
,
4
,
5
,
6
,
7
,
7
4
,
4
,
4
,
4
,
5
,
6
,
7
,
7
},
{
/* 444 XQ */
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
3
,
2
,
2
,
2
,
2
,
2
,
2
,
3
,
3
,
2
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
4
,
2
,
2
,
2
,
2
,
3
,
3
,
4
,
4
,
}
}
};
};
static
const
uint8_t
QMAT_CHROMA
[
5
][
64
]
=
{
static
const
uint8_t
QMAT_CHROMA
[
6
][
64
]
=
{
{
{
4
,
7
,
9
,
11
,
13
,
14
,
63
,
63
,
4
,
7
,
9
,
11
,
13
,
14
,
63
,
63
,
7
,
7
,
11
,
12
,
14
,
63
,
63
,
63
,
7
,
7
,
11
,
12
,
14
,
63
,
63
,
63
,
...
@@ -153,6 +163,15 @@ static const uint8_t QMAT_CHROMA[5][64] = {
...
@@ -153,6 +163,15 @@ static const uint8_t QMAT_CHROMA[5][64] = {
4
,
4
,
4
,
4
,
4
,
5
,
5
,
6
,
4
,
4
,
4
,
4
,
4
,
5
,
5
,
6
,
4
,
4
,
4
,
4
,
5
,
5
,
6
,
7
,
4
,
4
,
4
,
4
,
5
,
5
,
6
,
7
,
4
,
4
,
4
,
4
,
5
,
6
,
7
,
7
4
,
4
,
4
,
4
,
5
,
6
,
7
,
7
},
{
/* 444 xq */
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
5
,
4
,
4
,
4
,
4
,
4
,
4
,
5
,
5
,
4
,
4
,
4
,
4
,
4
,
5
,
5
,
6
,
4
,
4
,
4
,
4
,
5
,
5
,
6
,
7
,
4
,
4
,
4
,
4
,
5
,
6
,
7
,
7
}
}
};
};
...
@@ -686,7 +705,7 @@ static int prores_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
...
@@ -686,7 +705,7 @@ static int prores_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
bytestream_put_buffer
(
&
buf
,
ctx
->
vendor
,
4
);
bytestream_put_buffer
(
&
buf
,
ctx
->
vendor
,
4
);
bytestream_put_be16
(
&
buf
,
avctx
->
width
);
bytestream_put_be16
(
&
buf
,
avctx
->
width
);
bytestream_put_be16
(
&
buf
,
avctx
->
height
);
bytestream_put_be16
(
&
buf
,
avctx
->
height
);
if
(
avctx
->
profile
==
FF_PROFILE_PRORES_4444
)
{
if
(
avctx
->
profile
>=
FF_PROFILE_PRORES_4444
)
{
/* 4444 or 4444 Xq */
*
buf
++
=
0xC2
;
// 444, not interlaced
*
buf
++
=
0xC2
;
// 444, not interlaced
}
else
{
}
else
{
*
buf
++
=
0x82
;
// 422, not interlaced
*
buf
++
=
0x82
;
// 422, not interlaced
...
@@ -768,16 +787,16 @@ static av_cold int prores_encode_init(AVCodecContext *avctx)
...
@@ -768,16 +787,16 @@ static av_cold int prores_encode_init(AVCodecContext *avctx)
return
AVERROR
(
EINVAL
);
return
AVERROR
(
EINVAL
);
}
}
}
else
if
(
avctx
->
profile
<
FF_PROFILE_PRORES_PROXY
}
else
if
(
avctx
->
profile
<
FF_PROFILE_PRORES_PROXY
||
avctx
->
profile
>
FF_PROFILE_PRORES_
4444
)
{
||
avctx
->
profile
>
FF_PROFILE_PRORES_
XQ
)
{
av_log
(
av_log
(
avctx
,
avctx
,
AV_LOG_ERROR
,
AV_LOG_ERROR
,
"unknown profile %d, use [0 - apco, 1 - apcs, 2 - apcn (default), 3 - apch, 4 - ap4h]
\n
"
,
"unknown profile %d, use [0 - apco, 1 - apcs, 2 - apcn (default), 3 - apch, 4 - ap4h
, 5 - ap4x
]
\n
"
,
avctx
->
profile
);
avctx
->
profile
);
return
AVERROR
(
EINVAL
);
return
AVERROR
(
EINVAL
);
}
else
if
((
avctx
->
pix_fmt
==
AV_PIX_FMT_YUV422P10
)
&&
(
avctx
->
profile
>
FF_PROFILE_PRORES_HQ
)){
}
else
if
((
avctx
->
pix_fmt
==
AV_PIX_FMT_YUV422P10
)
&&
(
avctx
->
profile
>
FF_PROFILE_PRORES_HQ
)){
av_log
(
avctx
,
AV_LOG_ERROR
,
av_log
(
avctx
,
AV_LOG_ERROR
,
"encoding with ProRes 444
(ap4h
) profile, need YUV444P10 input
\n
"
);
"encoding with ProRes 444
/Xq (ap4h/ap4x
) profile, need YUV444P10 input
\n
"
);
return
AVERROR
(
EINVAL
);
return
AVERROR
(
EINVAL
);
}
else
if
((
avctx
->
pix_fmt
==
AV_PIX_FMT_YUV444P10
||
avctx
->
pix_fmt
==
AV_PIX_FMT_YUVA444P10
)
}
else
if
((
avctx
->
pix_fmt
==
AV_PIX_FMT_YUV444P10
||
avctx
->
pix_fmt
==
AV_PIX_FMT_YUVA444P10
)
&&
(
avctx
->
profile
<
FF_PROFILE_PRORES_4444
)){
&&
(
avctx
->
profile
<
FF_PROFILE_PRORES_4444
)){
...
...
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