Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Xiph.Org
aom-rav1e
Commits
9c9fdf30
Commit
9c9fdf30
authored
Jan 13, 2014
by
Dmitry Kovalev
Committed by
Gerrit Code Review
Jan 13, 2014
Browse files
Merge "Adding raw_read_frame() function to vpxdec."
parents
ff0d073d
f0fde243
Changes
1
Hide whitespace changes
Inline
Side-by-side
vpxdec.c
View file @
9c9fdf30
...
...
@@ -167,64 +167,68 @@ void usage_exit() {
exit
(
EXIT_FAILURE
);
}
static
int
read_frame
(
struct
VpxDecInputContext
*
input
,
uint8_t
**
buf
,
size_t
*
bytes_in_buffer
,
size_t
*
buffer_size
)
{
static
int
raw_read_frame
(
struct
VpxInputContext
*
input_ctx
,
uint8_t
**
buffer
,
size_t
*
bytes_read
,
size_t
*
buffer_size
)
{
char
raw_hdr
[
RAW_FRAME_HDR_SZ
];
size_t
bytes_to_read
=
0
;
FILE
*
infile
=
input
->
vpx_input_ctx
->
file
;
enum
VideoFileType
kind
=
input
->
vpx_input_ctx
->
file_type
;
if
(
kind
==
FILE_TYPE_WEBM
)
{
return
webm_read_frame
(
input
->
webm_ctx
,
buf
,
bytes_in_buffer
,
buffer_size
);
}
else
if
(
kind
==
FILE_TYPE_RAW
)
{
if
(
fread
(
raw_hdr
,
RAW_FRAME_HDR_SZ
,
1
,
infile
)
!=
1
)
{
if
(
!
feof
(
infile
))
warn
(
"Failed to read RAW frame size
\n
"
);
}
else
{
const
int
kCorruptFrameThreshold
=
256
*
1024
*
1024
;
const
int
kFrameTooSmallThreshold
=
256
*
1024
;
bytes_to_read
=
mem_get_le32
(
raw_hdr
);
if
(
bytes_to_read
>
kCorruptFrameThreshold
)
{
warn
(
"Read invalid frame size (%u)
\n
"
,
(
unsigned
int
)
bytes_to_read
);
bytes_to_read
=
0
;
}
size_t
frame_size
=
0
;
FILE
*
infile
=
input_ctx
->
file
;
if
(
kind
==
FILE_TYPE_RAW
&&
bytes_to_read
<
kFrameTooSmallThreshold
)
{
warn
(
"Warning: Read invalid frame size (%u) - not a raw file?
\n
"
,
(
unsigned
int
)
bytes_to_read
);
}
if
(
fread
(
raw_hdr
,
RAW_FRAME_HDR_SZ
,
1
,
infile
)
!=
1
)
{
if
(
!
feof
(
infile
))
warn
(
"Failed to read RAW frame size
\n
"
);
}
else
{
const
int
kCorruptFrameThreshold
=
256
*
1024
*
1024
;
const
int
kFrameTooSmallThreshold
=
256
*
1024
;
frame_size
=
mem_get_le32
(
raw_hdr
);
if
(
bytes_to_read
>
*
buffer_size
)
{
uint8_t
*
new_buf
=
realloc
(
*
buf
,
2
*
bytes_to_read
);
if
(
frame_size
>
kCorruptFrameThreshold
)
{
warn
(
"Read invalid frame size (%u)
\n
"
,
(
unsigned
int
)
frame_size
);
frame_size
=
0
;
}
if
(
new_buf
)
{
*
buf
=
new_buf
;
*
buffer_size
=
2
*
bytes_to_read
;
}
else
{
warn
(
"Failed to allocate compressed data buffer
\n
"
);
bytes_to_read
=
0
;
}
}
if
(
frame_size
<
kFrameTooSmallThreshold
)
{
warn
(
"Warning: Read invalid frame size (%u) - not a raw file?
\n
"
,
(
unsigned
int
)
frame_size
);
}
if
(
!
feof
(
infile
))
{
if
(
fread
(
*
buf
,
1
,
bytes_to_read
,
infile
)
!=
bytes_to_read
)
{
warn
(
"Failed to read full frame
\n
"
);
return
1
;
if
(
frame_size
>
*
buffer_size
)
{
uint8_t
*
new_buf
=
realloc
(
*
buffer
,
2
*
frame_size
);
if
(
new_buf
)
{
*
buffer
=
new_buf
;
*
buffer_size
=
2
*
frame_size
;
}
else
{
warn
(
"Failed to allocate compressed data buffer
\n
"
);
frame_size
=
0
;
}
*
bytes_in_buffer
=
bytes_to_read
;
}
}
return
0
;
}
else
if
(
kind
==
FILE_TYPE_IVF
)
{
return
ivf_read_frame
(
input
->
vpx_input_ctx
,
buf
,
bytes_in_buffer
,
buffer_size
);
if
(
!
feof
(
infile
))
{
if
(
fread
(
*
buffer
,
1
,
frame_size
,
infile
)
!=
frame_size
)
{
warn
(
"Failed to read full frame
\n
"
);
return
1
;
}
*
bytes_read
=
frame_size
;
}
return
1
;
return
0
;
}
static
int
read_frame
(
struct
VpxDecInputContext
*
input
,
uint8_t
**
buf
,
size_t
*
bytes_in_buffer
,
size_t
*
buffer_size
)
{
switch
(
input
->
vpx_input_ctx
->
file_type
)
{
case
FILE_TYPE_WEBM
:
return
webm_read_frame
(
input
->
webm_ctx
,
buf
,
bytes_in_buffer
,
buffer_size
);
case
FILE_TYPE_RAW
:
return
raw_read_frame
(
input
->
vpx_input_ctx
,
buf
,
bytes_in_buffer
,
buffer_size
);
case
FILE_TYPE_IVF
:
return
ivf_read_frame
(
input
->
vpx_input_ctx
,
buf
,
bytes_in_buffer
,
buffer_size
);
default:
return
1
;
}
}
void
*
out_open
(
const
char
*
out_fn
,
int
do_md5
)
{
...
...
Write
Preview
Supports
Markdown
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