Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
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
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
7a0342c8
Commit
7a0342c8
authored
4 years ago
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
decoder/ffmpeg: use AVFrame fields instead of AVCodecContext fields
parent
42c9d765
No related merge requests found
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
12 additions
and
14 deletions
+12
-14
FfmpegDecoderPlugin.cxx
src/decoder/plugins/FfmpegDecoderPlugin.cxx
+12
-14
No files found.
src/decoder/plugins/FfmpegDecoderPlugin.cxx
View file @
7a0342c8
...
...
@@ -182,25 +182,24 @@ start_time_fallback(const AVStream &stream)
* Throws #std::exception on error.
*/
static
ConstBuffer
<
void
>
copy_interleave_frame
(
const
AVCodecContext
&
codec_context
,
const
AVFrame
&
frame
,
FfmpegBuffer
&
global_buffer
)
copy_interleave_frame
(
const
AVFrame
&
frame
,
FfmpegBuffer
&
global_buffer
)
{
assert
(
frame
.
nb_samples
>
0
);
const
AVSampleFormat
format
=
AVSampleFormat
(
frame
.
format
);
const
unsigned
channels
=
frame
.
channels
;
const
std
::
size_t
n_frames
=
frame
.
nb_samples
;
int
plane_size
;
const
int
data_size
=
av_samples_get_buffer_size
(
&
plane_size
,
codec_context
.
channels
,
frame
.
nb_samples
,
codec_context
.
sample_fmt
,
1
);
av_samples_get_buffer_size
(
&
plane_size
,
channels
,
n_frames
,
format
,
1
);
assert
(
data_size
!=
0
);
if
(
data_size
<
0
)
throw
MakeFfmpegError
(
data_size
);
void
*
output_buffer
;
if
(
av_sample_fmt_is_planar
(
codec_context
.
sample_fmt
)
&&
codec_context
.
channels
>
1
)
{
if
(
av_sample_fmt_is_planar
(
format
)
&&
channels
>
1
)
{
output_buffer
=
global_buffer
.
GetT
<
uint8_t
>
(
data_size
);
if
(
output_buffer
==
nullptr
)
/* Not enough memory - shouldn't happen */
...
...
@@ -208,9 +207,9 @@ copy_interleave_frame(const AVCodecContext &codec_context,
PcmInterleave
(
output_buffer
,
ConstBuffer
<
const
void
*>
((
const
void
*
const
*
)
frame
.
extended_data
,
c
odec_context
.
c
hannels
),
frame
.
nb_sampl
es
,
av_get_bytes_per_sample
(
codec_context
.
sample_fm
t
));
channels
),
n_fram
es
,
av_get_bytes_per_sample
(
forma
t
));
}
else
{
output_buffer
=
frame
.
extended_data
[
0
];
}
...
...
@@ -257,8 +256,7 @@ FfmpegSendFrame(DecoderClient &client, InputStream *is,
size_t
&
skip_bytes
,
FfmpegBuffer
&
buffer
)
{
ConstBuffer
<
void
>
output_buffer
=
copy_interleave_frame
(
codec_context
,
frame
,
buffer
);
ConstBuffer
<
void
>
output_buffer
=
copy_interleave_frame
(
frame
,
buffer
);
if
(
skip_bytes
>
0
)
{
if
(
skip_bytes
>=
output_buffer
.
size
)
{
...
...
This diff is collapsed.
Click to expand it.
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