Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
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
Hide 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