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
4a1ac8c4
Commit
4a1ac8c4
authored
May 10, 2012
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavfi: move buffer management function to a separate file.
parent
4c64fed3
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
169 additions
and
147 deletions
+169
-147
Makefile
libavfilter/Makefile
+1
-0
avfilter.c
libavfilter/avfilter.c
+0
-138
buffer.c
libavfilter/buffer.c
+168
-0
defaults.c
libavfilter/defaults.c
+0
-9
No files found.
libavfilter/Makefile
View file @
4a1ac8c4
...
...
@@ -15,6 +15,7 @@ OBJS = allfilters.o \
audio.o
\
avfilter.o
\
avfiltergraph.o
\
buffer.o
\
buffersink.o
\
buffersrc.o
\
defaults.o
\
...
...
libavfilter/avfilter.c
View file @
4a1ac8c4
...
...
@@ -24,8 +24,6 @@
#include "libavutil/pixdesc.h"
#include "libavutil/rational.h"
#include "libavutil/audioconvert.h"
#include "libavutil/imgutils.h"
#include "libavcodec/avcodec.h"
#include "avfilter.h"
#include "formats.h"
...
...
@@ -46,59 +44,6 @@ const char *avfilter_license(void)
return
LICENSE_PREFIX
LIBAV_LICENSE
+
sizeof
(
LICENSE_PREFIX
)
-
1
;
}
AVFilterBufferRef
*
avfilter_ref_buffer
(
AVFilterBufferRef
*
ref
,
int
pmask
)
{
AVFilterBufferRef
*
ret
=
av_malloc
(
sizeof
(
AVFilterBufferRef
));
if
(
!
ret
)
return
NULL
;
*
ret
=
*
ref
;
if
(
ref
->
type
==
AVMEDIA_TYPE_VIDEO
)
{
ret
->
video
=
av_malloc
(
sizeof
(
AVFilterBufferRefVideoProps
));
if
(
!
ret
->
video
)
{
av_free
(
ret
);
return
NULL
;
}
*
ret
->
video
=
*
ref
->
video
;
ret
->
extended_data
=
ret
->
data
;
}
else
if
(
ref
->
type
==
AVMEDIA_TYPE_AUDIO
)
{
ret
->
audio
=
av_malloc
(
sizeof
(
AVFilterBufferRefAudioProps
));
if
(
!
ret
->
audio
)
{
av_free
(
ret
);
return
NULL
;
}
*
ret
->
audio
=
*
ref
->
audio
;
if
(
ref
->
extended_data
!=
ref
->
data
)
{
int
nb_channels
=
av_get_channel_layout_nb_channels
(
ref
->
audio
->
channel_layout
);
if
(
!
(
ret
->
extended_data
=
av_malloc
(
sizeof
(
*
ret
->
extended_data
)
*
nb_channels
)))
{
av_freep
(
&
ret
->
audio
);
av_freep
(
&
ret
);
return
NULL
;
}
memcpy
(
ret
->
extended_data
,
ref
->
extended_data
,
sizeof
(
*
ret
->
extended_data
)
*
nb_channels
);
}
else
ret
->
extended_data
=
ret
->
data
;
}
ret
->
perms
&=
pmask
;
ret
->
buf
->
refcount
++
;
return
ret
;
}
void
avfilter_unref_buffer
(
AVFilterBufferRef
*
ref
)
{
if
(
!
ref
)
return
;
if
(
!
(
--
ref
->
buf
->
refcount
))
ref
->
buf
->
free
(
ref
->
buf
);
if
(
ref
->
extended_data
!=
ref
->
data
)
av_freep
(
&
ref
->
extended_data
);
av_free
(
ref
->
video
);
av_free
(
ref
->
audio
);
av_free
(
ref
);
}
void
avfilter_insert_pad
(
unsigned
idx
,
unsigned
*
count
,
size_t
padidx_off
,
AVFilterPad
**
pads
,
AVFilterLink
***
links
,
AVFilterPad
*
newpad
)
...
...
@@ -469,86 +414,3 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
ret
=
filter
->
filter
->
init
(
filter
,
args
,
opaque
);
return
ret
;
}
int
avfilter_copy_frame_props
(
AVFilterBufferRef
*
dst
,
const
AVFrame
*
src
)
{
dst
->
pts
=
src
->
pts
;
dst
->
format
=
src
->
format
;
switch
(
dst
->
type
)
{
case
AVMEDIA_TYPE_VIDEO
:
dst
->
video
->
w
=
src
->
width
;
dst
->
video
->
h
=
src
->
height
;
dst
->
video
->
pixel_aspect
=
src
->
sample_aspect_ratio
;
dst
->
video
->
interlaced
=
src
->
interlaced_frame
;
dst
->
video
->
top_field_first
=
src
->
top_field_first
;
dst
->
video
->
key_frame
=
src
->
key_frame
;
dst
->
video
->
pict_type
=
src
->
pict_type
;
break
;
case
AVMEDIA_TYPE_AUDIO
:
dst
->
audio
->
sample_rate
=
src
->
sample_rate
;
dst
->
audio
->
channel_layout
=
src
->
channel_layout
;
break
;
default:
return
AVERROR
(
EINVAL
);
}
return
0
;
}
int
avfilter_copy_buf_props
(
AVFrame
*
dst
,
const
AVFilterBufferRef
*
src
)
{
int
planes
,
nb_channels
;
memcpy
(
dst
->
data
,
src
->
data
,
sizeof
(
dst
->
data
));
memcpy
(
dst
->
linesize
,
src
->
linesize
,
sizeof
(
dst
->
linesize
));
dst
->
pts
=
src
->
pts
;
dst
->
format
=
src
->
format
;
switch
(
src
->
type
)
{
case
AVMEDIA_TYPE_VIDEO
:
dst
->
width
=
src
->
video
->
w
;
dst
->
height
=
src
->
video
->
h
;
dst
->
sample_aspect_ratio
=
src
->
video
->
pixel_aspect
;
dst
->
interlaced_frame
=
src
->
video
->
interlaced
;
dst
->
top_field_first
=
src
->
video
->
top_field_first
;
dst
->
key_frame
=
src
->
video
->
key_frame
;
dst
->
pict_type
=
src
->
video
->
pict_type
;
break
;
case
AVMEDIA_TYPE_AUDIO
:
nb_channels
=
av_get_channel_layout_nb_channels
(
src
->
audio
->
channel_layout
);
planes
=
av_sample_fmt_is_planar
(
src
->
format
)
?
nb_channels
:
1
;
if
(
planes
>
FF_ARRAY_ELEMS
(
dst
->
data
))
{
dst
->
extended_data
=
av_mallocz
(
planes
*
sizeof
(
*
dst
->
extended_data
));
if
(
!
dst
->
extended_data
)
return
AVERROR
(
ENOMEM
);
memcpy
(
dst
->
extended_data
,
src
->
extended_data
,
planes
*
sizeof
(
dst
->
extended_data
));
}
else
dst
->
extended_data
=
dst
->
data
;
dst
->
sample_rate
=
src
->
audio
->
sample_rate
;
dst
->
channel_layout
=
src
->
audio
->
channel_layout
;
dst
->
nb_samples
=
src
->
audio
->
nb_samples
;
break
;
default:
return
AVERROR
(
EINVAL
);
}
return
0
;
}
void
avfilter_copy_buffer_ref_props
(
AVFilterBufferRef
*
dst
,
AVFilterBufferRef
*
src
)
{
// copy common properties
dst
->
pts
=
src
->
pts
;
dst
->
pos
=
src
->
pos
;
switch
(
src
->
type
)
{
case
AVMEDIA_TYPE_VIDEO
:
*
dst
->
video
=
*
src
->
video
;
break
;
case
AVMEDIA_TYPE_AUDIO
:
*
dst
->
audio
=
*
src
->
audio
;
break
;
default:
break
;
}
}
libavfilter/buffer.c
0 → 100644
View file @
4a1ac8c4
/*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "libavutil/audioconvert.h"
#include "libavcodec/avcodec.h"
#include "avfilter.h"
#include "internal.h"
/* TODO: buffer pool. see comment for avfilter_default_get_video_buffer() */
void
ff_avfilter_default_free_buffer
(
AVFilterBuffer
*
ptr
)
{
if
(
ptr
->
extended_data
!=
ptr
->
data
)
av_freep
(
&
ptr
->
extended_data
);
av_free
(
ptr
->
data
[
0
]);
av_free
(
ptr
);
}
AVFilterBufferRef
*
avfilter_ref_buffer
(
AVFilterBufferRef
*
ref
,
int
pmask
)
{
AVFilterBufferRef
*
ret
=
av_malloc
(
sizeof
(
AVFilterBufferRef
));
if
(
!
ret
)
return
NULL
;
*
ret
=
*
ref
;
if
(
ref
->
type
==
AVMEDIA_TYPE_VIDEO
)
{
ret
->
video
=
av_malloc
(
sizeof
(
AVFilterBufferRefVideoProps
));
if
(
!
ret
->
video
)
{
av_free
(
ret
);
return
NULL
;
}
*
ret
->
video
=
*
ref
->
video
;
ret
->
extended_data
=
ret
->
data
;
}
else
if
(
ref
->
type
==
AVMEDIA_TYPE_AUDIO
)
{
ret
->
audio
=
av_malloc
(
sizeof
(
AVFilterBufferRefAudioProps
));
if
(
!
ret
->
audio
)
{
av_free
(
ret
);
return
NULL
;
}
*
ret
->
audio
=
*
ref
->
audio
;
if
(
ref
->
extended_data
!=
ref
->
data
)
{
int
nb_channels
=
av_get_channel_layout_nb_channels
(
ref
->
audio
->
channel_layout
);
if
(
!
(
ret
->
extended_data
=
av_malloc
(
sizeof
(
*
ret
->
extended_data
)
*
nb_channels
)))
{
av_freep
(
&
ret
->
audio
);
av_freep
(
&
ret
);
return
NULL
;
}
memcpy
(
ret
->
extended_data
,
ref
->
extended_data
,
sizeof
(
*
ret
->
extended_data
)
*
nb_channels
);
}
else
ret
->
extended_data
=
ret
->
data
;
}
ret
->
perms
&=
pmask
;
ret
->
buf
->
refcount
++
;
return
ret
;
}
void
avfilter_unref_buffer
(
AVFilterBufferRef
*
ref
)
{
if
(
!
ref
)
return
;
if
(
!
(
--
ref
->
buf
->
refcount
))
ref
->
buf
->
free
(
ref
->
buf
);
if
(
ref
->
extended_data
!=
ref
->
data
)
av_freep
(
&
ref
->
extended_data
);
av_free
(
ref
->
video
);
av_free
(
ref
->
audio
);
av_free
(
ref
);
}
int
avfilter_copy_frame_props
(
AVFilterBufferRef
*
dst
,
const
AVFrame
*
src
)
{
dst
->
pts
=
src
->
pts
;
dst
->
format
=
src
->
format
;
switch
(
dst
->
type
)
{
case
AVMEDIA_TYPE_VIDEO
:
dst
->
video
->
w
=
src
->
width
;
dst
->
video
->
h
=
src
->
height
;
dst
->
video
->
pixel_aspect
=
src
->
sample_aspect_ratio
;
dst
->
video
->
interlaced
=
src
->
interlaced_frame
;
dst
->
video
->
top_field_first
=
src
->
top_field_first
;
dst
->
video
->
key_frame
=
src
->
key_frame
;
dst
->
video
->
pict_type
=
src
->
pict_type
;
break
;
case
AVMEDIA_TYPE_AUDIO
:
dst
->
audio
->
sample_rate
=
src
->
sample_rate
;
dst
->
audio
->
channel_layout
=
src
->
channel_layout
;
break
;
default:
return
AVERROR
(
EINVAL
);
}
return
0
;
}
int
avfilter_copy_buf_props
(
AVFrame
*
dst
,
const
AVFilterBufferRef
*
src
)
{
int
planes
,
nb_channels
;
memcpy
(
dst
->
data
,
src
->
data
,
sizeof
(
dst
->
data
));
memcpy
(
dst
->
linesize
,
src
->
linesize
,
sizeof
(
dst
->
linesize
));
dst
->
pts
=
src
->
pts
;
dst
->
format
=
src
->
format
;
switch
(
src
->
type
)
{
case
AVMEDIA_TYPE_VIDEO
:
dst
->
width
=
src
->
video
->
w
;
dst
->
height
=
src
->
video
->
h
;
dst
->
sample_aspect_ratio
=
src
->
video
->
pixel_aspect
;
dst
->
interlaced_frame
=
src
->
video
->
interlaced
;
dst
->
top_field_first
=
src
->
video
->
top_field_first
;
dst
->
key_frame
=
src
->
video
->
key_frame
;
dst
->
pict_type
=
src
->
video
->
pict_type
;
break
;
case
AVMEDIA_TYPE_AUDIO
:
nb_channels
=
av_get_channel_layout_nb_channels
(
src
->
audio
->
channel_layout
);
planes
=
av_sample_fmt_is_planar
(
src
->
format
)
?
nb_channels
:
1
;
if
(
planes
>
FF_ARRAY_ELEMS
(
dst
->
data
))
{
dst
->
extended_data
=
av_mallocz
(
planes
*
sizeof
(
*
dst
->
extended_data
));
if
(
!
dst
->
extended_data
)
return
AVERROR
(
ENOMEM
);
memcpy
(
dst
->
extended_data
,
src
->
extended_data
,
planes
*
sizeof
(
dst
->
extended_data
));
}
else
dst
->
extended_data
=
dst
->
data
;
dst
->
sample_rate
=
src
->
audio
->
sample_rate
;
dst
->
channel_layout
=
src
->
audio
->
channel_layout
;
dst
->
nb_samples
=
src
->
audio
->
nb_samples
;
break
;
default:
return
AVERROR
(
EINVAL
);
}
return
0
;
}
void
avfilter_copy_buffer_ref_props
(
AVFilterBufferRef
*
dst
,
AVFilterBufferRef
*
src
)
{
// copy common properties
dst
->
pts
=
src
->
pts
;
dst
->
pos
=
src
->
pos
;
switch
(
src
->
type
)
{
case
AVMEDIA_TYPE_VIDEO
:
*
dst
->
video
=
*
src
->
video
;
break
;
case
AVMEDIA_TYPE_AUDIO
:
*
dst
->
audio
=
*
src
->
audio
;
break
;
default:
break
;
}
}
libavfilter/defaults.c
View file @
4a1ac8c4
...
...
@@ -27,15 +27,6 @@
#include "internal.h"
#include "formats.h"
/* TODO: buffer pool. see comment for avfilter_default_get_video_buffer() */
void
ff_avfilter_default_free_buffer
(
AVFilterBuffer
*
ptr
)
{
if
(
ptr
->
extended_data
!=
ptr
->
data
)
av_freep
(
&
ptr
->
extended_data
);
av_free
(
ptr
->
data
[
0
]);
av_free
(
ptr
);
}
/**
* default config_link() implementation for output video links to simplify
* the implementation of one input one output video filters */
...
...
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