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
72301160
Commit
72301160
authored
Mar 14, 2012
by
Michael Niedermayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ffmpeg: Fix planar audio input.
Signed-off-by:
Michael Niedermayer
<
michaelni@gmx.at
>
parent
6968a7d1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
18 additions
and
7 deletions
+18
-7
ffmpeg.c
ffmpeg.c
+18
-7
No files found.
ffmpeg.c
View file @
72301160
...
...
@@ -1130,9 +1130,16 @@ static void do_audio_out(AVFormatContext *s, OutputStream *ost,
AVCodecContext
*
dec
=
ist
->
st
->
codec
;
int
osize
=
av_get_bytes_per_sample
(
enc
->
sample_fmt
);
int
isize
=
av_get_bytes_per_sample
(
dec
->
sample_fmt
);
uint8_t
*
buf
=
decoded_frame
->
data
[
0
];
uint8_t
*
buf
[
AV_NUM_DATA_POINTERS
];
int
size
=
decoded_frame
->
nb_samples
*
dec
->
channels
*
isize
;
int
planes
=
av_sample_fmt_is_planar
(
dec
->
sample_fmt
)
?
dec
->
channels
:
1
;
int64_t
allocated_for_size
=
size
;
int
i
;
av_assert0
(
planes
<=
AV_NUM_DATA_POINTERS
);
for
(
i
=
0
;
i
<
planes
;
i
++
)
buf
[
i
]
=
decoded_frame
->
data
[
i
];
need_realloc:
audio_buf_size
=
(
allocated_for_size
+
isize
*
dec
->
channels
-
1
)
/
(
isize
*
dec
->
channels
);
...
...
@@ -1229,7 +1236,8 @@ need_realloc:
if
(
byte_delta
<
0
)
{
byte_delta
=
FFMAX
(
byte_delta
,
-
size
);
size
+=
byte_delta
;
buf
-=
byte_delta
;
for
(
i
=
0
;
i
<
planes
;
i
++
)
buf
[
i
]
-=
byte_delta
/
planes
;
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"discarding %d audio samples
\n
"
,
-
byte_delta
/
(
isize
*
dec
->
channels
));
if
(
!
size
)
...
...
@@ -1244,9 +1252,12 @@ need_realloc:
}
ist
->
is_start
=
0
;
generate_silence
(
input_tmp
,
dec
->
sample_fmt
,
byte_delta
);
memcpy
(
input_tmp
+
byte_delta
,
buf
,
size
);
buf
=
input_tmp
;
for
(
i
=
0
;
i
<
planes
;
i
++
)
{
uint8_t
*
t
=
input_tmp
+
i
*
((
byte_delta
+
size
)
/
planes
);
generate_silence
(
t
,
dec
->
sample_fmt
,
byte_delta
/
planes
);
memcpy
(
t
+
byte_delta
/
planes
,
buf
[
i
],
size
/
planes
);
buf
[
i
]
=
t
;
}
size
+=
byte_delta
;
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"adding %d audio samples of silence
\n
"
,
idelta
);
}
...
...
@@ -1266,14 +1277,14 @@ need_realloc:
if
(
ost
->
audio_resample
||
ost
->
audio_channels_mapped
)
{
buftmp
=
audio_buf
;
size_out
=
swr_convert
(
ost
->
swr
,
(
uint8_t
*
[]){
buftmp
},
audio_buf_size
/
(
enc
->
channels
*
osize
),
(
const
uint8_t
*
[]){
buf
}
,
size
/
(
dec
->
channels
*
isize
));
buf
,
size
/
(
dec
->
channels
*
isize
));
if
(
size_out
<
0
)
{
av_log
(
NULL
,
AV_LOG_FATAL
,
"swr_convert failed
\n
"
);
exit_program
(
1
);
}
size_out
=
size_out
*
enc
->
channels
*
osize
;
}
else
{
buftmp
=
buf
;
buftmp
=
buf
[
0
]
;
size_out
=
size
;
}
...
...
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