diff --git a/ffmpeg.c b/ffmpeg.c index 47a90daaf8..f8cf6b7701 100644 --- a/ffmpeg.c +++ b/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) diff --git a/libavcodec/x86/fft.asm b/libavcodec/x86/fft.asm index 4603da7f9f..5071741d63 100644 --- a/libavcodec/x86/fft.asm +++ b/libavcodec/x86/fft.asm @@ -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 diff --git a/libavcodec/x86/fmtconvert.asm b/libavcodec/x86/fmtconvert.asm index 8313d261d9..4f2379b2e2 100644 --- a/libavcodec/x86/fmtconvert.asm +++ b/libavcodec/x86/fmtconvert.asm @@ -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 diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index 7b672712dc..849bf1344e 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -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; } diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 3d99518990..61bc4a6327 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -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". diff --git a/libavutil/crc.c b/libavutil/crc.c index d640184876..bba8cb10a5 100644 --- a/libavutil/crc.c +++ b/libavutil/crc.c @@ -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) { diff --git a/libavutil/crc.h b/libavutil/crc.h index 12650542ba..9095ce6c62 100644 --- a/libavutil/crc.h +++ b/libavutil/crc.h @@ -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 */ diff --git a/libavutil/x86/x86util.asm b/libavutil/x86/x86util.asm index ade21c68bb..df2ceccdce 100644 --- a/libavutil/x86/x86util.asm +++ b/libavutil/x86/x86util.asm @@ -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