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
0096453f
Commit
0096453f
authored
Feb 15, 2016
by
Kieran Kunhya
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cfhd: reallocate internal buffers on format change.
Fixes some, but not all, of the threading fuzz crashes
parent
d39b770a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
14 additions
and
6 deletions
+14
-6
cfhd.c
libavcodec/cfhd.c
+12
-6
cfhd.h
libavcodec/cfhd.h
+2
-0
No files found.
libavcodec/cfhd.c
View file @
0096453f
...
...
@@ -156,6 +156,7 @@ static int alloc_buffers(AVCodecContext *avctx)
if
((
ret
=
ff_set_dimensions
(
avctx
,
s
->
coded_width
,
s
->
coded_height
))
<
0
)
return
ret
;
avctx
->
pix_fmt
=
s
->
coded_format
;
avcodec_get_chroma_sub_sample
(
avctx
->
pix_fmt
,
&
s
->
chroma_x_shift
,
&
s
->
chroma_y_shift
);
...
...
@@ -213,6 +214,7 @@ static int alloc_buffers(AVCodecContext *avctx)
s
->
a_height
=
s
->
coded_height
;
s
->
a_width
=
s
->
coded_width
;
s
->
a_format
=
s
->
coded_format
;
return
0
;
}
...
...
@@ -227,7 +229,7 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame,
int
ret
=
0
,
i
,
j
,
plane
,
got_buffer
=
0
;
int16_t
*
coeff_data
;
avctx
->
pix_fm
t
=
AV_PIX_FMT_YUV422P10
;
s
->
coded_forma
t
=
AV_PIX_FMT_YUV422P10
;
init_frame_defaults
(
s
);
bytestream2_init
(
&
gb
,
avpkt
->
data
,
avpkt
->
size
);
...
...
@@ -405,9 +407,9 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame,
}
else
if
(
tag
==
84
)
{
av_log
(
avctx
,
AV_LOG_DEBUG
,
"Sample format? %i
\n
"
,
data
);
if
(
data
==
1
)
avctx
->
pix_fm
t
=
AV_PIX_FMT_YUV422P10
;
s
->
coded_forma
t
=
AV_PIX_FMT_YUV422P10
;
else
if
(
data
==
3
)
avctx
->
pix_fm
t
=
AV_PIX_FMT_GBRP12
;
s
->
coded_forma
t
=
AV_PIX_FMT_GBRP12
;
else
{
avpriv_report_missing_feature
(
avctx
,
"Sample format of %"
PRIu16
" is unsupported
\n
"
,
data
);
ret
=
AVERROR_PATCHWELCOME
;
...
...
@@ -417,8 +419,10 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame,
av_log
(
avctx
,
AV_LOG_DEBUG
,
"Unknown tag %i data %x
\n
"
,
tag
,
data
);
/* Some kind of end of header tag */
if
(
tag
==
4
&&
data
==
0x1a4a
&&
s
->
coded_width
&&
s
->
coded_height
&&
avctx
->
pix_fmt
!=
AV_PIX_FMT_NONE
)
{
if
(
s
->
a_width
!=
s
->
coded_width
||
s
->
a_height
!=
s
->
coded_height
)
{
if
(
tag
==
4
&&
data
==
0x1a4a
&&
s
->
coded_width
&&
s
->
coded_height
&&
s
->
coded_format
!=
AV_PIX_FMT_NONE
)
{
if
(
s
->
a_width
!=
s
->
coded_width
||
s
->
a_height
!=
s
->
coded_height
||
s
->
a_format
!=
s
->
coded_format
)
{
free_buffers
(
avctx
);
if
((
ret
=
alloc_buffers
(
avctx
))
<
0
)
{
free_buffers
(
avctx
);
...
...
@@ -431,6 +435,7 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame,
s
->
coded_width
=
0
;
s
->
coded_height
=
0
;
s
->
coded_format
=
AV_PIX_FMT_NONE
;
got_buffer
=
1
;
}
coeff_data
=
s
->
plane
[
s
->
channel_num
].
subband
[
s
->
subband_num_actual
];
...
...
@@ -557,7 +562,8 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame,
}
}
if
(
!
s
->
a_width
||
!
s
->
a_height
||
s
->
coded_width
||
s
->
coded_height
)
{
if
(
!
s
->
a_width
||
!
s
->
a_height
||
s
->
a_format
==
AV_PIX_FMT_NONE
||
s
->
coded_width
||
s
->
coded_height
||
s
->
coded_format
!=
AV_PIX_FMT_NONE
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Invalid dimensions
\n
"
);
ret
=
AVERROR
(
EINVAL
);
goto
end
;
...
...
libavcodec/cfhd.h
View file @
0096453f
...
...
@@ -84,9 +84,11 @@ typedef struct CFHDContext {
int
coded_width
;
int
coded_height
;
int
coded_format
;
int
a_width
;
int
a_height
;
int
a_format
;
int
bpc
;
int
channel_cnt
;
...
...
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