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
f6974fe6
Commit
f6974fe6
authored
Jul 28, 2015
by
Vittorio Giovara
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavfi: Drop deprecated AVFilterBuffer* code
Deprecated in 11/2012.
parent
e65e4cbb
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
0 additions
and
762 deletions
+0
-762
Makefile
libavfilter/Makefile
+0
-1
audio.c
libavfilter/audio.c
+0
-72
avfilter.h
libavfilter/avfilter.h
+0
-219
buffer.c
libavfilter/buffer.c
+0
-181
buffersink.c
libavfilter/buffersink.c
+0
-74
buffersink.h
libavfilter/buffersink.h
+0
-37
buffersrc.c
libavfilter/buffersrc.c
+0
-108
buffersrc.h
libavfilter/buffersrc.h
+0
-15
internal.h
libavfilter/internal.h
+0
-5
version.h
libavfilter/version.h
+0
-3
video.c
libavfilter/video.c
+0
-47
No files found.
libavfilter/Makefile
View file @
f6974fe6
...
...
@@ -10,7 +10,6 @@ OBJS = allfilters.o \
audio.o
\
avfilter.o
\
avfiltergraph.o
\
buffer.o
\
buffersink.o
\
buffersrc.o
\
drawutils.o
\
...
...
libavfilter/audio.c
View file @
f6974fe6
...
...
@@ -66,75 +66,3 @@ AVFrame *ff_get_audio_buffer(AVFilterLink *link, int nb_samples)
return
ret
;
}
#if FF_API_AVFILTERBUFFER
AVFilterBufferRef
*
avfilter_get_audio_buffer_ref_from_arrays
(
uint8_t
**
data
,
int
linesize
,
int
perms
,
int
nb_samples
,
enum
AVSampleFormat
sample_fmt
,
uint64_t
channel_layout
)
{
int
planes
;
AVFilterBuffer
*
samples
=
av_mallocz
(
sizeof
(
*
samples
));
AVFilterBufferRef
*
samplesref
=
av_mallocz
(
sizeof
(
*
samplesref
));
if
(
!
samples
||
!
samplesref
)
goto
fail
;
samplesref
->
buf
=
samples
;
samplesref
->
buf
->
free
=
ff_avfilter_default_free_buffer
;
if
(
!
(
samplesref
->
audio
=
av_mallocz
(
sizeof
(
*
samplesref
->
audio
))))
goto
fail
;
samplesref
->
audio
->
nb_samples
=
nb_samples
;
samplesref
->
audio
->
channel_layout
=
channel_layout
;
samplesref
->
audio
->
planar
=
av_sample_fmt_is_planar
(
sample_fmt
);
planes
=
samplesref
->
audio
->
planar
?
av_get_channel_layout_nb_channels
(
channel_layout
)
:
1
;
/* make sure the buffer gets read permission or it's useless for output */
samplesref
->
perms
=
perms
|
AV_PERM_READ
;
samples
->
refcount
=
1
;
samplesref
->
type
=
AVMEDIA_TYPE_AUDIO
;
samplesref
->
format
=
sample_fmt
;
memcpy
(
samples
->
data
,
data
,
FFMIN
(
FF_ARRAY_ELEMS
(
samples
->
data
),
planes
)
*
sizeof
(
samples
->
data
[
0
]));
memcpy
(
samplesref
->
data
,
samples
->
data
,
sizeof
(
samples
->
data
));
samples
->
linesize
[
0
]
=
samplesref
->
linesize
[
0
]
=
linesize
;
if
(
planes
>
FF_ARRAY_ELEMS
(
samples
->
data
))
{
samples
->
extended_data
=
av_mallocz
(
sizeof
(
*
samples
->
extended_data
)
*
planes
);
samplesref
->
extended_data
=
av_mallocz
(
sizeof
(
*
samplesref
->
extended_data
)
*
planes
);
if
(
!
samples
->
extended_data
||
!
samplesref
->
extended_data
)
goto
fail
;
memcpy
(
samples
->
extended_data
,
data
,
sizeof
(
*
data
)
*
planes
);
memcpy
(
samplesref
->
extended_data
,
data
,
sizeof
(
*
data
)
*
planes
);
}
else
{
samples
->
extended_data
=
samples
->
data
;
samplesref
->
extended_data
=
samplesref
->
data
;
}
samplesref
->
pts
=
AV_NOPTS_VALUE
;
return
samplesref
;
fail:
if
(
samples
&&
samples
->
extended_data
!=
samples
->
data
)
av_freep
(
&
samples
->
extended_data
);
if
(
samplesref
)
{
av_freep
(
&
samplesref
->
audio
);
if
(
samplesref
->
extended_data
!=
samplesref
->
data
)
av_freep
(
&
samplesref
->
extended_data
);
}
av_freep
(
&
samplesref
);
av_freep
(
&
samples
);
return
NULL
;
}
#endif
libavfilter/avfilter.h
View file @
f6974fe6
...
...
@@ -66,168 +66,6 @@ typedef struct AVFilterLink AVFilterLink;
typedef
struct
AVFilterPad
AVFilterPad
;
typedef
struct
AVFilterFormats
AVFilterFormats
;
#if FF_API_AVFILTERBUFFER
/**
* A reference-counted buffer data type used by the filter system. Filters
* should not store pointers to this structure directly, but instead use the
* AVFilterBufferRef structure below.
*/
typedef
struct
AVFilterBuffer
{
uint8_t
*
data
[
8
];
///< buffer data for each plane/channel
/**
* pointers to the data planes/channels.
*
* For video, this should simply point to data[].
*
* For planar audio, each channel has a separate data pointer, and
* linesize[0] contains the size of each channel buffer.
* For packed audio, there is just one data pointer, and linesize[0]
* contains the total size of the buffer for all channels.
*
* Note: Both data and extended_data will always be set, but for planar
* audio with more channels that can fit in data, extended_data must be used
* in order to access all channels.
*/
uint8_t
**
extended_data
;
int
linesize
[
8
];
///< number of bytes per line
/** private data to be used by a custom free function */
void
*
priv
;
/**
* A pointer to the function to deallocate this buffer if the default
* function is not sufficient. This could, for example, add the memory
* back into a memory pool to be reused later without the overhead of
* reallocating it from scratch.
*/
void
(
*
free
)(
struct
AVFilterBuffer
*
buf
);
int
format
;
///< media format
int
w
,
h
;
///< width and height of the allocated buffer
unsigned
refcount
;
///< number of references to this buffer
}
AVFilterBuffer
;
#define AV_PERM_READ 0x01 ///< can read from the buffer
#define AV_PERM_WRITE 0x02 ///< can write to the buffer
#define AV_PERM_PRESERVE 0x04 ///< nobody else can overwrite the buffer
#define AV_PERM_REUSE 0x08 ///< can output the buffer multiple times, with the same contents each time
#define AV_PERM_REUSE2 0x10 ///< can output the buffer multiple times, modified each time
#define AV_PERM_NEG_LINESIZES 0x20 ///< the buffer requested can have negative linesizes
/**
* Audio specific properties in a reference to an AVFilterBuffer. Since
* AVFilterBufferRef is common to different media formats, audio specific
* per reference properties must be separated out.
*/
typedef
struct
AVFilterBufferRefAudioProps
{
uint64_t
channel_layout
;
///< channel layout of audio buffer
int
nb_samples
;
///< number of audio samples
int
sample_rate
;
///< audio buffer sample rate
int
planar
;
///< audio buffer - planar or packed
}
AVFilterBufferRefAudioProps
;
/**
* Video specific properties in a reference to an AVFilterBuffer. Since
* AVFilterBufferRef is common to different media formats, video specific
* per reference properties must be separated out.
*/
typedef
struct
AVFilterBufferRefVideoProps
{
int
w
;
///< image width
int
h
;
///< image height
AVRational
pixel_aspect
;
///< pixel aspect ratio
int
interlaced
;
///< is frame interlaced
int
top_field_first
;
///< field order
enum
AVPictureType
pict_type
;
///< picture type of the frame
int
key_frame
;
///< 1 -> keyframe, 0-> not
}
AVFilterBufferRefVideoProps
;
/**
* A reference to an AVFilterBuffer. Since filters can manipulate the origin of
* a buffer to, for example, crop image without any memcpy, the buffer origin
* and dimensions are per-reference properties. Linesize is also useful for
* image flipping, frame to field filters, etc, and so is also per-reference.
*
* TODO: add anything necessary for frame reordering
*/
typedef
struct
AVFilterBufferRef
{
AVFilterBuffer
*
buf
;
///< the buffer that this is a reference to
uint8_t
*
data
[
8
];
///< picture/audio data for each plane
/**
* pointers to the data planes/channels.
*
* For video, this should simply point to data[].
*
* For planar audio, each channel has a separate data pointer, and
* linesize[0] contains the size of each channel buffer.
* For packed audio, there is just one data pointer, and linesize[0]
* contains the total size of the buffer for all channels.
*
* Note: Both data and extended_data will always be set, but for planar
* audio with more channels that can fit in data, extended_data must be used
* in order to access all channels.
*/
uint8_t
**
extended_data
;
int
linesize
[
8
];
///< number of bytes per line
AVFilterBufferRefVideoProps
*
video
;
///< video buffer specific properties
AVFilterBufferRefAudioProps
*
audio
;
///< audio buffer specific properties
/**
* presentation timestamp. The time unit may change during
* filtering, as it is specified in the link and the filter code
* may need to rescale the PTS accordingly.
*/
int64_t
pts
;
int64_t
pos
;
///< byte position in stream, -1 if unknown
int
format
;
///< media format
int
perms
;
///< permissions, see the AV_PERM_* flags
enum
AVMediaType
type
;
///< media type of buffer data
}
AVFilterBufferRef
;
/**
* Copy properties of src to dst, without copying the actual data
*/
attribute_deprecated
void
avfilter_copy_buffer_ref_props
(
AVFilterBufferRef
*
dst
,
AVFilterBufferRef
*
src
);
/**
* Add a new reference to a buffer.
*
* @param ref an existing reference to the buffer
* @param pmask a bitmask containing the allowable permissions in the new
* reference
* @return a new reference to the buffer with the same properties as the
* old, excluding any permissions denied by pmask
*/
attribute_deprecated
AVFilterBufferRef
*
avfilter_ref_buffer
(
AVFilterBufferRef
*
ref
,
int
pmask
);
/**
* Remove a reference to a buffer. If this is the last reference to the
* buffer, the buffer itself is also automatically freed.
*
* @param ref reference to the buffer, may be NULL
*
* @note it is recommended to use avfilter_unref_bufferp() instead of this
* function
*/
attribute_deprecated
void
avfilter_unref_buffer
(
AVFilterBufferRef
*
ref
);
/**
* Remove a reference to a buffer and set the pointer to NULL.
* If this is the last reference to the buffer, the buffer itself
* is also automatically freed.
*
* @param ref pointer to the buffer reference
*/
attribute_deprecated
void
avfilter_unref_bufferp
(
AVFilterBufferRef
**
ref
);
#endif
/**
* Get the number of elements in a NULL-terminated array of AVFilterPads (e.g.
* AVFilter.inputs/outputs).
...
...
@@ -559,43 +397,6 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad,
*/
int
avfilter_config_links
(
AVFilterContext
*
filter
);
#if FF_API_AVFILTERBUFFER
/**
* Create a buffer reference wrapped around an already allocated image
* buffer.
*
* @param data pointers to the planes of the image to reference
* @param linesize linesizes for the planes of the image to reference
* @param perms the required access permissions
* @param w the width of the image specified by the data and linesize arrays
* @param h the height of the image specified by the data and linesize arrays
* @param format the pixel format of the image specified by the data and linesize arrays
*/
attribute_deprecated
AVFilterBufferRef
*
avfilter_get_video_buffer_ref_from_arrays
(
uint8_t
*
data
[
4
],
int
linesize
[
4
],
int
perms
,
int
w
,
int
h
,
enum
AVPixelFormat
format
);
/**
* Create an audio buffer reference wrapped around an already
* allocated samples buffer.
*
* @param data pointers to the samples plane buffers
* @param linesize linesize for the samples plane buffers
* @param perms the required access permissions
* @param nb_samples number of samples per channel
* @param sample_fmt the format of each sample in the buffer to allocate
* @param channel_layout the channel layout of the buffer
*/
attribute_deprecated
AVFilterBufferRef
*
avfilter_get_audio_buffer_ref_from_arrays
(
uint8_t
**
data
,
int
linesize
,
int
perms
,
int
nb_samples
,
enum
AVSampleFormat
sample_fmt
,
uint64_t
channel_layout
);
#endif
/** Initialize the filter system. Register all builtin filters. */
void
avfilter_register_all
(
void
);
...
...
@@ -733,26 +534,6 @@ void avfilter_free(AVFilterContext *filter);
int
avfilter_insert_filter
(
AVFilterLink
*
link
,
AVFilterContext
*
filt
,
unsigned
filt_srcpad_idx
,
unsigned
filt_dstpad_idx
);
#if FF_API_AVFILTERBUFFER
/**
* Copy the frame properties of src to dst, without copying the actual
* image data.
*
* @return 0 on success, a negative number on error.
*/
attribute_deprecated
int
avfilter_copy_frame_props
(
AVFilterBufferRef
*
dst
,
const
AVFrame
*
src
);
/**
* Copy the frame properties and data pointers of src to dst, without copying
* the actual data.
*
* @return 0 on success, a negative number on error.
*/
attribute_deprecated
int
avfilter_copy_buf_props
(
AVFrame
*
dst
,
const
AVFilterBufferRef
*
src
);
#endif
/**
* @return AVClass for AVFilterContext.
*
...
...
libavfilter/buffer.c
deleted
100644 → 0
View file @
e65e4cbb
/*
* 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/channel_layout.h"
#include "libavutil/common.h"
#include "libavutil/internal.h"
#include "libavcodec/avcodec.h"
#include "avfilter.h"
#include "internal.h"
#include "version.h"
#if FF_API_AVFILTERBUFFER
/* 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
);
}
void
avfilter_unref_bufferp
(
AVFilterBufferRef
**
ref
)
{
FF_DISABLE_DEPRECATION_WARNINGS
avfilter_unref_buffer
(
*
ref
);
FF_ENABLE_DEPRECATION_WARNINGS
*
ref
=
NULL
;
}
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
;
}
}
#endif
/* FF_API_AVFILTERBUFFER */
libavfilter/buffersink.c
View file @
f6974fe6
...
...
@@ -137,80 +137,6 @@ int attribute_align_arg av_buffersink_get_samples(AVFilterContext *ctx,
return
ret
;
}
#if FF_API_AVFILTERBUFFER
FF_DISABLE_DEPRECATION_WARNINGS
static
void
compat_free_buffer
(
AVFilterBuffer
*
buf
)
{
AVFrame
*
frame
=
buf
->
priv
;
av_frame_free
(
&
frame
);
av_free
(
buf
);
}
static
int
compat_read
(
AVFilterContext
*
ctx
,
AVFilterBufferRef
**
pbuf
,
int
nb_samples
)
{
AVFilterBufferRef
*
buf
;
AVFrame
*
frame
;
int
ret
;
if
(
!
pbuf
)
return
ff_poll_frame
(
ctx
->
inputs
[
0
]);
frame
=
av_frame_alloc
();
if
(
!
frame
)
return
AVERROR
(
ENOMEM
);
if
(
!
nb_samples
)
ret
=
av_buffersink_get_frame
(
ctx
,
frame
);
else
ret
=
av_buffersink_get_samples
(
ctx
,
frame
,
nb_samples
);
if
(
ret
<
0
)
goto
fail
;
if
(
ctx
->
inputs
[
0
]
->
type
==
AVMEDIA_TYPE_VIDEO
)
{
buf
=
avfilter_get_video_buffer_ref_from_arrays
(
frame
->
data
,
frame
->
linesize
,
AV_PERM_READ
,
frame
->
width
,
frame
->
height
,
frame
->
format
);
}
else
{
buf
=
avfilter_get_audio_buffer_ref_from_arrays
(
frame
->
extended_data
,
frame
->
linesize
[
0
],
AV_PERM_READ
,
frame
->
nb_samples
,
frame
->
format
,
frame
->
channel_layout
);
}
if
(
!
buf
)
{
ret
=
AVERROR
(
ENOMEM
);
goto
fail
;
}
avfilter_copy_frame_props
(
buf
,
frame
);
buf
->
buf
->
priv
=
frame
;
buf
->
buf
->
free
=
compat_free_buffer
;
*
pbuf
=
buf
;
return
0
;
fail:
av_frame_free
(
&
frame
);
return
ret
;
}
int
attribute_align_arg
av_buffersink_read
(
AVFilterContext
*
ctx
,
AVFilterBufferRef
**
buf
)
{
return
compat_read
(
ctx
,
buf
,
0
);
}
int
attribute_align_arg
av_buffersink_read_samples
(
AVFilterContext
*
ctx
,
AVFilterBufferRef
**
buf
,
int
nb_samples
)
{
return
compat_read
(
ctx
,
buf
,
nb_samples
);
}
FF_ENABLE_DEPRECATION_WARNINGS
#endif
static
const
AVFilterPad
avfilter_vsink_buffer_inputs
[]
=
{
{
.
name
=
"default"
,
...
...
libavfilter/buffersink.h
View file @
f6974fe6
...
...
@@ -33,43 +33,6 @@
* @{
*/
#if FF_API_AVFILTERBUFFER
/**
* Get a buffer with filtered data from sink and put it in buf.
*
* @param ctx pointer to a context of a buffersink or abuffersink AVFilter.
* @param buf pointer to the buffer will be written here if buf is non-NULL. buf
* must be freed by the caller using avfilter_unref_buffer().
* Buf may also be NULL to query whether a buffer is ready to be
* output.
*
* @return >= 0 in case of success, a negative AVERROR code in case of
* failure.
*/
attribute_deprecated
int
av_buffersink_read
(
AVFilterContext
*
ctx
,
AVFilterBufferRef
**
buf
);
/**
* Same as av_buffersink_read, but with the ability to specify the number of
* samples read. This function is less efficient than av_buffersink_read(),
* because it copies the data around.
*
* @param ctx pointer to a context of the abuffersink AVFilter.
* @param buf pointer to the buffer will be written here if buf is non-NULL. buf
* must be freed by the caller using avfilter_unref_buffer(). buf
* will contain exactly nb_samples audio samples, except at the end
* of stream, when it can contain less than nb_samples.
* Buf may also be NULL to query whether a buffer is ready to be
* output.
*
* @warning do not mix this function with av_buffersink_read(). Use only one or
* the other with a single sink, not both.
*/
attribute_deprecated
int
av_buffersink_read_samples
(
AVFilterContext
*
ctx
,
AVFilterBufferRef
**
buf
,
int
nb_samples
);
#endif
/**
* Get a frame with filtered data from sink and put it in frame.
*
...
...
libavfilter/buffersrc.c
View file @
f6974fe6
...
...
@@ -145,114 +145,6 @@ int attribute_align_arg av_buffersrc_add_frame(AVFilterContext *ctx,
return
0
;
}
#if FF_API_AVFILTERBUFFER
FF_DISABLE_DEPRECATION_WARNINGS
static
void
compat_free_buffer
(
void
*
opaque
,
uint8_t
*
data
)
{
AVFilterBufferRef
*
buf
=
opaque
;
avfilter_unref_buffer
(
buf
);
}
static
void
compat_unref_buffer
(
void
*
opaque
,
uint8_t
*
data
)
{
AVBufferRef
*
buf
=
opaque
;
av_buffer_unref
(
&
buf
);
}
int
av_buffersrc_buffer
(
AVFilterContext
*
ctx
,
AVFilterBufferRef
*
buf
)
{
BufferSourceContext
*
s
=
ctx
->
priv
;
AVFrame
*
frame
=
NULL
;
AVBufferRef
*
dummy_buf
=
NULL
;
int
ret
=
0
,
planes
,
i
;
if
(
!
buf
)
{
s
->
eof
=
1
;
return
0
;
}
else
if
(
s
->
eof
)
return
AVERROR
(
EINVAL
);
frame
=
av_frame_alloc
();
if
(
!
frame
)
return
AVERROR
(
ENOMEM
);
dummy_buf
=
av_buffer_create
(
NULL
,
0
,
compat_free_buffer
,
buf
,
0
);
if
(
!
dummy_buf
)
{
ret
=
AVERROR
(
ENOMEM
);
goto
fail
;
}
if
((
ret
=
avfilter_copy_buf_props
(
frame
,
buf
))
<
0
)
goto
fail
;
#define WRAP_PLANE(ref_out, data, data_size) \
do { \
AVBufferRef *dummy_ref = av_buffer_ref(dummy_buf); \
if (!dummy_ref) { \
ret = AVERROR(ENOMEM); \
goto fail; \
} \
ref_out = av_buffer_create(data, data_size, compat_unref_buffer, \
dummy_ref, 0); \
if (!ref_out) { \
av_buffer_unref(&dummy_ref); \
av_frame_unref(frame); \
ret = AVERROR(ENOMEM); \
goto fail; \
} \
} while (0)
if
(
ctx
->
outputs
[
0
]
->
type
==
AVMEDIA_TYPE_VIDEO
)
{
const
AVPixFmtDescriptor
*
desc
=
av_pix_fmt_desc_get
(
frame
->
format
);
planes
=
av_pix_fmt_count_planes
(
frame
->
format
);
if
(
!
desc
||
planes
<=
0
)
{
ret
=
AVERROR
(
EINVAL
);
goto
fail
;
}
for
(
i
=
0
;
i
<
planes
;
i
++
)
{
int
v_shift
=
(
i
==
1
||
i
==
2
)
?
desc
->
log2_chroma_h
:
0
;
int
plane_size
=
(
frame
->
height
>>
v_shift
)
*
frame
->
linesize
[
i
];
WRAP_PLANE
(
frame
->
buf
[
i
],
frame
->
data
[
i
],
plane_size
);
}
}
else
{
int
planar
=
av_sample_fmt_is_planar
(
frame
->
format
);
int
channels
=
av_get_channel_layout_nb_channels
(
frame
->
channel_layout
);
planes
=
planar
?
channels
:
1
;
if
(
planes
>
FF_ARRAY_ELEMS
(
frame
->
buf
))
{
frame
->
nb_extended_buf
=
planes
-
FF_ARRAY_ELEMS
(
frame
->
buf
);
frame
->
extended_buf
=
av_mallocz
(
sizeof
(
*
frame
->
extended_buf
)
*
frame
->
nb_extended_buf
);
if
(
!
frame
->
extended_buf
)
{
ret
=
AVERROR
(
ENOMEM
);
goto
fail
;
}
}
for
(
i
=
0
;
i
<
FFMIN
(
planes
,
FF_ARRAY_ELEMS
(
frame
->
buf
));
i
++
)
WRAP_PLANE
(
frame
->
buf
[
i
],
frame
->
extended_data
[
i
],
frame
->
linesize
[
0
]);
for
(
i
=
0
;
i
<
planes
-
FF_ARRAY_ELEMS
(
frame
->
buf
);
i
++
)
WRAP_PLANE
(
frame
->
extended_buf
[
i
],
frame
->
extended_data
[
i
+
FF_ARRAY_ELEMS
(
frame
->
buf
)],
frame
->
linesize
[
0
]);
}
ret
=
av_buffersrc_add_frame
(
ctx
,
frame
);
fail:
av_buffer_unref
(
&
dummy_buf
);
av_frame_free
(
&
frame
);
return
ret
;
}
FF_ENABLE_DEPRECATION_WARNINGS
#endif
static
av_cold
int
init_video
(
AVFilterContext
*
ctx
)
{
BufferSourceContext
*
c
=
ctx
->
priv
;
...
...
libavfilter/buffersrc.h
View file @
f6974fe6
...
...
@@ -34,21 +34,6 @@
* @{
*/
#if FF_API_AVFILTERBUFFER
/**
* Add a buffer to a filtergraph.
*
* @param ctx an instance of the buffersrc filter
* @param buf buffer containing frame data to be passed down the filtergraph.
* This function will take ownership of buf, the user must not free it.
* A NULL buf signals EOF -- i.e. no more frames will be sent to this filter.
*
* @deprecated use av_buffersrc_write_frame() or av_buffersrc_add_frame()
*/
attribute_deprecated
int
av_buffersrc_buffer
(
AVFilterContext
*
ctx
,
AVFilterBufferRef
*
buf
);
#endif
/**
* Add a frame to the buffer source.
*
...
...
libavfilter/internal.h
View file @
f6974fe6
...
...
@@ -135,11 +135,6 @@ struct AVFilterInternal {
avfilter_execute_func
*
execute
;
};
#if FF_API_AVFILTERBUFFER
/** default handler for freeing audio/video buffer when there are no references left */
void
ff_avfilter_default_free_buffer
(
AVFilterBuffer
*
buf
);
#endif
/** Tell is a format is contained in the provided list terminated by -1. */
int
ff_fmt_is_in
(
int
fmt
,
const
int
*
fmts
);
...
...
libavfilter/version.h
View file @
f6974fe6
...
...
@@ -49,9 +49,6 @@
* the public API and may change, break or disappear at any time.
*/
#ifndef FF_API_AVFILTERBUFFER
#define FF_API_AVFILTERBUFFER (LIBAVFILTER_VERSION_MAJOR < 6)
#endif
#ifndef FF_API_OLD_FILTER_OPTS
#define FF_API_OLD_FILTER_OPTS (LIBAVFILTER_VERSION_MAJOR < 6)
#endif
...
...
libavfilter/video.c
View file @
f6974fe6
...
...
@@ -54,53 +54,6 @@ AVFrame *ff_default_get_video_buffer(AVFilterLink *link, int w, int h)
return
frame
;
}
#if FF_API_AVFILTERBUFFER
AVFilterBufferRef
*
avfilter_get_video_buffer_ref_from_arrays
(
uint8_t
*
data
[
4
],
int
linesize
[
4
],
int
perms
,
int
w
,
int
h
,
enum
AVPixelFormat
format
)
{
AVFilterBuffer
*
pic
=
av_mallocz
(
sizeof
(
AVFilterBuffer
));
AVFilterBufferRef
*
picref
=
av_mallocz
(
sizeof
(
AVFilterBufferRef
));
if
(
!
pic
||
!
picref
)
goto
fail
;
picref
->
buf
=
pic
;
picref
->
buf
->
free
=
ff_avfilter_default_free_buffer
;
if
(
!
(
picref
->
video
=
av_mallocz
(
sizeof
(
AVFilterBufferRefVideoProps
))))
goto
fail
;
pic
->
w
=
picref
->
video
->
w
=
w
;
pic
->
h
=
picref
->
video
->
h
=
h
;
/* make sure the buffer gets read permission or it's useless for output */
picref
->
perms
=
perms
|
AV_PERM_READ
;
pic
->
refcount
=
1
;
picref
->
type
=
AVMEDIA_TYPE_VIDEO
;
pic
->
format
=
picref
->
format
=
format
;
memcpy
(
pic
->
data
,
data
,
4
*
sizeof
(
data
[
0
]));
memcpy
(
pic
->
linesize
,
linesize
,
4
*
sizeof
(
linesize
[
0
]));
memcpy
(
picref
->
data
,
pic
->
data
,
sizeof
(
picref
->
data
));
memcpy
(
picref
->
linesize
,
pic
->
linesize
,
sizeof
(
picref
->
linesize
));
pic
->
extended_data
=
pic
->
data
;
picref
->
extended_data
=
picref
->
data
;
picref
->
pts
=
AV_NOPTS_VALUE
;
return
picref
;
fail:
if
(
picref
&&
picref
->
video
)
av_free
(
picref
->
video
);
av_free
(
picref
);
av_free
(
pic
);
return
NULL
;
}
#endif
AVFrame
*
ff_get_video_buffer
(
AVFilterLink
*
link
,
int
w
,
int
h
)
{
AVFrame
*
ret
=
NULL
;
...
...
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