mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge commit '9221efef7968463f3e3d9ce79ea72eaca082e73f'
* commit '9221efef7968463f3e3d9ce79ea72eaca082e73f': lavf: fix av_interleaved_write_frame() doxy. lavf: clarify the lifetime of demuxed packets. avconv: do not free muxed packet on streamcopy. crc: move doxy to the header vf_drawtext: do not use deprecated av_tree_node_size x86: Refactor PSWAPD fallback implementations and port to cpuflags Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
37e81996dc
1
ffmpeg.c
1
ffmpeg.c
@ -1394,7 +1394,6 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p
|
||||
|
||||
write_frame(of->ctx, &opkt, ost);
|
||||
ost->st->codec->frame_number++;
|
||||
av_free_packet(&opkt);
|
||||
}
|
||||
|
||||
static void rate_emu_sleep(InputStream *ist)
|
||||
|
@ -105,7 +105,8 @@ SECTION_TEXT
|
||||
pfadd %5, %4 ; {t6,t5}
|
||||
pxor %3, [ps_m1p1] ; {t8,t7}
|
||||
mova %6, %1
|
||||
PSWAPD %3, %3
|
||||
movd [r0+12], %3
|
||||
punpckhdq %3, [r0+8]
|
||||
pfadd %1, %5 ; {r0,i0}
|
||||
pfsub %6, %5 ; {r2,i2}
|
||||
mova %4, %2
|
||||
@ -499,19 +500,6 @@ fft8 %+ SUFFIX:
|
||||
%endmacro
|
||||
|
||||
%if ARCH_X86_32
|
||||
%macro PSWAPD 2
|
||||
%if cpuflag(3dnowext)
|
||||
pswapd %1, %2
|
||||
%elifidn %1, %2
|
||||
movd [r0+12], %1
|
||||
punpckhdq %1, [r0+8]
|
||||
%else
|
||||
movq %1, %2
|
||||
psrlq %1, 32
|
||||
punpckldq %1, %2
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
INIT_MMX 3dnowext
|
||||
FFT48_3DNOW
|
||||
|
||||
|
@ -246,16 +246,6 @@ FLOAT_TO_INT16_INTERLEAVE2
|
||||
INIT_XMM sse2
|
||||
FLOAT_TO_INT16_INTERLEAVE2
|
||||
|
||||
|
||||
%macro PSWAPD_SSE 2
|
||||
pshufw %1, %2, 0x4e
|
||||
%endmacro
|
||||
%macro PSWAPD_3DNOW 2
|
||||
movq %1, %2
|
||||
psrlq %1, 32
|
||||
punpckldq %1, %2
|
||||
%endmacro
|
||||
|
||||
%macro FLOAT_TO_INT16_INTERLEAVE6 0
|
||||
; void float_to_int16_interleave6_sse(int16_t *dst, const float **src, int len)
|
||||
cglobal float_to_int16_interleave6, 2, 8, 0, dst, src, src1, src2, src3, src4, src5, len
|
||||
@ -285,11 +275,11 @@ cglobal float_to_int16_interleave6, 2, 8, 0, dst, src, src1, src2, src3, src4, s
|
||||
packssdw mm0, mm3
|
||||
packssdw mm1, mm4
|
||||
packssdw mm2, mm5
|
||||
pswapd mm3, mm0
|
||||
PSWAPD mm3, mm0
|
||||
punpcklwd mm0, mm1
|
||||
punpckhwd mm1, mm2
|
||||
punpcklwd mm2, mm3
|
||||
pswapd mm3, mm0
|
||||
PSWAPD mm3, mm0
|
||||
punpckldq mm0, mm2
|
||||
punpckhdq mm2, mm1
|
||||
punpckldq mm1, mm3
|
||||
@ -305,12 +295,9 @@ cglobal float_to_int16_interleave6, 2, 8, 0, dst, src, src1, src2, src3, src4, s
|
||||
%endmacro ; FLOAT_TO_INT16_INTERLEAVE6
|
||||
|
||||
INIT_MMX sse
|
||||
%define pswapd PSWAPD_SSE
|
||||
FLOAT_TO_INT16_INTERLEAVE6
|
||||
INIT_MMX 3dnow
|
||||
%define pswapd PSWAPD_3DNOW
|
||||
FLOAT_TO_INT16_INTERLEAVE6
|
||||
%undef pswapd
|
||||
INIT_MMX 3dnowext
|
||||
FLOAT_TO_INT16_INTERLEAVE6
|
||||
|
||||
|
@ -277,7 +277,7 @@ static int load_glyph(AVFilterContext *ctx, Glyph **glyph_ptr, uint32_t code)
|
||||
FT_Glyph_Get_CBox(*glyph->glyph, ft_glyph_bbox_pixels, &glyph->bbox);
|
||||
|
||||
/* cache the newly created glyph */
|
||||
if (!(node = av_mallocz(av_tree_node_size))) {
|
||||
if (!(node = av_tree_node_alloc())) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto error;
|
||||
}
|
||||
|
@ -158,9 +158,15 @@
|
||||
* information will be in AVStream.time_base units, i.e. it has to be
|
||||
* multiplied by the timebase to convert them to seconds.
|
||||
*
|
||||
* The packet data belongs to the demuxer and is invalid after the next call to
|
||||
* av_read_frame(). The user must free the packet with av_free_packet() before
|
||||
* calling av_read_frame() again or closing the file.
|
||||
* If AVPacket.destruct is set on the returned packet, then the packet is
|
||||
* allocated dynamically and the user may keep it indefinitely.
|
||||
* Otherwise, if AVPacket.destruct is NULL, the packet data is backed by a
|
||||
* static storage somewhere inside the demuxer and the packet is only valid
|
||||
* until the next av_read_frame() call or closing the file. If the caller
|
||||
* requires a longer lifetime, av_dup_packet() will make an av_malloc()ed copy
|
||||
* of it.
|
||||
* In both cases, the packet must be freed with av_free_packet() when it is no
|
||||
* longer needed.
|
||||
*
|
||||
* @section lavf_decoding_seek Seeking
|
||||
* @}
|
||||
@ -1550,13 +1556,13 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt);
|
||||
* omit invalid data between valid frames so as to give the decoder the maximum
|
||||
* information possible for decoding.
|
||||
*
|
||||
* The returned packet is valid
|
||||
* until the next av_read_frame() or until av_close_input_file() and
|
||||
* must be freed with av_free_packet. For video, the packet contains
|
||||
* exactly one frame. For audio, it contains an integer number of
|
||||
* frames if each frame has a known fixed size (e.g. PCM or ADPCM
|
||||
* data). If the audio frames have a variable size (e.g. MPEG audio),
|
||||
* then it contains one frame.
|
||||
* If pkt->destruct is NULL, then the packet is valid until the next
|
||||
* av_read_frame() or until av_close_input_file(). Otherwise the packet is valid
|
||||
* indefinitely. In both cases the packet must be freed with
|
||||
* av_free_packet when it is no longer needed. For video, the packet contains
|
||||
* exactly one frame. For audio, it contains an integer number of frames if each
|
||||
* frame has a known fixed size (e.g. PCM or ADPCM data). If the audio frames
|
||||
* have a variable size (e.g. MPEG audio), then it contains one frame.
|
||||
*
|
||||
* pkt->pts, pkt->dts and pkt->duration are always set to correct
|
||||
* values in AVStream.time_base units (and guessed if the format cannot
|
||||
@ -1724,10 +1730,10 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt);
|
||||
* @param s media file handle
|
||||
* @param pkt The packet containing the data to be written. Libavformat takes
|
||||
* ownership of the data and will free it when it sees fit using the packet's
|
||||
* This can be NULL (at any time, not just at the end), to flush the
|
||||
* interleaving queues.
|
||||
* @ref AVPacket.destruct "destruct" field. The caller must not access the data
|
||||
* after this function returns, as it may already be freed.
|
||||
* This can be NULL (at any time, not just at the end), to flush the
|
||||
* interleaving queues.
|
||||
* Packet's @ref AVPacket.stream_index "stream_index" field must be set to the
|
||||
* index of the corresponding stream in @ref AVFormatContext.streams
|
||||
* "s.streams".
|
||||
|
@ -40,22 +40,6 @@ static struct {
|
||||
static AVCRC av_crc_table[AV_CRC_MAX][257];
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Initialize a CRC table.
|
||||
* @param ctx must be an array of size sizeof(AVCRC)*257 or sizeof(AVCRC)*1024
|
||||
* @param le If 1, the lowest bit represents the coefficient for the highest
|
||||
* exponent of the corresponding polynomial (both for poly and
|
||||
* actual CRC).
|
||||
* If 0, you must swap the CRC parameter and the result of av_crc
|
||||
* if you need the standard representation (can be simplified in
|
||||
* most cases to e.g. bswap16):
|
||||
* av_bswap32(crc << (32-bits))
|
||||
* @param bits number of bits for the CRC
|
||||
* @param poly generator polynomial without the x**bits coefficient, in the
|
||||
* representation as specified by le
|
||||
* @param ctx_size size of ctx in bytes
|
||||
* @return <0 on failure
|
||||
*/
|
||||
int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size)
|
||||
{
|
||||
unsigned i, j;
|
||||
@ -89,11 +73,6 @@ int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an initialized standard CRC table.
|
||||
* @param crc_id ID of a standard CRC
|
||||
* @return a pointer to the CRC table or NULL on failure
|
||||
*/
|
||||
const AVCRC *av_crc_get_table(AVCRCId crc_id)
|
||||
{
|
||||
#if !CONFIG_HARDCODED_TABLES
|
||||
@ -108,13 +87,6 @@ const AVCRC *av_crc_get_table(AVCRCId crc_id)
|
||||
return av_crc_table[crc_id];
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the CRC of a block.
|
||||
* @param crc CRC of previous blocks if any or initial value for CRC
|
||||
* @return CRC updated with the data from the given block
|
||||
*
|
||||
* @see av_crc_init() "le" parameter
|
||||
*/
|
||||
uint32_t av_crc(const AVCRC *ctx, uint32_t crc,
|
||||
const uint8_t *buffer, size_t length)
|
||||
{
|
||||
|
@ -36,8 +36,38 @@ typedef enum {
|
||||
AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */
|
||||
}AVCRCId;
|
||||
|
||||
/**
|
||||
* Initialize a CRC table.
|
||||
* @param ctx must be an array of size sizeof(AVCRC)*257 or sizeof(AVCRC)*1024
|
||||
* @param le If 1, the lowest bit represents the coefficient for the highest
|
||||
* exponent of the corresponding polynomial (both for poly and
|
||||
* actual CRC).
|
||||
* If 0, you must swap the CRC parameter and the result of av_crc
|
||||
* if you need the standard representation (can be simplified in
|
||||
* most cases to e.g. bswap16):
|
||||
* av_bswap32(crc << (32-bits))
|
||||
* @param bits number of bits for the CRC
|
||||
* @param poly generator polynomial without the x**bits coefficient, in the
|
||||
* representation as specified by le
|
||||
* @param ctx_size size of ctx in bytes
|
||||
* @return <0 on failure
|
||||
*/
|
||||
int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size);
|
||||
|
||||
/**
|
||||
* Get an initialized standard CRC table.
|
||||
* @param crc_id ID of a standard CRC
|
||||
* @return a pointer to the CRC table or NULL on failure
|
||||
*/
|
||||
const AVCRC *av_crc_get_table(AVCRCId crc_id);
|
||||
|
||||
/**
|
||||
* Calculate the CRC of a block.
|
||||
* @param crc CRC of previous blocks if any or initial value for CRC
|
||||
* @return CRC updated with the data from the given block
|
||||
*
|
||||
* @see av_crc_init() "le" parameter
|
||||
*/
|
||||
uint32_t av_crc(const AVCRC *ctx, uint32_t start_crc, const uint8_t *buffer, size_t length) av_pure;
|
||||
|
||||
#endif /* AVUTIL_CRC_H */
|
||||
|
@ -319,6 +319,18 @@
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
%macro PSWAPD 2
|
||||
%if cpuflag(mmxext)
|
||||
pshufw %1, %2, q1032
|
||||
%elif cpuflag(3dnowext)
|
||||
pswapd %1, %2
|
||||
%elif cpuflag(3dnow)
|
||||
movq %1, %2
|
||||
psrlq %1, 32
|
||||
punpckldq %1, %2
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
%macro DEINTB 5 ; mask, reg1, mask, reg2, optional src to fill masks from
|
||||
%ifnum %5
|
||||
pand m%3, m%5, m%4 ; src .. y6 .. y4
|
||||
|
Loading…
Reference in New Issue
Block a user