mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: mpc8: return more meaningful error codes. mpc: return more meaningful error codes. wv,mpc8: don't return apetag data in packets. rtmp: do not warn about receiving metadata packets x86: h264dsp: Adjust YASM #ifdefs x86: yadif: Mark mmxext optimizations as such h264: convert loop filter strength dsp function to yasm. Improve descriptiveness of a number of codec and container long names Conflicts: libavcodec/flvdec.c libavcodec/libopenjpegdec.c libavformat/apetag.c libavformat/mp3dec.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
d1dad7c824
@ -2914,7 +2914,7 @@ AVCodec ff_aac_latm_decoder = {
|
||||
.init = latm_decode_init,
|
||||
.close = aac_decode_close,
|
||||
.decode = latm_decode_frame,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("AAC LATM (Advanced Audio Codec LATM syntax)"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("AAC LATM (Advanced Audio Coding LATM syntax)"),
|
||||
.sample_fmts = (const enum AVSampleFormat[]) {
|
||||
AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE
|
||||
},
|
||||
|
@ -829,6 +829,6 @@ AVCodec ff_aac_encoder = {
|
||||
CODEC_CAP_EXPERIMENTAL,
|
||||
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT,
|
||||
AV_SAMPLE_FMT_NONE },
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("AAC (Advanced Audio Coding)"),
|
||||
.priv_class = &aacenc_class,
|
||||
};
|
||||
|
@ -1080,7 +1080,7 @@ AVCodec ff_amrnb_decoder = {
|
||||
.init = amrnb_decode_init,
|
||||
.decode = amrnb_decode_frame,
|
||||
.capabilities = CODEC_CAP_DR1,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Adaptive Multi-Rate NarrowBand"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("AMR-NB (Adaptive Multi-Rate NarrowBand)"),
|
||||
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT,
|
||||
AV_SAMPLE_FMT_NONE },
|
||||
};
|
||||
|
@ -1262,7 +1262,7 @@ AVCodec ff_amrwb_decoder = {
|
||||
.init = amrwb_decode_init,
|
||||
.decode = amrwb_decode_frame,
|
||||
.capabilities = CODEC_CAP_DR1,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Adaptive Multi-Rate WideBand"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("AMR-WB (Adaptive Multi-Rate WideBand)"),
|
||||
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT,
|
||||
AV_SAMPLE_FMT_NONE },
|
||||
};
|
||||
|
@ -68,7 +68,7 @@ static int ass_decode_close(AVCodecContext *avctx)
|
||||
|
||||
AVCodec ff_ass_decoder = {
|
||||
.name = "ass",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Advanced SubStation Alpha subtitle"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("SSA (SubStation Alpha) subtitle"),
|
||||
.type = AVMEDIA_TYPE_SUBTITLE,
|
||||
.id = CODEC_ID_SSA,
|
||||
.init = ass_decode_init,
|
||||
|
@ -59,7 +59,7 @@ static int ass_encode_frame(AVCodecContext *avctx,
|
||||
|
||||
AVCodec ff_ass_encoder = {
|
||||
.name = "ass",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Advanced SubStation Alpha subtitle"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("SSA (SubStation Alpha) subtitle"),
|
||||
.type = AVMEDIA_TYPE_SUBTITLE,
|
||||
.id = CODEC_ID_SSA,
|
||||
.init = ass_encode_init,
|
||||
|
@ -358,5 +358,5 @@ AVCodec ff_bmp_decoder = {
|
||||
.close = bmp_decode_end,
|
||||
.decode = bmp_decode_frame,
|
||||
.capabilities = CODEC_CAP_DR1,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("BMP image"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("BMP (Windows and OS/2 bitmap)"),
|
||||
};
|
||||
|
@ -179,5 +179,5 @@ AVCodec ff_bmp_encoder = {
|
||||
PIX_FMT_MONOBLACK,
|
||||
PIX_FMT_NONE
|
||||
},
|
||||
.long_name = NULL_IF_CONFIG_SMALL("BMP image"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("BMP (Windows and OS/2 bitmap)"),
|
||||
};
|
||||
|
@ -740,5 +740,5 @@ AVCodec ff_cavs_decoder = {
|
||||
.decode = cavs_decode_frame,
|
||||
.capabilities = CODEC_CAP_DR1 | CODEC_CAP_DELAY,
|
||||
.flush = cavs_flush,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Chinese AVS video (AVS1-P2, JiZhun profile)"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile)"),
|
||||
};
|
||||
|
@ -1319,5 +1319,5 @@ AVCodec ff_cook_decoder = {
|
||||
.close = cook_decode_close,
|
||||
.decode = cook_decode_frame,
|
||||
.capabilities = CODEC_CAP_DR1,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("COOK"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Cook / Cooker / Gecko (RealAudio G2)"),
|
||||
};
|
||||
|
@ -128,6 +128,6 @@ AVCodec ff_flv_decoder = {
|
||||
.decode = ff_h263_decode_frame,
|
||||
.capabilities = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1,
|
||||
.max_lowres = 3,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Flash Video (FLV) / Sorenson Spark / Sorenson H.263"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("FLV / Sorenson Spark / Sorenson H.263 (Flash Video)"),
|
||||
.pix_fmts = ff_pixfmt_list_420,
|
||||
};
|
||||
|
@ -95,6 +95,6 @@ AVCodec ff_flv_encoder = {
|
||||
.encode2 = ff_MPV_encode_picture,
|
||||
.close = ff_MPV_encode_end,
|
||||
.pix_fmts = (const enum PixelFormat[]){ PIX_FMT_YUV420P, PIX_FMT_NONE },
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Flash Video (FLV) / Sorenson Spark / Sorenson H.263"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("FLV / Sorenson Spark / Sorenson H.263 (Flash Video)"),
|
||||
.priv_class = &flv_class,
|
||||
};
|
||||
|
@ -245,7 +245,7 @@ AVCodec ff_libfaac_encoder = {
|
||||
.capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
|
||||
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
|
||||
AV_SAMPLE_FMT_NONE },
|
||||
.long_name = NULL_IF_CONFIG_SMALL("libfaac AAC (Advanced Audio Codec)"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("libfaac AAC (Advanced Audio Coding)"),
|
||||
.profiles = NULL_IF_CONFIG_SMALL(profiles),
|
||||
.channel_layouts = faac_channel_layouts,
|
||||
};
|
||||
|
@ -114,7 +114,7 @@ AVCodec ff_libilbc_decoder = {
|
||||
.init = ilbc_decode_init,
|
||||
.decode = ilbc_decode_frame,
|
||||
.capabilities = CODEC_CAP_DR1,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Internet Low Bitrate Codec (iLBC)"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("iLBC (Internet Low Bitrate Codec)"),
|
||||
.priv_class = &ilbc_dec_class,
|
||||
};
|
||||
|
||||
@ -209,7 +209,7 @@ AVCodec ff_libilbc_encoder = {
|
||||
.close = ilbc_encode_close,
|
||||
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
|
||||
AV_SAMPLE_FMT_NONE },
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Internet Low Bitrate Codec (iLBC)"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("iLBC (Internet Low Bitrate Codec)"),
|
||||
.defaults = ilbc_encode_defaults,
|
||||
.priv_class = &ilbc_enc_class,
|
||||
};
|
||||
|
@ -180,7 +180,7 @@ AVCodec ff_libopencore_amrnb_decoder = {
|
||||
.close = amr_nb_decode_close,
|
||||
.decode = amr_nb_decode_frame,
|
||||
.capabilities = CODEC_CAP_DR1,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("OpenCORE Adaptive Multi-Rate (AMR) Narrow-Band"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band)"),
|
||||
};
|
||||
|
||||
static av_cold int amr_nb_encode_init(AVCodecContext *avctx)
|
||||
@ -297,7 +297,7 @@ AVCodec ff_libopencore_amrnb_encoder = {
|
||||
.capabilities = CODEC_CAP_DELAY | CODEC_CAP_SMALL_LAST_FRAME,
|
||||
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
|
||||
AV_SAMPLE_FMT_NONE },
|
||||
.long_name = NULL_IF_CONFIG_SMALL("OpenCORE Adaptive Multi-Rate (AMR) Narrow-Band"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band)"),
|
||||
.priv_class = &class,
|
||||
};
|
||||
|
||||
@ -384,7 +384,7 @@ AVCodec ff_libopencore_amrwb_decoder = {
|
||||
.close = amr_wb_decode_close,
|
||||
.decode = amr_wb_decode_frame,
|
||||
.capabilities = CODEC_CAP_DR1,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("OpenCORE Adaptive Multi-Rate (AMR) Wide-Band"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("OpenCORE AMR-WB (Adaptive Multi-Rate Wide-Band)"),
|
||||
};
|
||||
|
||||
#endif /* CONFIG_LIBOPENCORE_AMRWB */
|
||||
|
@ -197,5 +197,5 @@ AVCodec ff_libvo_aacenc_encoder = {
|
||||
.capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
|
||||
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
|
||||
AV_SAMPLE_FMT_NONE },
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Android VisualOn AAC"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Android VisualOn AAC (Advanced Audio Coding)"),
|
||||
};
|
||||
|
@ -148,7 +148,7 @@ AVCodec ff_libvo_amrwbenc_encoder = {
|
||||
.close = amr_wb_encode_close,
|
||||
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
|
||||
AV_SAMPLE_FMT_NONE },
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Android VisualOn Adaptive "
|
||||
"Multi-Rate (AMR) Wide-Band"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Android VisualOn AMR-WB "
|
||||
"(Adaptive Multi-Rate Wide-Band)"),
|
||||
.priv_class = &class,
|
||||
};
|
||||
|
@ -424,7 +424,7 @@ AVCodec ff_libxavs_encoder = {
|
||||
.close = XAVS_close,
|
||||
.capabilities = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS,
|
||||
.pix_fmts = (const enum PixelFormat[]) { PIX_FMT_YUV420P, PIX_FMT_NONE },
|
||||
.long_name = NULL_IF_CONFIG_SMALL("libxavs - the Chinese Audio Video Standard Encoder"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("libxavs Chinese AVS (Audio Video Standard)"),
|
||||
.priv_class = &class,
|
||||
.defaults = xavs_defaults,
|
||||
};
|
||||
|
@ -474,5 +474,5 @@ AVCodec ff_tta_decoder = {
|
||||
.close = tta_decode_close,
|
||||
.decode = tta_decode_frame,
|
||||
.capabilities = CODEC_CAP_DR1,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("True Audio (TTA)"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("TTA (True Audio)"),
|
||||
};
|
||||
|
@ -27,6 +27,10 @@
|
||||
%include "libavutil/x86/x86inc.asm"
|
||||
%include "libavutil/x86/x86util.asm"
|
||||
|
||||
SECTION_RODATA
|
||||
|
||||
pb_3_1: times 4 db 3, 1
|
||||
|
||||
SECTION .text
|
||||
|
||||
cextern pb_0
|
||||
@ -921,3 +925,167 @@ ff_chroma_intra_body_mmx2:
|
||||
paddb m1, m5
|
||||
paddb m2, m6
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
; void h264_loop_filter_strength(int16_t bs[2][4][4], uint8_t nnz[40],
|
||||
; int8_t ref[2][40], int16_t mv[2][40][2],
|
||||
; int bidir, int edges, int step,
|
||||
; int mask_mv0, int mask_mv1, int field);
|
||||
;
|
||||
; bidir is 0 or 1
|
||||
; edges is 1 or 4
|
||||
; step is 1 or 2
|
||||
; mask_mv0 is 0 or 3
|
||||
; mask_mv1 is 0 or 1
|
||||
; field is 0 or 1
|
||||
;-----------------------------------------------------------------------------
|
||||
%macro loop_filter_strength_iteration 7 ; edges, step, mask_mv,
|
||||
; dir, d_idx, mask_dir, bidir
|
||||
%define edgesd %1
|
||||
%define stepd %2
|
||||
%define mask_mvd %3
|
||||
%define dir %4
|
||||
%define d_idx %5
|
||||
%define mask_dir %6
|
||||
%define bidir %7
|
||||
xor b_idxd, b_idxd ; for (b_idx = 0; b_idx < edges; b_idx += step)
|
||||
%%.b_idx_loop:
|
||||
%if mask_dir == 0
|
||||
pxor m0, m0
|
||||
%endif
|
||||
test b_idxd, dword mask_mvd
|
||||
jnz %%.skip_loop_iter ; if (!(b_idx & mask_mv))
|
||||
%if bidir == 1
|
||||
movd m2, [refq+b_idxq+d_idx+12] ; { ref0[bn] }
|
||||
punpckldq m2, [refq+b_idxq+d_idx+52] ; { ref0[bn], ref1[bn] }
|
||||
pshufw m0, [refq+b_idxq+12], 0x44 ; { ref0[b], ref0[b] }
|
||||
pshufw m1, [refq+b_idxq+52], 0x44 ; { ref1[b], ref1[b] }
|
||||
pshufw m3, m2, 0x4E ; { ref1[bn], ref0[bn] }
|
||||
psubb m0, m2 ; { ref0[b] != ref0[bn],
|
||||
; ref0[b] != ref1[bn] }
|
||||
psubb m1, m3 ; { ref1[b] != ref1[bn],
|
||||
; ref1[b] != ref0[bn] }
|
||||
|
||||
por m0, m1
|
||||
mova m1, [mvq+b_idxq*4+(d_idx+12)*4]
|
||||
mova m2, [mvq+b_idxq*4+(d_idx+12)*4+mmsize]
|
||||
mova m3, m1
|
||||
mova m4, m2
|
||||
psubw m1, [mvq+b_idxq*4+12*4]
|
||||
psubw m2, [mvq+b_idxq*4+12*4+mmsize]
|
||||
psubw m3, [mvq+b_idxq*4+52*4]
|
||||
psubw m4, [mvq+b_idxq*4+52*4+mmsize]
|
||||
packsswb m1, m2
|
||||
packsswb m3, m4
|
||||
paddb m1, m6
|
||||
paddb m3, m6
|
||||
psubusb m1, m5 ; abs(mv[b] - mv[bn]) >= limit
|
||||
psubusb m3, m5
|
||||
packsswb m1, m3
|
||||
|
||||
por m0, m1
|
||||
mova m1, [mvq+b_idxq*4+(d_idx+52)*4]
|
||||
mova m2, [mvq+b_idxq*4+(d_idx+52)*4+mmsize]
|
||||
mova m3, m1
|
||||
mova m4, m2
|
||||
psubw m1, [mvq+b_idxq*4+12*4]
|
||||
psubw m2, [mvq+b_idxq*4+12*4+mmsize]
|
||||
psubw m3, [mvq+b_idxq*4+52*4]
|
||||
psubw m4, [mvq+b_idxq*4+52*4+mmsize]
|
||||
packsswb m1, m2
|
||||
packsswb m3, m4
|
||||
paddb m1, m6
|
||||
paddb m3, m6
|
||||
psubusb m1, m5 ; abs(mv[b] - mv[bn]) >= limit
|
||||
psubusb m3, m5
|
||||
packsswb m1, m3
|
||||
|
||||
pshufw m1, m1, 0x4E
|
||||
por m0, m1
|
||||
pshufw m1, m0, 0x4E
|
||||
pminub m0, m1
|
||||
%else ; bidir == 0
|
||||
movd m0, [refq+b_idxq+12]
|
||||
psubb m0, [refq+b_idxq+d_idx+12] ; ref[b] != ref[bn]
|
||||
|
||||
mova m1, [mvq+b_idxq*4+12*4]
|
||||
mova m2, [mvq+b_idxq*4+12*4+mmsize]
|
||||
psubw m1, [mvq+b_idxq*4+(d_idx+12)*4]
|
||||
psubw m2, [mvq+b_idxq*4+(d_idx+12)*4+mmsize]
|
||||
packsswb m1, m2
|
||||
paddb m1, m6
|
||||
psubusb m1, m5 ; abs(mv[b] - mv[bn]) >= limit
|
||||
packsswb m1, m1
|
||||
por m0, m1
|
||||
%endif ; bidir == 1/0
|
||||
|
||||
%%.skip_loop_iter:
|
||||
movd m1, [nnzq+b_idxq+12]
|
||||
por m1, [nnzq+b_idxq+d_idx+12] ; nnz[b] || nnz[bn]
|
||||
|
||||
pminub m1, m7
|
||||
pminub m0, m7
|
||||
psllw m1, 1
|
||||
pxor m2, m2
|
||||
pmaxub m1, m0
|
||||
punpcklbw m1, m2
|
||||
movq [bsq+b_idxq+32*dir], m1
|
||||
|
||||
add b_idxd, dword stepd
|
||||
cmp b_idxd, dword edgesd
|
||||
jl %%.b_idx_loop
|
||||
%endmacro
|
||||
|
||||
INIT_MMX mmx2
|
||||
cglobal h264_loop_filter_strength, 9, 9, 0, bs, nnz, ref, mv, bidir, edges, \
|
||||
step, mask_mv0, mask_mv1, field
|
||||
%define b_idxq bidirq
|
||||
%define b_idxd bidird
|
||||
cmp dword fieldm, 0
|
||||
mova m7, [pb_1]
|
||||
mova m5, [pb_3]
|
||||
je .nofield
|
||||
mova m5, [pb_3_1]
|
||||
.nofield:
|
||||
mova m6, m5
|
||||
paddb m5, m5
|
||||
|
||||
shl dword stepd, 3
|
||||
shl dword edgesd, 3
|
||||
%if ARCH_X86_32
|
||||
%define mask_mv0d mask_mv0m
|
||||
%define mask_mv1d mask_mv1m
|
||||
%endif
|
||||
shl dword mask_mv1d, 3
|
||||
shl dword mask_mv0d, 3
|
||||
|
||||
cmp dword bidird, 0
|
||||
jne .bidir
|
||||
loop_filter_strength_iteration edgesd, stepd, mask_mv1d, 1, -8, 0, 0
|
||||
loop_filter_strength_iteration 32, 8, mask_mv0d, 0, -1, -1, 0
|
||||
|
||||
mova m0, [bsq+mmsize*0]
|
||||
mova m1, [bsq+mmsize*1]
|
||||
mova m2, [bsq+mmsize*2]
|
||||
mova m3, [bsq+mmsize*3]
|
||||
TRANSPOSE4x4W 0, 1, 2, 3, 4
|
||||
mova [bsq+mmsize*0], m0
|
||||
mova [bsq+mmsize*1], m1
|
||||
mova [bsq+mmsize*2], m2
|
||||
mova [bsq+mmsize*3], m3
|
||||
RET
|
||||
|
||||
.bidir:
|
||||
loop_filter_strength_iteration edgesd, stepd, mask_mv1d, 1, -8, 0, 1
|
||||
loop_filter_strength_iteration 32, 8, mask_mv0d, 0, -1, -1, 1
|
||||
|
||||
mova m0, [bsq+mmsize*0]
|
||||
mova m1, [bsq+mmsize*1]
|
||||
mova m2, [bsq+mmsize*2]
|
||||
mova m3, [bsq+mmsize*3]
|
||||
TRANSPOSE4x4W 0, 1, 2, 3, 4
|
||||
mova [bsq+mmsize*0], m0
|
||||
mova [bsq+mmsize*1], m1
|
||||
mova [bsq+mmsize*2], m2
|
||||
mova [bsq+mmsize*3], m3
|
||||
RET
|
||||
|
@ -88,158 +88,10 @@ void ff_h264_luma_dc_dequant_idct_sse2(DCTELEM *output, DCTELEM *input, int qmul
|
||||
/***********************************/
|
||||
/* deblocking */
|
||||
|
||||
#define h264_loop_filter_strength_iteration_mmx2(bS, nz, ref, mv, bidir, edges, step, mask_mv, dir, d_idx, mask_dir) \
|
||||
do { \
|
||||
x86_reg b_idx; \
|
||||
mask_mv <<= 3; \
|
||||
for( b_idx=0; b_idx<edges; b_idx+=step ) { \
|
||||
if (!mask_dir) \
|
||||
__asm__ volatile( \
|
||||
"pxor %%mm0, %%mm0 \n\t" \
|
||||
:: \
|
||||
); \
|
||||
if(!(mask_mv & b_idx)) { \
|
||||
if(bidir) { \
|
||||
__asm__ volatile( \
|
||||
"movd %a3(%0,%2), %%mm2 \n" \
|
||||
"punpckldq %a4(%0,%2), %%mm2 \n" /* { ref0[bn], ref1[bn] } */ \
|
||||
"pshufw $0x44, 12(%0,%2), %%mm0 \n" /* { ref0[b], ref0[b] } */ \
|
||||
"pshufw $0x44, 52(%0,%2), %%mm1 \n" /* { ref1[b], ref1[b] } */ \
|
||||
"pshufw $0x4E, %%mm2, %%mm3 \n" \
|
||||
"psubb %%mm2, %%mm0 \n" /* { ref0[b]!=ref0[bn], ref0[b]!=ref1[bn] } */ \
|
||||
"psubb %%mm3, %%mm1 \n" /* { ref1[b]!=ref1[bn], ref1[b]!=ref0[bn] } */ \
|
||||
\
|
||||
"por %%mm1, %%mm0 \n" \
|
||||
"movq %a5(%1,%2,4), %%mm1 \n" \
|
||||
"movq %a6(%1,%2,4), %%mm2 \n" \
|
||||
"movq %%mm1, %%mm3 \n" \
|
||||
"movq %%mm2, %%mm4 \n" \
|
||||
"psubw 48(%1,%2,4), %%mm1 \n" \
|
||||
"psubw 56(%1,%2,4), %%mm2 \n" \
|
||||
"psubw 208(%1,%2,4), %%mm3 \n" \
|
||||
"psubw 216(%1,%2,4), %%mm4 \n" \
|
||||
"packsswb %%mm2, %%mm1 \n" \
|
||||
"packsswb %%mm4, %%mm3 \n" \
|
||||
"paddb %%mm6, %%mm1 \n" \
|
||||
"paddb %%mm6, %%mm3 \n" \
|
||||
"psubusb %%mm5, %%mm1 \n" /* abs(mv[b] - mv[bn]) >= limit */ \
|
||||
"psubusb %%mm5, %%mm3 \n" \
|
||||
"packsswb %%mm3, %%mm1 \n" \
|
||||
\
|
||||
"por %%mm1, %%mm0 \n" \
|
||||
"movq %a7(%1,%2,4), %%mm1 \n" \
|
||||
"movq %a8(%1,%2,4), %%mm2 \n" \
|
||||
"movq %%mm1, %%mm3 \n" \
|
||||
"movq %%mm2, %%mm4 \n" \
|
||||
"psubw 48(%1,%2,4), %%mm1 \n" \
|
||||
"psubw 56(%1,%2,4), %%mm2 \n" \
|
||||
"psubw 208(%1,%2,4), %%mm3 \n" \
|
||||
"psubw 216(%1,%2,4), %%mm4 \n" \
|
||||
"packsswb %%mm2, %%mm1 \n" \
|
||||
"packsswb %%mm4, %%mm3 \n" \
|
||||
"paddb %%mm6, %%mm1 \n" \
|
||||
"paddb %%mm6, %%mm3 \n" \
|
||||
"psubusb %%mm5, %%mm1 \n" /* abs(mv[b] - mv[bn]) >= limit */ \
|
||||
"psubusb %%mm5, %%mm3 \n" \
|
||||
"packsswb %%mm3, %%mm1 \n" \
|
||||
\
|
||||
"pshufw $0x4E, %%mm1, %%mm1 \n" \
|
||||
"por %%mm1, %%mm0 \n" \
|
||||
"pshufw $0x4E, %%mm0, %%mm1 \n" \
|
||||
"pminub %%mm1, %%mm0 \n" \
|
||||
::"r"(ref), \
|
||||
"r"(mv), \
|
||||
"r"(b_idx), \
|
||||
"i"(d_idx+12), \
|
||||
"i"(d_idx+52), \
|
||||
"i"(d_idx*4+48), \
|
||||
"i"(d_idx*4+56), \
|
||||
"i"(d_idx*4+208), \
|
||||
"i"(d_idx*4+216) \
|
||||
); \
|
||||
} else { \
|
||||
__asm__ volatile( \
|
||||
"movd 12(%0,%2), %%mm0 \n" \
|
||||
"psubb %a3(%0,%2), %%mm0 \n" /* ref[b] != ref[bn] */ \
|
||||
"movq 48(%1,%2,4), %%mm1 \n" \
|
||||
"movq 56(%1,%2,4), %%mm2 \n" \
|
||||
"psubw %a4(%1,%2,4), %%mm1 \n" \
|
||||
"psubw %a5(%1,%2,4), %%mm2 \n" \
|
||||
"packsswb %%mm2, %%mm1 \n" \
|
||||
"paddb %%mm6, %%mm1 \n" \
|
||||
"psubusb %%mm5, %%mm1 \n" /* abs(mv[b] - mv[bn]) >= limit */ \
|
||||
"packsswb %%mm1, %%mm1 \n" \
|
||||
"por %%mm1, %%mm0 \n" \
|
||||
::"r"(ref), \
|
||||
"r"(mv), \
|
||||
"r"(b_idx), \
|
||||
"i"(d_idx+12), \
|
||||
"i"(d_idx*4+48), \
|
||||
"i"(d_idx*4+56) \
|
||||
); \
|
||||
} \
|
||||
} \
|
||||
__asm__ volatile( \
|
||||
"movd 12(%0,%1), %%mm1 \n" \
|
||||
"por %a2(%0,%1), %%mm1 \n" /* nnz[b] || nnz[bn] */ \
|
||||
::"r"(nnz), \
|
||||
"r"(b_idx), \
|
||||
"i"(d_idx+12) \
|
||||
); \
|
||||
__asm__ volatile( \
|
||||
"pminub %%mm7, %%mm1 \n" \
|
||||
"pminub %%mm7, %%mm0 \n" \
|
||||
"psllw $1, %%mm1 \n" \
|
||||
"pxor %%mm2, %%mm2 \n" \
|
||||
"pmaxub %%mm0, %%mm1 \n" \
|
||||
"punpcklbw %%mm2, %%mm1 \n" \
|
||||
"movq %%mm1, %a1(%0,%2) \n" \
|
||||
::"r"(bS), \
|
||||
"i"(32*dir), \
|
||||
"r"(b_idx) \
|
||||
:"memory" \
|
||||
); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
static void h264_loop_filter_strength_mmx2( int16_t bS[2][4][4], uint8_t nnz[40], int8_t ref[2][40], int16_t mv[2][40][2],
|
||||
int bidir, int edges, int step, int mask_mv0, int mask_mv1, int field ) {
|
||||
__asm__ volatile(
|
||||
"movq %0, %%mm7 \n"
|
||||
"movq %1, %%mm6 \n"
|
||||
::"m"(ff_pb_1), "m"(ff_pb_3)
|
||||
);
|
||||
if(field)
|
||||
__asm__ volatile(
|
||||
"movq %0, %%mm6 \n"
|
||||
::"m"(ff_pb_3_1)
|
||||
);
|
||||
__asm__ volatile(
|
||||
"movq %%mm6, %%mm5 \n"
|
||||
"paddb %%mm5, %%mm5 \n"
|
||||
:);
|
||||
|
||||
// could do a special case for dir==0 && edges==1, but it only reduces the
|
||||
// average filter time by 1.2%
|
||||
step <<= 3;
|
||||
edges <<= 3;
|
||||
h264_loop_filter_strength_iteration_mmx2(bS, nnz, ref, mv, bidir, edges, step, mask_mv1, 1, -8, 0);
|
||||
h264_loop_filter_strength_iteration_mmx2(bS, nnz, ref, mv, bidir, 32, 8, mask_mv0, 0, -1, -1);
|
||||
|
||||
__asm__ volatile(
|
||||
"movq (%0), %%mm0 \n\t"
|
||||
"movq 8(%0), %%mm1 \n\t"
|
||||
"movq 16(%0), %%mm2 \n\t"
|
||||
"movq 24(%0), %%mm3 \n\t"
|
||||
TRANSPOSE4(%%mm0, %%mm1, %%mm2, %%mm3, %%mm4)
|
||||
"movq %%mm0, (%0) \n\t"
|
||||
"movq %%mm3, 8(%0) \n\t"
|
||||
"movq %%mm4, 16(%0) \n\t"
|
||||
"movq %%mm2, 24(%0) \n\t"
|
||||
::"r"(bS[0])
|
||||
:"memory"
|
||||
);
|
||||
}
|
||||
void ff_h264_loop_filter_strength_mmx2(int16_t bS[2][4][4], uint8_t nnz[40],
|
||||
int8_t ref[2][40], int16_t mv[2][40][2],
|
||||
int bidir, int edges, int step,
|
||||
int mask_mv0, int mask_mv1, int field);
|
||||
|
||||
#define LF_FUNC(DIR, TYPE, DEPTH, OPT) \
|
||||
void ff_deblock_ ## DIR ## _ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *pix, int stride, \
|
||||
@ -342,14 +194,14 @@ H264_BIWEIGHT_10_SSE( 4, 10)
|
||||
|
||||
void ff_h264dsp_init_x86(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
|
||||
{
|
||||
#if HAVE_YASM
|
||||
int mm_flags = av_get_cpu_flags();
|
||||
|
||||
if (chroma_format_idc == 1 && mm_flags & AV_CPU_FLAG_MMX2) {
|
||||
c->h264_loop_filter_strength= h264_loop_filter_strength_mmx2;
|
||||
c->h264_loop_filter_strength = ff_h264_loop_filter_strength_mmx2;
|
||||
}
|
||||
|
||||
if (bit_depth == 8) {
|
||||
#if HAVE_YASM
|
||||
if (mm_flags & AV_CPU_FLAG_MMX) {
|
||||
c->h264_idct_dc_add =
|
||||
c->h264_idct_add = ff_h264_idct_add_8_mmx;
|
||||
@ -430,9 +282,7 @@ void ff_h264dsp_init_x86(H264DSPContext *c, const int bit_depth, const int chrom
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
} else if (bit_depth == 10) {
|
||||
#if HAVE_YASM
|
||||
if (mm_flags & AV_CPU_FLAG_MMX) {
|
||||
if (mm_flags & AV_CPU_FLAG_MMX2) {
|
||||
#if ARCH_X86_32
|
||||
@ -510,6 +360,6 @@ void ff_h264dsp_init_x86(H264DSPContext *c, const int bit_depth, const int chrom
|
||||
#endif /* HAVE_AVX */
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -296,7 +296,7 @@ static const AVClass oss_demuxer_class = {
|
||||
|
||||
AVInputFormat ff_oss_demuxer = {
|
||||
.name = "oss",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Open Sound System capture"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("OSS (Open Sound System) capture"),
|
||||
.priv_data_size = sizeof(AudioData),
|
||||
.read_header = audio_read_header,
|
||||
.read_packet = audio_read_packet,
|
||||
@ -309,7 +309,7 @@ AVInputFormat ff_oss_demuxer = {
|
||||
#if CONFIG_OSS_OUTDEV
|
||||
AVOutputFormat ff_oss_muxer = {
|
||||
.name = "oss",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Open Sound System playback"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("OSS (Open Sound System) playback"),
|
||||
.priv_data_size = sizeof(AudioData),
|
||||
/* XXX: we make the assumption that the soundcard accepts this format */
|
||||
/* XXX: find better solution with "preinit" method, needed also in
|
||||
|
@ -45,9 +45,9 @@ DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = {0x0001000100010001ULL, 0x000100010
|
||||
#undef COMPILE_TEMPLATE_SSE
|
||||
#endif
|
||||
|
||||
#if HAVE_MMX
|
||||
#if HAVE_MMX2
|
||||
#undef RENAME
|
||||
#define RENAME(a) a ## _mmx
|
||||
#define RENAME(a) a ## _mmx2
|
||||
#include "yadif_template.c"
|
||||
#endif
|
||||
|
||||
@ -58,9 +58,9 @@ av_cold void ff_yadif_init_x86(YADIFContext *yadif)
|
||||
int cpu_flags = av_get_cpu_flags();
|
||||
|
||||
#if HAVE_INLINE_ASM
|
||||
#if HAVE_MMX
|
||||
if (cpu_flags & AV_CPU_FLAG_MMX)
|
||||
yadif->filter_line = yadif_filter_line_mmx;
|
||||
#if HAVE_MMX2
|
||||
if (cpu_flags & AV_CPU_FLAG_MMX2)
|
||||
yadif->filter_line = yadif_filter_line_mmx2;
|
||||
#endif
|
||||
#if HAVE_SSE
|
||||
if (cpu_flags & AV_CPU_FLAG_SSE2)
|
||||
|
@ -84,7 +84,7 @@ static int adts_aac_read_header(AVFormatContext *s)
|
||||
|
||||
AVInputFormat ff_aac_demuxer = {
|
||||
.name = "aac",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("raw ADTS AAC"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("raw ADTS AAC (Advanced Audio Coding)"),
|
||||
.read_probe = adts_aac_probe,
|
||||
.read_header = adts_aac_read_header,
|
||||
.read_packet = ff_raw_read_partial_packet,
|
||||
|
@ -165,7 +165,7 @@ static int adts_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
|
||||
AVOutputFormat ff_adts_muxer = {
|
||||
.name = "adts",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("ADTS AAC"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("ADTS AAC (Advanced Audio Coding)"),
|
||||
.mime_type = "audio/aac",
|
||||
.extensions = "aac,adts",
|
||||
.priv_data_size = sizeof(ADTSContext),
|
||||
|
@ -111,40 +111,47 @@ static int ape_tag_read_field(AVFormatContext *s)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ff_ape_parse_tag(AVFormatContext *s)
|
||||
int64_t ff_ape_parse_tag(AVFormatContext *s)
|
||||
{
|
||||
AVIOContext *pb = s->pb;
|
||||
int file_size = avio_size(pb);
|
||||
uint32_t val, fields, tag_bytes;
|
||||
uint8_t buf[8];
|
||||
int64_t tag_start;
|
||||
int i;
|
||||
|
||||
if (file_size < APE_TAG_FOOTER_BYTES)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
avio_seek(pb, file_size - APE_TAG_FOOTER_BYTES, SEEK_SET);
|
||||
|
||||
avio_read(pb, buf, 8); /* APETAGEX */
|
||||
if (strncmp(buf, APE_TAG_PREAMBLE, 8)) {
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
val = avio_rl32(pb); /* APE tag version */
|
||||
if (val > APE_TAG_VERSION) {
|
||||
av_log(s, AV_LOG_ERROR, "Unsupported tag version. (>=%d)\n", APE_TAG_VERSION);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
tag_bytes = avio_rl32(pb); /* tag size */
|
||||
if (tag_bytes - APE_TAG_FOOTER_BYTES > (1024 * 1024 * 16)) {
|
||||
av_log(s, AV_LOG_ERROR, "Tag size is way too big\n");
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
tag_start = file_size - tag_bytes - APE_TAG_FOOTER_BYTES;
|
||||
if (tag_start < 0) {
|
||||
av_log(s, AV_LOG_ERROR, "Invalid tag size %u.\n", tag_bytes);
|
||||
return 0;
|
||||
}
|
||||
|
||||
fields = avio_rl32(pb); /* number of fields */
|
||||
if (fields > 65536) {
|
||||
av_log(s, AV_LOG_ERROR, "Too many tag fields (%d)\n", fields);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
val = avio_rl32(pb); /* flags */
|
||||
@ -157,4 +164,6 @@ void ff_ape_parse_tag(AVFormatContext *s)
|
||||
|
||||
for (i=0; i<fields; i++)
|
||||
if (ape_tag_read_field(s) < 0) break;
|
||||
|
||||
return tag_start;
|
||||
}
|
||||
|
@ -31,8 +31,10 @@
|
||||
|
||||
/**
|
||||
* Read and parse an APE tag
|
||||
*
|
||||
* @return offset of the tag start in the file
|
||||
*/
|
||||
void ff_ape_parse_tag(AVFormatContext *s);
|
||||
int64_t ff_ape_parse_tag(AVFormatContext *s);
|
||||
|
||||
/**
|
||||
* Write an APEv2 tag
|
||||
|
@ -1410,7 +1410,7 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
|
||||
|
||||
AVInputFormat ff_asf_demuxer = {
|
||||
.name = "asf",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("ASF format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("ASF (Advanced / Active Streaming Format)"),
|
||||
.priv_data_size = sizeof(ASFContext),
|
||||
.read_probe = asf_probe,
|
||||
.read_header = asf_read_header,
|
||||
|
@ -901,7 +901,7 @@ static int asf_write_trailer(AVFormatContext *s)
|
||||
#if CONFIG_ASF_MUXER
|
||||
AVOutputFormat ff_asf_muxer = {
|
||||
.name = "asf",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("ASF format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("ASF (Advanced / Active Streaming Format)"),
|
||||
.mime_type = "video/x-ms-asf",
|
||||
.extensions = "asf,wmv,wma",
|
||||
.priv_data_size = sizeof(ASFContext),
|
||||
@ -920,7 +920,7 @@ AVOutputFormat ff_asf_muxer = {
|
||||
#if CONFIG_ASF_STREAM_MUXER
|
||||
AVOutputFormat ff_asf_stream_muxer = {
|
||||
.name = "asf_stream",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("ASF format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("ASF (Advanced / Active Streaming Format)"),
|
||||
.mime_type = "video/x-ms-asf",
|
||||
.extensions = "asf,wmv,wma",
|
||||
.priv_data_size = sizeof(ASFContext),
|
||||
|
@ -205,7 +205,7 @@ static int read_seek2(AVFormatContext *s, int stream_index,
|
||||
|
||||
AVInputFormat ff_ass_demuxer = {
|
||||
.name = "ass",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Advanced SubStation Alpha subtitle"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("SSA (SubStation Alpha) subtitle"),
|
||||
.priv_data_size = sizeof(ASSContext),
|
||||
.read_probe = probe,
|
||||
.read_header = read_header,
|
||||
|
@ -79,7 +79,7 @@ static int write_trailer(AVFormatContext *s)
|
||||
|
||||
AVOutputFormat ff_ass_muxer = {
|
||||
.name = "ass",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Advanced SubStation Alpha subtitle"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("SSA (SubStation Alpha) subtitle"),
|
||||
.mime_type = "text/x-ssa",
|
||||
.extensions = "ass,ssa",
|
||||
.priv_data_size = sizeof(ASSContext),
|
||||
|
@ -195,7 +195,7 @@ static int au_read_packet(AVFormatContext *s,
|
||||
#if CONFIG_AU_DEMUXER
|
||||
AVInputFormat ff_au_demuxer = {
|
||||
.name = "au",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("SUN AU format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Sun AU"),
|
||||
.read_probe = au_probe,
|
||||
.read_header = au_read_header,
|
||||
.read_packet = au_read_packet,
|
||||
@ -207,7 +207,7 @@ AVInputFormat ff_au_demuxer = {
|
||||
#if CONFIG_AU_MUXER
|
||||
AVOutputFormat ff_au_muxer = {
|
||||
.name = "au",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("SUN AU format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Sun AU"),
|
||||
.mime_type = "audio/basic",
|
||||
.extensions = "au",
|
||||
.audio_codec = CODEC_ID_PCM_S16BE,
|
||||
|
@ -1562,7 +1562,7 @@ static int avi_probe(AVProbeData *p)
|
||||
|
||||
AVInputFormat ff_avi_demuxer = {
|
||||
.name = "avi",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("AVI format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("AVI (Audio Video Interleaved)"),
|
||||
.priv_data_size = sizeof(AVIContext),
|
||||
.read_probe = avi_probe,
|
||||
.read_header = avi_read_header,
|
||||
|
@ -650,7 +650,7 @@ static int avi_write_trailer(AVFormatContext *s)
|
||||
|
||||
AVOutputFormat ff_avi_muxer = {
|
||||
.name = "avi",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("AVI format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("AVI (Audio Video Interleaved)"),
|
||||
.mime_type = "video/x-msvideo",
|
||||
.extensions = "avi",
|
||||
.priv_data_size = sizeof(AVIContext),
|
||||
|
@ -417,7 +417,7 @@ static int read_seek(AVFormatContext *s, int stream_index,
|
||||
|
||||
AVInputFormat ff_caf_demuxer = {
|
||||
.name = "caf",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Apple Core Audio Format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Apple CAF (Core Audio Format)"),
|
||||
.priv_data_size = sizeof(CaffContext),
|
||||
.read_probe = probe,
|
||||
.read_header = read_header,
|
||||
|
@ -65,4 +65,4 @@ static int cavsvideo_probe(AVProbeData *p)
|
||||
return 0;
|
||||
}
|
||||
|
||||
FF_DEF_RAWVIDEO_DEMUXER(cavsvideo, "raw Chinese AVS video", cavsvideo_probe, NULL, CODEC_ID_CAVS)
|
||||
FF_DEF_RAWVIDEO_DEMUXER(cavsvideo, "raw Chinese AVS (Audio Video Standard)", cavsvideo_probe, NULL, CODEC_ID_CAVS)
|
||||
|
@ -591,7 +591,7 @@ static int dv_probe(AVProbeData *p)
|
||||
#if CONFIG_DV_DEMUXER
|
||||
AVInputFormat ff_dv_demuxer = {
|
||||
.name = "dv",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("DV video"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"),
|
||||
.priv_data_size = sizeof(RawDVContext),
|
||||
.read_probe = dv_probe,
|
||||
.read_header = dv_read_header,
|
||||
|
@ -407,7 +407,7 @@ static int dv_write_trailer(struct AVFormatContext *s)
|
||||
|
||||
AVOutputFormat ff_dv_muxer = {
|
||||
.name = "dv",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("DV video"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"),
|
||||
.extensions = "dv",
|
||||
.priv_data_size = sizeof(DVMuxContext),
|
||||
.audio_codec = CODEC_ID_PCM_S16LE,
|
||||
|
@ -889,7 +889,7 @@ static const AVClass class = {
|
||||
|
||||
AVInputFormat ff_flv_demuxer = {
|
||||
.name = "flv",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("FLV format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"),
|
||||
.priv_data_size = sizeof(FLVContext),
|
||||
.read_probe = flv_probe,
|
||||
.read_header = flv_read_header,
|
||||
|
@ -566,7 +566,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
|
||||
AVOutputFormat ff_flv_muxer = {
|
||||
.name = "flv",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("FLV format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"),
|
||||
.mime_type = "video/x-flv",
|
||||
.extensions = "flv",
|
||||
.priv_data_size = sizeof(FLVContext),
|
||||
|
@ -569,7 +569,7 @@ static int64_t gxf_read_timestamp(AVFormatContext *s, int stream_index,
|
||||
|
||||
AVInputFormat ff_gxf_demuxer = {
|
||||
.name = "gxf",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("GXF format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("GXF (General eXchange Format)"),
|
||||
.priv_data_size = sizeof(struct gxf_stream_info),
|
||||
.read_probe = gxf_probe,
|
||||
.read_header = gxf_header,
|
||||
|
@ -986,7 +986,7 @@ static int gxf_interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *pk
|
||||
|
||||
AVOutputFormat ff_gxf_muxer = {
|
||||
.name = "gxf",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("GXF format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("GXF (General eXchange Format)"),
|
||||
.extensions = "gxf",
|
||||
.priv_data_size = sizeof(GXFContext),
|
||||
.audio_codec = CODEC_ID_PCM_S16LE,
|
||||
|
@ -388,7 +388,7 @@ static int iff_read_packet(AVFormatContext *s,
|
||||
|
||||
AVInputFormat ff_iff_demuxer = {
|
||||
.name = "iff",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Interchange File Format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("IFF (Interchange File Format)"),
|
||||
.priv_data_size = sizeof(IffDemuxContext),
|
||||
.read_probe = iff_probe,
|
||||
.read_header = iff_read_header,
|
||||
|
@ -110,7 +110,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
|
||||
AVInputFormat ff_iv8_demuxer = {
|
||||
.name = "iv8",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("A format generated by IndigoVision 8000 video server"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("IndigoVision 8000 video"),
|
||||
.read_probe = probe,
|
||||
.read_header = read_header,
|
||||
.read_packet = read_packet,
|
||||
|
@ -3193,7 +3193,7 @@ static const AVClass class = {
|
||||
|
||||
AVInputFormat ff_mov_demuxer = {
|
||||
.name = "mov,mp4,m4a,3gp,3g2,mj2",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("QuickTime/MPEG-4/Motion JPEG 2000 format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("QuickTime / MOV"),
|
||||
.priv_data_size = sizeof(MOVContext),
|
||||
.read_probe = mov_probe,
|
||||
.read_header = mov_read_header,
|
||||
|
@ -3582,7 +3582,7 @@ static int mov_write_trailer(AVFormatContext *s)
|
||||
MOV_CLASS(mov)
|
||||
AVOutputFormat ff_mov_muxer = {
|
||||
.name = "mov",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MOV format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("QuickTime / MOV"),
|
||||
.extensions = "mov",
|
||||
.priv_data_size = sizeof(MOVMuxContext),
|
||||
.audio_codec = CODEC_ID_AAC,
|
||||
@ -3602,7 +3602,7 @@ AVOutputFormat ff_mov_muxer = {
|
||||
MOV_CLASS(tgp)
|
||||
AVOutputFormat ff_tgp_muxer = {
|
||||
.name = "3gp",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("3GP format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("3GP (3GPP file format)"),
|
||||
.extensions = "3gp",
|
||||
.priv_data_size = sizeof(MOVMuxContext),
|
||||
.audio_codec = CODEC_ID_AMR_NB,
|
||||
@ -3619,7 +3619,7 @@ AVOutputFormat ff_tgp_muxer = {
|
||||
MOV_CLASS(mp4)
|
||||
AVOutputFormat ff_mp4_muxer = {
|
||||
.name = "mp4",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MP4 format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MP4 (MPEG-4 Part 14)"),
|
||||
.mime_type = "application/mp4",
|
||||
.extensions = "mp4",
|
||||
.priv_data_size = sizeof(MOVMuxContext),
|
||||
@ -3638,7 +3638,7 @@ AVOutputFormat ff_mp4_muxer = {
|
||||
MOV_CLASS(psp)
|
||||
AVOutputFormat ff_psp_muxer = {
|
||||
.name = "psp",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("PSP MP4 format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("PSP MP4 (MPEG-4 Part 14)"),
|
||||
.extensions = "mp4,psp",
|
||||
.priv_data_size = sizeof(MOVMuxContext),
|
||||
.audio_codec = CODEC_ID_AAC,
|
||||
@ -3656,7 +3656,7 @@ AVOutputFormat ff_psp_muxer = {
|
||||
MOV_CLASS(tg2)
|
||||
AVOutputFormat ff_tg2_muxer = {
|
||||
.name = "3g2",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("3GP2 format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("3GP2 (3GPP2 file format)"),
|
||||
.extensions = "3g2",
|
||||
.priv_data_size = sizeof(MOVMuxContext),
|
||||
.audio_codec = CODEC_ID_AMR_NB,
|
||||
@ -3673,7 +3673,7 @@ AVOutputFormat ff_tg2_muxer = {
|
||||
MOV_CLASS(ipod)
|
||||
AVOutputFormat ff_ipod_muxer = {
|
||||
.name = "ipod",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("iPod H.264 MP4 format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("iPod H.264 MP4 (MPEG-4 Part 14)"),
|
||||
.mime_type = "application/mp4",
|
||||
.extensions = "m4v,m4a",
|
||||
.priv_data_size = sizeof(MOVMuxContext),
|
||||
|
@ -234,7 +234,7 @@ static int read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, in
|
||||
|
||||
AVInputFormat ff_mp3_demuxer = {
|
||||
.name = "mp3",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG audio layer 2/3"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MP2/3 (MPEG audio layer 2/3)"),
|
||||
.priv_data_size = sizeof(MP3Context),
|
||||
.read_probe = mp3_read_probe,
|
||||
.read_header = mp3_read_header,
|
||||
|
@ -373,7 +373,7 @@ static int mp2_write_trailer(struct AVFormatContext *s)
|
||||
#if CONFIG_MP2_MUXER
|
||||
AVOutputFormat ff_mp2_muxer = {
|
||||
.name = "mp2",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG audio layer 2"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"),
|
||||
.mime_type = "audio/x-mpeg",
|
||||
.extensions = "mp2,m2a",
|
||||
.audio_codec = CODEC_ID_MP2,
|
||||
@ -507,7 +507,7 @@ static int mp3_write_trailer(AVFormatContext *s)
|
||||
|
||||
AVOutputFormat ff_mp3_muxer = {
|
||||
.name = "mp3",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG audio layer 3"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"),
|
||||
.mime_type = "audio/x-mpeg",
|
||||
.extensions = "mp3",
|
||||
.priv_data_size = sizeof(MP3Context),
|
||||
|
@ -59,17 +59,17 @@ static int mpc_read_header(AVFormatContext *s)
|
||||
|
||||
if(avio_rl24(s->pb) != MKTAG('M', 'P', '+', 0)){
|
||||
av_log(s, AV_LOG_ERROR, "Not a Musepack file\n");
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
c->ver = avio_r8(s->pb);
|
||||
if(c->ver != 0x07 && c->ver != 0x17){
|
||||
av_log(s, AV_LOG_ERROR, "Can demux Musepack SV7, got version %02X\n", c->ver);
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
c->fcount = avio_rl32(s->pb);
|
||||
if((int64_t)c->fcount * sizeof(MPCFrame) >= UINT_MAX){
|
||||
av_log(s, AV_LOG_ERROR, "Too many frames, seeking is not possible\n");
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
if(c->fcount){
|
||||
c->frames = av_malloc(c->fcount * sizeof(MPCFrame));
|
||||
@ -122,7 +122,7 @@ static int mpc_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
int64_t pos;
|
||||
|
||||
if (c->curframe >= c->fcount && c->fcount)
|
||||
return -1;
|
||||
return AVERROR_EOF;
|
||||
|
||||
if(c->curframe != c->lastframe + 1){
|
||||
avio_seek(s->pb, c->frames[c->curframe].pos, SEEK_SET);
|
||||
@ -151,8 +151,8 @@ static int mpc_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
}
|
||||
c->curbits = (curbits + size2) & 0x1F;
|
||||
|
||||
if (av_new_packet(pkt, size) < 0)
|
||||
return AVERROR(EIO);
|
||||
if ((ret = av_new_packet(pkt, size)) < 0)
|
||||
return ret;
|
||||
|
||||
pkt->data[0] = curbits;
|
||||
pkt->data[1] = (c->curframe > c->fcount) && c->fcount;
|
||||
@ -166,7 +166,7 @@ static int mpc_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
avio_seek(s->pb, -4, SEEK_CUR);
|
||||
if(ret < size){
|
||||
av_free_packet(pkt);
|
||||
return AVERROR(EIO);
|
||||
return ret < 0 ? ret : AVERROR(EIO);
|
||||
}
|
||||
pkt->size = ret + 4;
|
||||
|
||||
@ -214,7 +214,7 @@ static int mpc_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
|
||||
ret = av_read_frame(s, pkt);
|
||||
if (ret < 0){
|
||||
c->curframe = lastframe;
|
||||
return -1;
|
||||
return ret;
|
||||
}
|
||||
av_free_packet(pkt);
|
||||
}
|
||||
|
@ -52,6 +52,8 @@ typedef struct {
|
||||
int frame;
|
||||
int64_t header_pos;
|
||||
int64_t samples;
|
||||
|
||||
int64_t apetag_start;
|
||||
} MPCContext;
|
||||
|
||||
static inline int64_t bs_get_v(uint8_t **bs)
|
||||
@ -200,7 +202,7 @@ static int mpc8_read_header(AVFormatContext *s)
|
||||
c->header_pos = avio_tell(pb);
|
||||
if(avio_rl32(pb) != TAG_MPCK){
|
||||
av_log(s, AV_LOG_ERROR, "Not a Musepack8 file\n");
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
while(!url_feof(pb)){
|
||||
@ -212,14 +214,14 @@ static int mpc8_read_header(AVFormatContext *s)
|
||||
}
|
||||
if(tag != TAG_STREAMHDR){
|
||||
av_log(s, AV_LOG_ERROR, "Stream header not found\n");
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
pos = avio_tell(pb);
|
||||
avio_skip(pb, 4); //CRC
|
||||
c->ver = avio_r8(pb);
|
||||
if(c->ver != 8){
|
||||
av_log(s, AV_LOG_ERROR, "Unknown stream version %d\n", c->ver);
|
||||
return -1;
|
||||
return AVERROR_PATCHWELCOME;
|
||||
}
|
||||
c->samples = ffio_read_varlen(pb);
|
||||
ffio_read_varlen(pb); //silence samples at the beginning
|
||||
@ -245,7 +247,7 @@ static int mpc8_read_header(AVFormatContext *s)
|
||||
|
||||
if (pb->seekable) {
|
||||
int64_t pos = avio_tell(s->pb);
|
||||
ff_ape_parse_tag(s);
|
||||
c->apetag_start = ff_ape_parse_tag(s);
|
||||
avio_seek(s->pb, pos, SEEK_SET);
|
||||
}
|
||||
|
||||
@ -260,6 +262,11 @@ static int mpc8_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
|
||||
while(!url_feof(s->pb)){
|
||||
pos = avio_tell(s->pb);
|
||||
|
||||
/* don't return bogus packets with the ape tag data */
|
||||
if (c->apetag_start && pos >= c->apetag_start)
|
||||
return AVERROR_EOF;
|
||||
|
||||
mpc8_get_chunk_header(s->pb, &tag, &size);
|
||||
if (size < 0)
|
||||
return -1;
|
||||
|
@ -573,7 +573,7 @@ static int64_t mpegps_read_dts(AVFormatContext *s, int stream_index,
|
||||
|
||||
AVInputFormat ff_mpegps_demuxer = {
|
||||
.name = "mpeg",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-PS format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-PS (MPEG-2 Program Stream)"),
|
||||
.priv_data_size = sizeof(MpegDemuxContext),
|
||||
.read_probe = mpegps_probe,
|
||||
.read_header = mpegps_read_header,
|
||||
|
@ -1147,7 +1147,7 @@ static const AVClass flavor ## _class = {\
|
||||
MPEGENC_CLASS(mpeg)
|
||||
AVOutputFormat ff_mpeg1system_muxer = {
|
||||
.name = "mpeg",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 System format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 Systems / MPEG program stream"),
|
||||
.mime_type = "video/mpeg",
|
||||
.extensions = "mpg,mpeg",
|
||||
.priv_data_size = sizeof(MpegMuxContext),
|
||||
@ -1163,7 +1163,7 @@ AVOutputFormat ff_mpeg1system_muxer = {
|
||||
MPEGENC_CLASS(vcd)
|
||||
AVOutputFormat ff_mpeg1vcd_muxer = {
|
||||
.name = "vcd",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 System format (VCD)"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 Systems / MPEG program stream (VCD)"),
|
||||
.mime_type = "video/mpeg",
|
||||
.priv_data_size = sizeof(MpegMuxContext),
|
||||
.audio_codec = CODEC_ID_MP2,
|
||||
@ -1196,7 +1196,7 @@ AVOutputFormat ff_mpeg2vob_muxer = {
|
||||
MPEGENC_CLASS(svcd)
|
||||
AVOutputFormat ff_mpeg2svcd_muxer = {
|
||||
.name = "svcd",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 PS format (VOB)"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 PS (SVCD)"),
|
||||
.mime_type = "video/mpeg",
|
||||
.extensions = "vob",
|
||||
.priv_data_size = sizeof(MpegMuxContext),
|
||||
|
@ -2217,7 +2217,7 @@ void ff_mpegts_parse_close(MpegTSContext *ts)
|
||||
|
||||
AVInputFormat ff_mpegts_demuxer = {
|
||||
.name = "mpegts",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 transport stream format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-TS (MPEG-2 Transport Stream)"),
|
||||
.priv_data_size = sizeof(MpegTSContext),
|
||||
.read_probe = mpegts_probe,
|
||||
.read_header = mpegts_read_header,
|
||||
@ -2229,7 +2229,7 @@ AVInputFormat ff_mpegts_demuxer = {
|
||||
|
||||
AVInputFormat ff_mpegtsraw_demuxer = {
|
||||
.name = "mpegtsraw",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 raw transport stream format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("raw MPEG-TS (MPEG-2 Transport Stream)"),
|
||||
.priv_data_size = sizeof(MpegTSContext),
|
||||
.read_header = mpegts_read_header,
|
||||
.read_packet = mpegts_raw_read_packet,
|
||||
|
@ -1225,7 +1225,7 @@ static int mpegts_write_end(AVFormatContext *s)
|
||||
|
||||
AVOutputFormat ff_mpegts_muxer = {
|
||||
.name = "mpegts",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 transport stream format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MPEG-TS (MPEG-2 Transport Stream)"),
|
||||
.mime_type = "video/x-mpegts",
|
||||
.extensions = "ts,m2t,m2ts,mts",
|
||||
.priv_data_size = sizeof(MpegTSWrite),
|
||||
|
@ -2241,7 +2241,7 @@ static int mxf_read_seek(AVFormatContext *s, int stream_index, int64_t sample_ti
|
||||
|
||||
AVInputFormat ff_mxf_demuxer = {
|
||||
.name = "mxf",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Material eXchange Format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MXF (Material eXchange Format)"),
|
||||
.priv_data_size = sizeof(MXFContext),
|
||||
.read_probe = mxf_probe,
|
||||
.read_header = mxf_read_header,
|
||||
|
@ -2158,7 +2158,7 @@ static int mxf_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int
|
||||
|
||||
AVOutputFormat ff_mxf_muxer = {
|
||||
.name = "mxf",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Material eXchange Format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MXF (Material eXchange Format)"),
|
||||
.mime_type = "application/mxf",
|
||||
.extensions = "mxf",
|
||||
.priv_data_size = sizeof(MXFContext),
|
||||
@ -2173,7 +2173,7 @@ AVOutputFormat ff_mxf_muxer = {
|
||||
|
||||
AVOutputFormat ff_mxf_d10_muxer = {
|
||||
.name = "mxf_d10",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Material eXchange Format, D-10 Mapping"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("MXF (Material eXchange Format) D-10 Mapping"),
|
||||
.mime_type = "application/mxf",
|
||||
.priv_data_size = sizeof(MXFContext),
|
||||
.audio_codec = CODEC_ID_PCM_S16LE,
|
||||
|
@ -60,7 +60,7 @@ AVOutputFormat ff_adx_muxer = {
|
||||
#if CONFIG_CAVSVIDEO_MUXER
|
||||
AVOutputFormat ff_cavsvideo_muxer = {
|
||||
.name = "cavsvideo",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("raw Chinese AVS video"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("raw Chinese AVS (Audio Video Standard) video"),
|
||||
.extensions = "cavs",
|
||||
.audio_codec = CODEC_ID_NONE,
|
||||
.video_codec = CODEC_ID_CAVS,
|
||||
|
@ -1114,7 +1114,8 @@ static int rtmp_parse_result(URLContext *s, RTMPContext *rt, RTMPPacket *pkt)
|
||||
break;
|
||||
case RTMP_PT_VIDEO:
|
||||
case RTMP_PT_AUDIO:
|
||||
/* Audio and Video packets are parsed in get_packet() */
|
||||
case RTMP_PT_METADATA:
|
||||
/* Audio, Video and Metadata packets are parsed in get_packet() */
|
||||
break;
|
||||
default:
|
||||
av_log(s, AV_LOG_VERBOSE, "Unknown packet type received 0x%02X\n", pkt->type);
|
||||
|
@ -385,7 +385,7 @@ static const AVClass seg_class = {
|
||||
|
||||
AVOutputFormat ff_segment_muxer = {
|
||||
.name = "segment",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("segment muxer"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("segment"),
|
||||
.priv_data_size = sizeof(SegmentContext),
|
||||
.flags = AVFMT_GLOBALHEADER | AVFMT_NOFILE,
|
||||
.write_header = seg_write_header,
|
||||
|
@ -276,7 +276,7 @@ static av_cold int swf_read_close(AVFormatContext *avctx)
|
||||
|
||||
AVInputFormat ff_swf_demuxer = {
|
||||
.name = "swf",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Flash format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash)"),
|
||||
.priv_data_size = sizeof(SWFContext),
|
||||
.read_probe = swf_probe,
|
||||
.read_header = swf_read_header,
|
||||
|
@ -505,7 +505,7 @@ static int swf_write_trailer(AVFormatContext *s)
|
||||
#if CONFIG_SWF_MUXER
|
||||
AVOutputFormat ff_swf_muxer = {
|
||||
.name = "swf",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Flash format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash)"),
|
||||
.mime_type = "application/x-shockwave-flash",
|
||||
.extensions = "swf",
|
||||
.priv_data_size = sizeof(SWFContext),
|
||||
@ -520,7 +520,7 @@ AVOutputFormat ff_swf_muxer = {
|
||||
#if CONFIG_AVM2_MUXER
|
||||
AVOutputFormat ff_avm2_muxer = {
|
||||
.name = "avm2",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Flash 9 (AVM2) format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash) (AVM2)"),
|
||||
.mime_type = "application/x-shockwave-flash",
|
||||
.priv_data_size = sizeof(SWFContext),
|
||||
.audio_codec = CODEC_ID_MP3,
|
||||
|
@ -160,7 +160,7 @@ static int tta_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
|
||||
|
||||
AVInputFormat ff_tta_demuxer = {
|
||||
.name = "tta",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("True Audio"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("TTA (True Audio)"),
|
||||
.priv_data_size = sizeof(TTAContext),
|
||||
.read_probe = tta_probe,
|
||||
.read_header = tta_read_header,
|
||||
|
@ -215,7 +215,7 @@ static const AVClass wav_muxer_class = {
|
||||
|
||||
AVOutputFormat ff_wav_muxer = {
|
||||
.name = "wav",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("WAV format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("WAV / WAVE (Waveform Audio)"),
|
||||
.mime_type = "audio/x-wav",
|
||||
.extensions = "wav",
|
||||
.priv_data_size = sizeof(WAVContext),
|
||||
@ -699,7 +699,7 @@ static const AVClass wav_demuxer_class = {
|
||||
};
|
||||
AVInputFormat ff_wav_demuxer = {
|
||||
.name = "wav",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("WAV format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("WAV / WAVE (Waveform Audio)"),
|
||||
.priv_data_size = sizeof(WAVContext),
|
||||
.read_probe = wav_probe,
|
||||
.read_header = wav_read_header,
|
||||
|
@ -64,6 +64,8 @@ typedef struct {
|
||||
int block_parsed;
|
||||
uint8_t extra[WV_EXTRA_SIZE];
|
||||
int64_t pos;
|
||||
|
||||
int64_t apetag_start;
|
||||
} WVContext;
|
||||
|
||||
static int wv_probe(AVProbeData *p)
|
||||
@ -88,6 +90,11 @@ static int wv_read_block_header(AVFormatContext *ctx, AVIOContext *pb,
|
||||
uint32_t chmask;
|
||||
|
||||
wc->pos = avio_tell(pb);
|
||||
|
||||
/* don't return bogus packets with the ape tag data */
|
||||
if (wc->apetag_start && wc->pos >= wc->apetag_start)
|
||||
return AVERROR_EOF;
|
||||
|
||||
if (!append) {
|
||||
tag = avio_rl32(pb);
|
||||
if (tag != MKTAG('w', 'v', 'p', 'k'))
|
||||
@ -252,7 +259,7 @@ static int wv_read_header(AVFormatContext *s)
|
||||
|
||||
if (s->pb->seekable) {
|
||||
int64_t cur = avio_tell(s->pb);
|
||||
ff_ape_parse_tag(s);
|
||||
wc->apetag_start = ff_ape_parse_tag(s);
|
||||
if (!av_dict_get(s->metadata, "", NULL, AV_DICT_IGNORE_SUFFIX))
|
||||
ff_id3v1_read(s);
|
||||
avio_seek(s->pb, cur, SEEK_SET);
|
||||
|
Loading…
Reference in New Issue
Block a user