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
5b6cc3a7
Commit
5b6cc3a7
authored
Apr 23, 2018
by
Karthick Jeyapal
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avformat/vpcc: Calculate VP9 level from Luma's Sample rate and Picture size
parent
798ae879
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
51 additions
and
4 deletions
+51
-4
vpcc.c
libavformat/vpcc.c
+50
-3
vpcc.h
libavformat/vpcc.h
+1
-1
No files found.
libavformat/vpcc.c
View file @
5b6cc3a7
...
@@ -67,11 +67,58 @@ static int get_vpx_video_full_range_flag(enum AVColorRange color_range)
...
@@ -67,11 +67,58 @@ static int get_vpx_video_full_range_flag(enum AVColorRange color_range)
return
color_range
==
AVCOL_RANGE_JPEG
;
return
color_range
==
AVCOL_RANGE_JPEG
;
}
}
// Find approximate VP9 level based on the Luma's Sample rate and Picture size.
static
int
get_vp9_level
(
AVCodecParameters
*
par
,
AVRational
*
frame_rate
)
{
int
picture_size
=
par
->
width
*
par
->
height
;
int64_t
sample_rate
;
// All decisions will be based on picture_size, if frame rate is missing/invalid
if
(
!
frame_rate
||
!
frame_rate
->
den
)
sample_rate
=
0
;
else
sample_rate
=
((
int64_t
)
picture_size
*
frame_rate
->
num
)
/
frame_rate
->
den
;
if
(
picture_size
<=
0
)
{
return
0
;
}
else
if
(
sample_rate
<=
829440
&&
picture_size
<=
36864
)
{
return
0x10
;
}
else
if
(
sample_rate
<=
2764800
&&
picture_size
<=
73728
)
{
return
0x11
;
}
else
if
(
sample_rate
<=
4608000
&&
picture_size
<=
122880
)
{
return
0x20
;
}
else
if
(
sample_rate
<=
9216000
&&
picture_size
<=
245760
)
{
return
0x21
;
}
else
if
(
sample_rate
<=
20736000
&&
picture_size
<=
552960
)
{
return
0x30
;
}
else
if
(
sample_rate
<=
36864000
&&
picture_size
<=
983040
)
{
return
0x31
;
}
else
if
(
sample_rate
<=
83558400
&&
picture_size
<=
2228224
)
{
return
0x40
;
}
else
if
(
sample_rate
<=
160432128
&&
picture_size
<=
2228224
)
{
return
0x41
;
}
else
if
(
sample_rate
<=
311951360
&&
picture_size
<=
8912896
)
{
return
0x50
;
}
else
if
(
sample_rate
<=
588251136
&&
picture_size
<=
8912896
)
{
return
0x51
;
}
else
if
(
sample_rate
<=
1176502272
&&
picture_size
<=
8912896
)
{
return
0x52
;
}
else
if
(
sample_rate
<=
1176502272
&&
picture_size
<=
35651584
)
{
return
0x60
;
}
else
if
(
sample_rate
<=
2353004544
&&
picture_size
<=
35651584
)
{
return
0x61
;
}
else
if
(
sample_rate
<=
4706009088
&&
picture_size
<=
35651584
)
{
return
0x62
;
}
else
{
return
0
;
}
}
int
ff_isom_get_vpcc_features
(
AVFormatContext
*
s
,
AVCodecParameters
*
par
,
int
ff_isom_get_vpcc_features
(
AVFormatContext
*
s
,
AVCodecParameters
*
par
,
VPCC
*
vpcc
)
AVRational
*
frame_rate
,
VPCC
*
vpcc
)
{
{
int
profile
=
par
->
profile
;
int
profile
=
par
->
profile
;
int
level
=
par
->
level
==
FF_LEVEL_UNKNOWN
?
0
:
par
->
level
;
int
level
=
par
->
level
==
FF_LEVEL_UNKNOWN
?
get_vp9_level
(
par
,
frame_rate
)
:
par
->
level
;
int
bit_depth
=
get_bit_depth
(
s
,
par
->
format
);
int
bit_depth
=
get_bit_depth
(
s
,
par
->
format
);
int
vpx_chroma_subsampling
=
int
vpx_chroma_subsampling
=
get_vpx_chroma_subsampling
(
s
,
par
->
format
,
par
->
chroma_location
);
get_vpx_chroma_subsampling
(
s
,
par
->
format
,
par
->
chroma_location
);
...
@@ -105,7 +152,7 @@ int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb,
...
@@ -105,7 +152,7 @@ int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb,
VPCC
vpcc
;
VPCC
vpcc
;
int
ret
;
int
ret
;
ret
=
ff_isom_get_vpcc_features
(
s
,
par
,
&
vpcc
);
ret
=
ff_isom_get_vpcc_features
(
s
,
par
,
NULL
,
&
vpcc
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
ret
;
...
...
libavformat/vpcc.h
View file @
5b6cc3a7
...
@@ -53,6 +53,6 @@ int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb,
...
@@ -53,6 +53,6 @@ int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb,
AVCodecParameters
*
par
);
AVCodecParameters
*
par
);
int
ff_isom_get_vpcc_features
(
AVFormatContext
*
s
,
AVCodecParameters
*
par
,
int
ff_isom_get_vpcc_features
(
AVFormatContext
*
s
,
AVCodecParameters
*
par
,
VPCC
*
vpcc
);
AVRational
*
frame_rate
,
VPCC
*
vpcc
);
#endif
/* AVFORMAT_VPCC_H */
#endif
/* AVFORMAT_VPCC_H */
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