Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
BC
public
external
libvpx
Commits
44138d7d
Commit
44138d7d
authored
Jun 05, 2015
by
Frank Galligan
Committed by
Gerrit Code Review
Jun 05, 2015
Browse files
Options
Browse Files
Download
Plain Diff
Merge "vpxenc: Add support for pixel aspect ratio."
parents
a4dad3e9
09acd267
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
62 additions
and
7 deletions
+62
-7
test/test-data.mk
test/test-data.mk
+1
-0
test/test-data.sha1
test/test-data.sha1
+1
-0
test/tools_common.sh
test/tools_common.sh
+4
-1
test/vpxenc.sh
test/vpxenc.sh
+30
-1
tools_common.h
tools_common.h
+1
-0
vpxenc.c
vpxenc.c
+12
-3
webmenc.cc
webmenc.cc
+11
-1
webmenc.h
webmenc.h
+2
-1
No files found.
test/test-data.mk
View file @
44138d7d
...
...
@@ -12,6 +12,7 @@ LIBVPX_TEST_DATA-$(CONFIG_ENCODERS) += park_joy_90p_12_420.y4m
LIBVPX_TEST_DATA-$(CONFIG_ENCODERS)
+=
park_joy_90p_12_422.y4m
LIBVPX_TEST_DATA-$(CONFIG_ENCODERS)
+=
park_joy_90p_12_444.y4m
LIBVPX_TEST_DATA-$(CONFIG_ENCODERS)
+=
park_joy_90p_12_440.yuv
LIBVPX_TEST_DATA-$(CONFIG_ENCODERS)
+=
park_joy_90p_8_420_a10-1.y4m
LIBVPX_TEST_DATA-$(CONFIG_ENCODERS)
+=
park_joy_90p_8_420.y4m
LIBVPX_TEST_DATA-$(CONFIG_ENCODERS)
+=
park_joy_90p_8_422.y4m
LIBVPX_TEST_DATA-$(CONFIG_ENCODERS)
+=
park_joy_90p_8_444.y4m
...
...
test/test-data.sha1
View file @
44138d7d
...
...
@@ -22,6 +22,7 @@ c934da6fb8cc54ee2a8c17c54cf6076dac37ead0 *park_joy_90p_10_440.yuv
c92825f1ea25c5c37855083a69faac6ac4641a9e *park_joy_90p_12_422.y4m
b592189b885b6cc85db55cc98512a197d73d3b34 *park_joy_90p_12_444.y4m
82c1bfcca368c2f22bad7d693d690d5499ecdd11 *park_joy_90p_12_440.yuv
b9e1e90aece2be6e2c90d89e6ab2372d5f8c792d *park_joy_90p_8_420_a10-1.y4m
4e0eb61e76f0684188d9bc9f3ce61f6b6b77bb2c *park_joy_90p_8_420.y4m
7a193ff7dfeb96ba5f82b2afd7afa9e1fe83d947 *park_joy_90p_8_422.y4m
bdb7856e6bc93599bdda05c2e773a9f22b6c6d03 *park_joy_90p_8_444.y4m
...
...
test/tools_common.sh
View file @
44138d7d
...
...
@@ -408,6 +408,8 @@ YUV_RAW_INPUT="${LIBVPX_TEST_DATA_PATH}/hantro_collage_w352h288.yuv"
YUV_RAW_INPUT_WIDTH
=
352
YUV_RAW_INPUT_HEIGHT
=
288
Y4M_NOSQ_PAR_INPUT
=
"
${
LIBVPX_TEST_DATA_PATH
}
/park_joy_90p_8_420_a10-1.y4m"
# Setup a trap function to clean up after tests complete.
trap
cleanup EXIT
...
...
@@ -429,6 +431,7 @@ vlog "$(basename "${0%.*}") test configuration:
VPX_TEST_VERBOSE_OUTPUT=
${
VPX_TEST_VERBOSE_OUTPUT
}
YUV_RAW_INPUT=
${
YUV_RAW_INPUT
}
YUV_RAW_INPUT_WIDTH=
${
YUV_RAW_INPUT_WIDTH
}
YUV_RAW_INPUT_HEIGHT=
${
YUV_RAW_INPUT_HEIGHT
}
"
YUV_RAW_INPUT_HEIGHT=
${
YUV_RAW_INPUT_HEIGHT
}
Y4M_NOSQ_PAR_INPUT=
${
Y4M_NOSQ_PAR_INPUT
}
"
fi
# End $VPX_TEST_TOOLS_COMMON_SH pseudo include guard.
test/vpxenc.sh
View file @
44138d7d
...
...
@@ -23,6 +23,13 @@ vpxenc_verify_environment() {
elog
"The file
${
YUV_RAW_INPUT
##*/
}
must exist in LIBVPX_TEST_DATA_PATH."
return
1
fi
if
[
"
$(
vpxenc_can_encode_vp9
)
"
=
"yes"
]
;
then
if
[
!
-e
"
${
Y4M_NOSQ_PAR_INPUT
}
"
]
;
then
elog
"The file
${
Y4M_NOSQ_PAR_INPUT
##*/
}
must exist in"
elog
"LIBVPX_TEST_DATA_PATH."
return
1
fi
fi
if
[
-z
"
$(
vpx_tool_path vpxenc
)
"
]
;
then
elog
"vpxenc not found. It must exist in LIBVPX_BIN_PATH or its parent."
return
1
...
...
@@ -49,6 +56,10 @@ yuv_input_hantro_collage() {
--height="
${
YUV_RAW_INPUT_HEIGHT
}
""
}
y4m_input_non_square_par
()
{
echo
""
${
Y4M_NOSQ_PAR_INPUT
}
""
}
# Echo default vpxenc real time encoding params. $1 is the codec, which defaults
# to vp8 if unspecified.
vpxenc_rt_params
()
{
...
...
@@ -320,6 +331,23 @@ vpxenc_vp9_webm_lag10_frames20() {
fi
}
# TODO(fgalligan): Test that DisplayWidth is different than video width.
vpxenc_vp9_webm_non_square_par
()
{
if
[
"
$(
vpxenc_can_encode_vp9
)
"
=
"yes"
]
&&
\
[
"
$(
webm_io_available
)
"
=
"yes"
]
;
then
local readonly
output
=
"
${
VPX_TEST_OUTPUT_DIR
}
/vp9_non_square_par.webm"
vpxenc
$(
y4m_input_non_square_par
)
\
--codec
=
vp9
\
--limit
=
"
${
TEST_FRAMES
}
"
\
--output
=
"
${
output
}
"
if
[
!
-e
"
${
output
}
"
]
;
then
elog
"Output file does not exist."
return
1
fi
fi
}
vpxenc_tests
=
"vpxenc_vp8_ivf
vpxenc_vp8_webm
vpxenc_vp8_webm_rt
...
...
@@ -332,6 +360,7 @@ vpxenc_tests="vpxenc_vp8_ivf
vpxenc_vp9_webm_2pass
vpxenc_vp9_ivf_lossless
vpxenc_vp9_ivf_minq0_maxq0
vpxenc_vp9_webm_lag10_frames20"
vpxenc_vp9_webm_lag10_frames20
vpxenc_vp9_webm_non_square_par"
run_tests vpxenc_verify_environment
"
${
vpxenc_tests
}
"
tools_common.h
View file @
44138d7d
...
...
@@ -89,6 +89,7 @@ struct VpxInputContext {
enum
VideoFileType
file_type
;
uint32_t
width
;
uint32_t
height
;
struct
VpxRational
pixel_aspect_ratio
;
vpx_img_fmt_t
fmt
;
vpx_bit_depth_t
bit_depth
;
int
only_i420
;
...
...
vpxenc.c
View file @
44138d7d
...
...
@@ -944,6 +944,10 @@ static void open_input_file(struct VpxInputContext *input) {
rewind
(
input
->
file
);
}
/* Default to 1:1 pixel aspect ratio. */
input
->
pixel_aspect_ratio
.
numerator
=
1
;
input
->
pixel_aspect_ratio
.
denominator
=
1
;
/* For RAW input sources, these bytes will applied on the first frame
* in read_frame().
*/
...
...
@@ -957,6 +961,8 @@ static void open_input_file(struct VpxInputContext *input) {
input
->
file_type
=
FILE_TYPE_Y4M
;
input
->
width
=
input
->
y4m
.
pic_w
;
input
->
height
=
input
->
y4m
.
pic_h
;
input
->
pixel_aspect_ratio
.
numerator
=
input
->
y4m
.
par_n
;
input
->
pixel_aspect_ratio
.
denominator
=
input
->
y4m
.
par_d
;
input
->
framerate
.
numerator
=
input
->
y4m
.
fps_n
;
input
->
framerate
.
denominator
=
input
->
y4m
.
fps_d
;
input
->
fmt
=
input
->
y4m
.
vpx_fmt
;
...
...
@@ -1390,7 +1396,8 @@ static void show_stream_config(struct stream_state *stream,
static
void
open_output_file
(
struct
stream_state
*
stream
,
struct
VpxEncoderConfig
*
global
)
{
struct
VpxEncoderConfig
*
global
,
const
struct
VpxRational
*
pixel_aspect_ratio
)
{
const
char
*
fn
=
stream
->
config
.
out_fn
;
const
struct
vpx_codec_enc_cfg
*
const
cfg
=
&
stream
->
config
.
cfg
;
...
...
@@ -1411,7 +1418,8 @@ static void open_output_file(struct stream_state *stream,
write_webm_file_header
(
&
stream
->
ebml
,
cfg
,
&
global
->
framerate
,
stream
->
config
.
stereo_fmt
,
global
->
codec
->
fourcc
);
global
->
codec
->
fourcc
,
pixel_aspect_ratio
);
}
#endif
...
...
@@ -2044,7 +2052,8 @@ int main(int argc, const char **argv_) {
}
FOREACH_STREAM
(
setup_pass
(
stream
,
&
global
,
pass
));
FOREACH_STREAM
(
open_output_file
(
stream
,
&
global
));
FOREACH_STREAM
(
open_output_file
(
stream
,
&
global
,
&
input
.
pixel_aspect_ratio
));
FOREACH_STREAM
(
initialize_encoder
(
stream
,
&
global
));
#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH
...
...
webmenc.cc
View file @
44138d7d
...
...
@@ -24,7 +24,8 @@ void write_webm_file_header(struct EbmlGlobal *glob,
const
vpx_codec_enc_cfg_t
*
cfg
,
const
struct
vpx_rational
*
fps
,
stereo_format_t
stereo_fmt
,
unsigned
int
fourcc
)
{
unsigned
int
fourcc
,
const
struct
VpxRational
*
par
)
{
mkvmuxer
::
MkvWriter
*
const
writer
=
new
mkvmuxer
::
MkvWriter
(
glob
->
stream
);
mkvmuxer
::
Segment
*
const
segment
=
new
mkvmuxer
::
Segment
();
segment
->
Init
(
writer
);
...
...
@@ -49,6 +50,15 @@ void write_webm_file_header(struct EbmlGlobal *glob,
segment
->
GetTrackByNumber
(
video_track_id
));
video_track
->
SetStereoMode
(
stereo_fmt
);
video_track
->
set_codec_id
(
fourcc
==
VP8_FOURCC
?
"V_VP8"
:
"V_VP9"
);
if
(
par
->
numerator
>
1
||
par
->
denominator
>
1
)
{
// TODO(fgalligan): Add support of DisplayUnit, Display Aspect Ratio type
// to WebM format.
const
uint64_t
display_width
=
static_cast
<
uint64_t
>
(((
cfg
->
g_w
*
par
->
numerator
*
1.0
)
/
par
->
denominator
)
+
.5
);
video_track
->
set_display_width
(
display_width
);
video_track
->
set_display_height
(
cfg
->
g_h
);
}
if
(
glob
->
debug
)
{
video_track
->
set_uid
(
kDebugTrackUid
);
}
...
...
webmenc.h
View file @
44138d7d
...
...
@@ -42,7 +42,8 @@ void write_webm_file_header(struct EbmlGlobal *glob,
const
vpx_codec_enc_cfg_t
*
cfg
,
const
struct
vpx_rational
*
fps
,
stereo_format_t
stereo_fmt
,
unsigned
int
fourcc
);
unsigned
int
fourcc
,
const
struct
VpxRational
*
par
);
void
write_webm_block
(
struct
EbmlGlobal
*
glob
,
const
vpx_codec_enc_cfg_t
*
cfg
,
...
...
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