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 / Register
Toggle navigation
Open sidebar
Xiph.Org
aom-rav1e
Commits
7ec27696
Commit
7ec27696
authored
Jan 27, 2014
by
Dmitry Kovalev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adapting simple_decoder to use new file reading API.
Change-Id: I374a0c4bb4a66c0d3dc874c6e57fdee9d1ab72df
parent
442ff059
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
117 additions
and
121 deletions
+117
-121
examples.mk
examples.mk
+4
-2
examples/decode_to_md5.c
examples/decode_to_md5.c
+0
-23
examples/simple_decoder.c
examples/simple_decoder.c
+60
-88
tools_common.c
tools_common.c
+44
-0
tools_common.h
tools_common.h
+9
-0
vp9_spatial_scalable_encoder.c
vp9_spatial_scalable_encoder.c
+0
-8
No files found.
examples.mk
View file @
7ec27696
...
...
@@ -70,8 +70,10 @@ vp9_spatial_scalable_encoder.DESCRIPTION = Spatial Scalable Encoder
#example_xma.DESCRIPTION = External Memory Allocation mode usage
GEN_EXAMPLES-$(CONFIG_VP8_DECODER)
+=
simple_decoder.c
simple_decoder.GUID
=
D3BBF1E9-2427-450D-BBFF-B2843C1D44CC
simple_decoder.DESCRIPTION
=
Simplified decoder loop
simple_decoder.GUID
=
D3BBF1E9-2427-450D-BBFF-B2843C1D44CC
simple_decoder.SRCS
+=
ivfdec.h ivfdec.c
simple_decoder.SRCS
+=
tools_common.h tools_common.c
simple_decoder.DESCRIPTION
=
Simplified decoder loop
GEN_EXAMPLES-$(CONFIG_VP8_DECODER)
+=
postproc.c
postproc.GUID
=
65E33355-F35E-4088-884D-3FD4905881D7
postproc.DESCRIPTION
=
Decoder postprocessor control
...
...
examples/decode_to_md5.c
View file @
7ec27696
...
...
@@ -29,7 +29,6 @@
// is processed, then U, then V. It is important to honor the image's `stride`
// values.
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
...
...
@@ -44,28 +43,6 @@
#include "./tools_common.h"
#include "./vpx_config.h"
#define VP8_FOURCC 0x30385056
#define VP9_FOURCC 0x30395056
static
vpx_codec_iface_t
*
get_codec_interface
(
unsigned
int
fourcc
)
{
switch
(
fourcc
)
{
case
VP8_FOURCC
:
return
vpx_codec_vp8_dx
();
case
VP9_FOURCC
:
return
vpx_codec_vp9_dx
();
}
return
NULL
;
}
static
void
die_codec
(
vpx_codec_ctx_t
*
ctx
,
const
char
*
s
)
{
const
char
*
detail
=
vpx_codec_error_detail
(
ctx
);
printf
(
"%s: %s
\n
"
,
s
,
vpx_codec_error
(
ctx
));
if
(
detail
)
printf
(
" %s
\n
"
,
detail
);
exit
(
EXIT_FAILURE
);
}
static
void
get_image_md5
(
const
vpx_image_t
*
img
,
unsigned
char
digest
[
16
])
{
int
plane
,
y
;
MD5Context
md5
;
...
...
examples/simple_decoder.c
View file @
7ec27696
...
...
@@ -77,110 +77,82 @@
// few exeptions, vpx_codec functions return an enumerated error status,
// with the value `0` indicating success.
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define VPX_CODEC_DISABLE_COMPAT 1
#include "./vpx_config.h"
#include "vpx/vp8dx.h"
#include "vpx/vpx_decoder.h"
#define interface (vpx_codec_vp8_dx())
#include "./ivfdec.h"
#include "./tools_common.h"
#include "./vpx_config.h"
#define IVF_FILE_HDR_SZ (32)
#define IVF_FRAME_HDR_SZ (12)
static
const
char
*
exec_name
;
static
unsigned
int
mem_get_le32
(
const
unsigned
char
*
mem
)
{
return
(
mem
[
3
]
<<
24
)
|
(
mem
[
2
]
<<
16
)
|
(
mem
[
1
]
<<
8
)
|
(
mem
[
0
]);
void
usage_exit
()
{
fprintf
(
stderr
,
"Usage: %s <infile> <outfile>
\n
"
,
exec_name
);
exit
(
EXIT_FAILURE
);
}
static
void
die
(
const
char
*
fmt
,
...)
{
va_list
ap
;
int
main
(
int
argc
,
char
**
argv
)
{
FILE
*
infile
,
*
outfile
;
vpx_codec_ctx_t
codec
;
vpx_codec_iface_t
*
iface
;
int
flags
=
0
,
frame_cnt
=
0
;
vpx_video_t
*
video
;
va_start
(
ap
,
fmt
);
vprintf
(
fmt
,
ap
);
if
(
fmt
[
strlen
(
fmt
)
-
1
]
!=
'\n'
)
printf
(
"
\n
"
);
exit
(
EXIT_FAILURE
);
}
exec_name
=
argv
[
0
];
static
void
die_codec
(
vpx_codec_ctx_t
*
ctx
,
const
char
*
s
)
{
const
char
*
detail
=
vpx_codec_error_detail
(
ctx
);
if
(
argc
!=
3
)
die
(
"Invalid number of arguments"
);
printf
(
"%s: %s
\n
"
,
s
,
vpx_codec_error
(
ctx
));
if
(
detail
)
printf
(
" %s
\n
"
,
detail
);
exit
(
EXIT_FAILURE
);
}
if
(
!
(
infile
=
fopen
(
argv
[
1
],
"rb"
)))
die
(
"Failed to open %s for reading"
,
argv
[
1
]);
if
(
!
(
outfile
=
fopen
(
argv
[
2
],
"wb"
)))
die
(
"Failed to open %s for writing"
,
argv
[
2
]);
int
main
(
int
argc
,
char
**
argv
)
{
FILE
*
infile
,
*
outfile
;
vpx_codec_ctx_t
codec
;
int
flags
=
0
,
frame_cnt
=
0
;
unsigned
char
file_hdr
[
IVF_FILE_HDR_SZ
];
unsigned
char
frame_hdr
[
IVF_FRAME_HDR_SZ
];
unsigned
char
frame
[
256
*
1024
];
vpx_codec_err_t
res
;
(
void
)
res
;
/* Open files */
if
(
argc
!=
3
)
die
(
"Usage: %s <infile> <outfile>
\n
"
,
argv
[
0
]);
if
(
!
(
infile
=
fopen
(
argv
[
1
],
"rb"
)))
die
(
"Failed to open %s for reading"
,
argv
[
1
]);
if
(
!
(
outfile
=
fopen
(
argv
[
2
],
"wb"
)))
die
(
"Failed to open %s for writing"
,
argv
[
2
]);
/* Read file header */
if
(
!
(
fread
(
file_hdr
,
1
,
IVF_FILE_HDR_SZ
,
infile
)
==
IVF_FILE_HDR_SZ
&&
file_hdr
[
0
]
==
'D'
&&
file_hdr
[
1
]
==
'K'
&&
file_hdr
[
2
]
==
'I'
&&
file_hdr
[
3
]
==
'F'
))
die
(
"%s is not an IVF file."
,
argv
[
1
]);
printf
(
"Using %s
\n
"
,
vpx_codec_iface_name
(
interface
));
/* Initialize codec */
if
(
vpx_codec_dec_init
(
&
codec
,
interface
,
NULL
,
flags
))
die_codec
(
&
codec
,
"Failed to initialize decoder"
);
/* Read each frame */
while
(
fread
(
frame_hdr
,
1
,
IVF_FRAME_HDR_SZ
,
infile
)
==
IVF_FRAME_HDR_SZ
)
{
int
frame_sz
=
mem_get_le32
(
frame_hdr
);
vpx_codec_iter_t
iter
=
NULL
;
vpx_image_t
*
img
;
frame_cnt
++
;
if
(
frame_sz
>
sizeof
(
frame
))
die
(
"Frame %d data too big for example code buffer"
,
frame_sz
);
if
(
fread
(
frame
,
1
,
frame_sz
,
infile
)
!=
frame_sz
)
die
(
"Frame %d failed to read complete frame"
,
frame_cnt
);
/* Decode the frame */
if
(
vpx_codec_decode
(
&
codec
,
frame
,
frame_sz
,
NULL
,
0
))
die_codec
(
&
codec
,
"Failed to decode frame"
);
/* Write decoded data to disk */
while
((
img
=
vpx_codec_get_frame
(
&
codec
,
&
iter
)))
{
unsigned
int
plane
,
y
;
for
(
plane
=
0
;
plane
<
3
;
plane
++
)
{
unsigned
char
*
buf
=
img
->
planes
[
plane
];
for
(
y
=
0
;
y
<
(
plane
?
(
img
->
d_h
+
1
)
>>
1
:
img
->
d_h
);
y
++
)
{
(
void
)
fwrite
(
buf
,
1
,
(
plane
?
(
img
->
d_w
+
1
)
>>
1
:
img
->
d_w
),
outfile
);
buf
+=
img
->
stride
[
plane
];
}
}
}
video
=
vpx_video_open_file
(
infile
);
if
(
!
video
)
die
(
"%s is not an IVF file."
,
argv
[
1
]);
iface
=
get_codec_interface
(
vpx_video_get_fourcc
(
video
));
if
(
!
iface
)
die
(
"Unknown FOURCC code."
);
printf
(
"Using %s
\n
"
,
vpx_codec_iface_name
(
iface
));
if
(
vpx_codec_dec_init
(
&
codec
,
iface
,
NULL
,
flags
))
die_codec
(
&
codec
,
"Failed to initialize decoder"
);
while
(
vpx_video_read_frame
(
video
))
{
vpx_codec_iter_t
iter
=
NULL
;
vpx_image_t
*
img
=
NULL
;
size_t
frame_size
=
0
;
const
unsigned
char
*
frame
=
vpx_video_get_frame
(
video
,
&
frame_size
);
if
(
vpx_codec_decode
(
&
codec
,
frame
,
frame_size
,
NULL
,
0
))
die_codec
(
&
codec
,
"Failed to decode frame"
);
while
((
img
=
vpx_codec_get_frame
(
&
codec
,
&
iter
))
!=
NULL
)
{
vpx_img_write
(
img
,
outfile
);
++
frame_cnt
;
}
printf
(
"Processed %d frames.
\n
"
,
frame_cnt
);
if
(
vpx_codec_destroy
(
&
codec
))
die_codec
(
&
codec
,
"Failed to destroy codec"
);
}
printf
(
"Processed %d frames.
\n
"
,
frame_cnt
);
if
(
vpx_codec_destroy
(
&
codec
))
die_codec
(
&
codec
,
"Failed to destroy codec"
);
printf
(
"Play: ffplay -f rawvideo -pix_fmt yuv420p -s %dx%d %s
\n
"
,
vpx_video_get_width
(
video
),
vpx_video_get_height
(
video
),
argv
[
2
]);
vpx_video_close
(
video
);
fclose
(
outfile
);
fclose
(
infile
);
fclose
(
outfile
);
fclose
(
infile
);
return
EXIT_SUCCESS
;
return
EXIT_SUCCESS
;
}
tools_common.c
View file @
7ec27696
...
...
@@ -15,6 +15,10 @@
#include <stdlib.h>
#include <string.h>
#if CONFIG_VP8_DECODER || CONFIG_VP9_DECODER
#include "vpx/vp8dx.h"
#endif
#if defined(_WIN32) || defined(__OS2__)
#include <io.h>
#include <fcntl.h>
...
...
@@ -60,6 +64,15 @@ void warn(const char *fmt, ...) {
LOG_ERROR
(
"Warning"
);
}
void
die_codec
(
vpx_codec_ctx_t
*
ctx
,
const
char
*
s
)
{
const
char
*
detail
=
vpx_codec_error_detail
(
ctx
);
printf
(
"%s: %s
\n
"
,
s
,
vpx_codec_error
(
ctx
));
if
(
detail
)
printf
(
" %s
\n
"
,
detail
);
exit
(
EXIT_FAILURE
);
}
uint16_t
mem_get_le16
(
const
void
*
data
)
{
uint16_t
val
;
const
uint8_t
*
mem
=
(
const
uint8_t
*
)
data
;
...
...
@@ -130,3 +143,34 @@ int read_yuv_frame(struct VpxInputContext *input_ctx, vpx_image_t *yuv_frame) {
return
shortread
;
}
vpx_codec_iface_t
*
get_codec_interface
(
unsigned
int
fourcc
)
{
switch
(
fourcc
)
{
#if CONFIG_VP8_DECODER
case
VP8_FOURCC
:
return
vpx_codec_vp8_dx
();
#endif
#if CONFIG_VP9_DECODER
case
VP9_FOURCC
:
return
vpx_codec_vp9_dx
();
#endif
default:
return
NULL
;
}
return
NULL
;
}
void
vpx_img_write
(
const
vpx_image_t
*
img
,
FILE
*
file
)
{
int
plane
,
y
;
for
(
plane
=
0
;
plane
<
3
;
++
plane
)
{
const
unsigned
char
*
buf
=
img
->
planes
[
plane
];
const
int
stride
=
img
->
stride
[
plane
];
const
int
w
=
plane
?
(
img
->
d_w
+
1
)
>>
1
:
img
->
d_w
;
const
int
h
=
plane
?
(
img
->
d_h
+
1
)
>>
1
:
img
->
d_h
;
for
(
y
=
0
;
y
<
h
;
++
y
)
{
fwrite
(
buf
,
1
,
w
,
file
);
buf
+=
stride
;
}
}
}
tools_common.h
View file @
7ec27696
...
...
@@ -13,6 +13,7 @@
#include <stdio.h>
#include "./vpx_config.h"
#include "vpx/vpx_codec.h"
#include "vpx/vpx_image.h"
#include "vpx/vpx_integer.h"
...
...
@@ -112,6 +113,8 @@ void die(const char *fmt, ...);
void
fatal
(
const
char
*
fmt
,
...);
void
warn
(
const
char
*
fmt
,
...);
void
die_codec
(
vpx_codec_ctx_t
*
ctx
,
const
char
*
s
);
/* The tool including this file must define usage_exit() */
void
usage_exit
();
...
...
@@ -120,6 +123,12 @@ uint32_t mem_get_le32(const void *data);
int
read_yuv_frame
(
struct
VpxInputContext
*
input_ctx
,
vpx_image_t
*
yuv_frame
);
vpx_codec_iface_t
*
get_codec_interface
(
unsigned
int
fourcc
);
// TODO(dkovalev): move this function to vpx_image.{c, h}, so it will be part
// of vpx_image_t support
void
vpx_img_write
(
const
vpx_image_t
*
img
,
FILE
*
file
);
#ifdef __cplusplus
}
/* extern "C" */
#endif
...
...
vp9_spatial_scalable_encoder.c
View file @
7ec27696
...
...
@@ -89,14 +89,6 @@ void usage_exit() {
exit
(
EXIT_FAILURE
);
}
static
void
die_codec
(
vpx_codec_ctx_t
*
ctx
,
const
char
*
s
)
{
const
char
*
detail
=
vpx_codec_error_detail
(
ctx
);
printf
(
"%s: %s
\n
"
,
s
,
vpx_codec_error
(
ctx
));
if
(
detail
)
printf
(
" %s
\n
"
,
detail
);
exit
(
EXIT_FAILURE
);
}
static
void
parse_command_line
(
int
argc
,
const
char
**
argv_
,
AppInput
*
app_input
,
SvcContext
*
svc_ctx
,
vpx_codec_enc_cfg_t
*
enc_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