Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
5a9a9d4a
Commit
5a9a9d4a
authored
Jul 10, 2013
by
Luca Barbato
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavc: Add refcounted api to AVPacket
Provide a clean way to manipulate packets.
parent
c1076d84
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
157 additions
and
13 deletions
+157
-13
APIchanges
doc/APIchanges
+4
-0
avcodec.h
libavcodec/avcodec.h
+60
-0
avpacket.c
libavcodec/avpacket.c
+92
-12
version.h
libavcodec/version.h
+1
-1
No files found.
doc/APIchanges
View file @
5a9a9d4a
...
...
@@ -13,6 +13,10 @@ libavutil: 2012-10-22
API changes, most recent first:
2013-08-xx - xxxxxxx - lavc 55.16.0 - avcodec.h
Extend AVPacket API with av_packet_unref, av_packet_ref,
av_packet_move_ref, av_packet_copy_props, av_packet_free_side_data.
2013-08-xx - xxxxxxx - lavc 55.13.0 - avcodec.h
Deprecate the bitstream-related members from struct AVVDPAUContext.
The bistream buffers no longer need to be explicitly freed.
...
...
libavcodec/avcodec.h
View file @
5a9a9d4a
...
...
@@ -3228,6 +3228,66 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
uint8_t
*
av_packet_get_side_data
(
AVPacket
*
pkt
,
enum
AVPacketSideDataType
type
,
int
*
size
);
/**
* Convenience function to free all the side data stored.
* All the other fields stay untouched.
*
* @param pkt packet
*/
void
av_packet_free_side_data
(
AVPacket
*
pkt
);
/**
* Setup a new reference to the data described by a given packet
*
* If src is reference-counted, setup dst as a new reference to the
* buffer in src. Otherwise allocate a new buffer in dst and copy the
* data from src into it.
*
* All the other fields are copied from src.
*
* @see av_packet_unref
*
* @param dst Destination packet
* @param src Source packet
*
* @return 0 on success, a negative AVERROR on error.
*/
int
av_packet_ref
(
AVPacket
*
dst
,
AVPacket
*
src
);
/**
* Wipe the packet.
*
* Unreference the buffer referenced by the packet and reset the
* remaining packet fields to their default values.
*
* @param pkt The packet to be unreferenced.
*/
void
av_packet_unref
(
AVPacket
*
pkt
);
/**
* Move every field in src to dst and reset src.
*
* @see av_packet_unref
*
* @param src Source packet, will be reset
* @param dst Destination packet
*/
void
av_packet_move_ref
(
AVPacket
*
dst
,
AVPacket
*
src
);
/**
* Copy only "properties" fields from src to dst.
*
* Properties for the purpose of this function are all the fields
* beside those related to the packet data (buf, data, size)
*
* @param dst Destination packet
* @param src Source packet
*
* @return 0 on success AVERROR on failure.
*
*/
int
av_packet_copy_props
(
AVPacket
*
dst
,
const
AVPacket
*
src
);
/**
* @}
*/
...
...
libavcodec/avpacket.c
View file @
5a9a9d4a
...
...
@@ -26,8 +26,8 @@
#include "libavutil/internal.h"
#include "libavutil/mem.h"
#include "avcodec.h"
#if FF_API_DESTRUCT_PACKET
void
av_destruct_packet
(
AVPacket
*
pkt
)
{
av_free
(
pkt
->
data
);
...
...
@@ -62,18 +62,26 @@ FF_ENABLE_DEPRECATION_WARNINGS
pkt
->
side_data_elems
=
0
;
}
int
av_new_packet
(
AVPacket
*
pkt
,
int
size
)
static
int
packet_alloc
(
AVBufferRef
**
buf
,
int
size
)
{
AVBufferRef
*
buf
=
NULL
;
if
((
unsigned
)
size
>=
(
unsigned
)
size
+
FF_INPUT_BUFFER_PADDING_SIZE
)
return
AVERROR
(
EINVAL
);
av_buffer_realloc
(
&
buf
,
size
+
FF_INPUT_BUFFER_PADDING_SIZE
);
av_buffer_realloc
(
buf
,
size
+
FF_INPUT_BUFFER_PADDING_SIZE
);
if
(
!
buf
)
return
AVERROR
(
ENOMEM
);
memset
(
buf
->
data
+
size
,
0
,
FF_INPUT_BUFFER_PADDING_SIZE
);
memset
((
*
buf
)
->
data
+
size
,
0
,
FF_INPUT_BUFFER_PADDING_SIZE
);
return
0
;
}
int
av_new_packet
(
AVPacket
*
pkt
,
int
size
)
{
AVBufferRef
*
buf
=
NULL
;
int
ret
=
packet_alloc
(
&
buf
,
size
);
if
(
ret
<
0
)
return
ret
;
av_init_packet
(
pkt
);
pkt
->
buf
=
buf
;
...
...
@@ -221,11 +229,18 @@ failed_alloc:
return
AVERROR
(
ENOMEM
);
}
void
av_packet_free_side_data
(
AVPacket
*
pkt
)
{
int
i
;
for
(
i
=
0
;
i
<
pkt
->
side_data_elems
;
i
++
)
av_free
(
pkt
->
side_data
[
i
].
data
);
av_freep
(
&
pkt
->
side_data
);
pkt
->
side_data_elems
=
0
;
}
void
av_free_packet
(
AVPacket
*
pkt
)
{
if
(
pkt
)
{
int
i
;
FF_DISABLE_DEPRECATION_WARNINGS
if
(
pkt
->
buf
)
av_buffer_unref
(
&
pkt
->
buf
);
...
...
@@ -238,10 +253,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
pkt
->
data
=
NULL
;
pkt
->
size
=
0
;
for
(
i
=
0
;
i
<
pkt
->
side_data_elems
;
i
++
)
av_free
(
pkt
->
side_data
[
i
].
data
);
av_freep
(
&
pkt
->
side_data
);
pkt
->
side_data_elems
=
0
;
av_packet_free_side_data
(
pkt
);
}
}
...
...
@@ -300,3 +312,71 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
}
return
AVERROR
(
ENOENT
);
}
int
av_packet_copy_props
(
AVPacket
*
dst
,
const
AVPacket
*
src
)
{
int
i
;
dst
->
pts
=
src
->
pts
;
dst
->
dts
=
src
->
dts
;
dst
->
pos
=
src
->
pos
;
dst
->
duration
=
src
->
duration
;
dst
->
convergence_duration
=
src
->
convergence_duration
;
dst
->
flags
=
src
->
flags
;
dst
->
stream_index
=
src
->
stream_index
;
dst
->
side_data_elems
=
src
->
side_data_elems
;
for
(
i
=
0
;
i
<
src
->
side_data_elems
;
i
++
)
{
enum
AVPacketSideDataType
type
=
src
->
side_data
[
i
].
type
;
int
size
=
src
->
side_data
[
i
].
size
;
uint8_t
*
src_data
=
src
->
side_data
[
i
].
data
;
uint8_t
*
dst_data
=
av_packet_new_side_data
(
dst
,
type
,
size
);
if
(
!
dst_data
)
{
av_packet_free_side_data
(
dst
);
return
AVERROR
(
ENOMEM
);
}
memcpy
(
dst_data
,
src_data
,
size
);
}
return
0
;
}
void
av_packet_unref
(
AVPacket
*
pkt
)
{
av_packet_free_side_data
(
pkt
);
av_buffer_unref
(
&
pkt
->
buf
);
av_init_packet
(
pkt
);
pkt
->
data
=
NULL
;
pkt
->
size
=
0
;
}
int
av_packet_ref
(
AVPacket
*
dst
,
AVPacket
*
src
)
{
int
ret
;
ret
=
av_packet_copy_props
(
dst
,
src
);
if
(
ret
<
0
)
return
ret
;
if
(
!
src
->
buf
)
{
ret
=
packet_alloc
(
&
dst
->
buf
,
src
->
size
);
if
(
ret
<
0
)
goto
fail
;
memcpy
(
dst
->
buf
->
data
,
src
->
data
,
src
->
size
);
}
else
dst
->
buf
=
av_buffer_ref
(
src
->
buf
);
dst
->
size
=
src
->
size
;
dst
->
data
=
dst
->
buf
->
data
;
return
0
;
fail:
av_packet_free_side_data
(
dst
);
return
ret
;
}
void
av_packet_move_ref
(
AVPacket
*
dst
,
AVPacket
*
src
)
{
*
dst
=
*
src
;
av_init_packet
(
src
);
}
libavcodec/version.h
View file @
5a9a9d4a
...
...
@@ -27,7 +27,7 @@
*/
#define LIBAVCODEC_VERSION_MAJOR 55
#define LIBAVCODEC_VERSION_MINOR 1
5
#define LIBAVCODEC_VERSION_MINOR 1
6
#define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
...
...
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