* 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>tags/n1.0
| @@ -2914,7 +2914,7 @@ AVCodec ff_aac_latm_decoder = { | |||||
| .init = latm_decode_init, | .init = latm_decode_init, | ||||
| .close = aac_decode_close, | .close = aac_decode_close, | ||||
| .decode = latm_decode_frame, | .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[]) { | .sample_fmts = (const enum AVSampleFormat[]) { | ||||
| AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE | AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE | ||||
| }, | }, | ||||
| @@ -829,6 +829,6 @@ AVCodec ff_aac_encoder = { | |||||
| CODEC_CAP_EXPERIMENTAL, | CODEC_CAP_EXPERIMENTAL, | ||||
| .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, | .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, | ||||
| AV_SAMPLE_FMT_NONE }, | 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, | .priv_class = &aacenc_class, | ||||
| }; | }; | ||||
| @@ -1080,7 +1080,7 @@ AVCodec ff_amrnb_decoder = { | |||||
| .init = amrnb_decode_init, | .init = amrnb_decode_init, | ||||
| .decode = amrnb_decode_frame, | .decode = amrnb_decode_frame, | ||||
| .capabilities = CODEC_CAP_DR1, | .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, | .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, | ||||
| AV_SAMPLE_FMT_NONE }, | AV_SAMPLE_FMT_NONE }, | ||||
| }; | }; | ||||
| @@ -1262,7 +1262,7 @@ AVCodec ff_amrwb_decoder = { | |||||
| .init = amrwb_decode_init, | .init = amrwb_decode_init, | ||||
| .decode = amrwb_decode_frame, | .decode = amrwb_decode_frame, | ||||
| .capabilities = CODEC_CAP_DR1, | .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, | .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, | ||||
| AV_SAMPLE_FMT_NONE }, | AV_SAMPLE_FMT_NONE }, | ||||
| }; | }; | ||||
| @@ -68,7 +68,7 @@ static int ass_decode_close(AVCodecContext *avctx) | |||||
| AVCodec ff_ass_decoder = { | AVCodec ff_ass_decoder = { | ||||
| .name = "ass", | .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, | .type = AVMEDIA_TYPE_SUBTITLE, | ||||
| .id = CODEC_ID_SSA, | .id = CODEC_ID_SSA, | ||||
| .init = ass_decode_init, | .init = ass_decode_init, | ||||
| @@ -59,7 +59,7 @@ static int ass_encode_frame(AVCodecContext *avctx, | |||||
| AVCodec ff_ass_encoder = { | AVCodec ff_ass_encoder = { | ||||
| .name = "ass", | .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, | .type = AVMEDIA_TYPE_SUBTITLE, | ||||
| .id = CODEC_ID_SSA, | .id = CODEC_ID_SSA, | ||||
| .init = ass_encode_init, | .init = ass_encode_init, | ||||
| @@ -358,5 +358,5 @@ AVCodec ff_bmp_decoder = { | |||||
| .close = bmp_decode_end, | .close = bmp_decode_end, | ||||
| .decode = bmp_decode_frame, | .decode = bmp_decode_frame, | ||||
| .capabilities = CODEC_CAP_DR1, | .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_MONOBLACK, | ||||
| PIX_FMT_NONE | 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, | .decode = cavs_decode_frame, | ||||
| .capabilities = CODEC_CAP_DR1 | CODEC_CAP_DELAY, | .capabilities = CODEC_CAP_DR1 | CODEC_CAP_DELAY, | ||||
| .flush = cavs_flush, | .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, | .close = cook_decode_close, | ||||
| .decode = cook_decode_frame, | .decode = cook_decode_frame, | ||||
| .capabilities = CODEC_CAP_DR1, | .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, | .decode = ff_h263_decode_frame, | ||||
| .capabilities = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1, | .capabilities = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1, | ||||
| .max_lowres = 3, | .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, | .pix_fmts = ff_pixfmt_list_420, | ||||
| }; | }; | ||||
| @@ -95,6 +95,6 @@ AVCodec ff_flv_encoder = { | |||||
| .encode2 = ff_MPV_encode_picture, | .encode2 = ff_MPV_encode_picture, | ||||
| .close = ff_MPV_encode_end, | .close = ff_MPV_encode_end, | ||||
| .pix_fmts = (const enum PixelFormat[]){ PIX_FMT_YUV420P, PIX_FMT_NONE }, | .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, | .priv_class = &flv_class, | ||||
| }; | }; | ||||
| @@ -245,7 +245,7 @@ AVCodec ff_libfaac_encoder = { | |||||
| .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY, | .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY, | ||||
| .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, | .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, | ||||
| AV_SAMPLE_FMT_NONE }, | 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), | .profiles = NULL_IF_CONFIG_SMALL(profiles), | ||||
| .channel_layouts = faac_channel_layouts, | .channel_layouts = faac_channel_layouts, | ||||
| }; | }; | ||||
| @@ -114,7 +114,7 @@ AVCodec ff_libilbc_decoder = { | |||||
| .init = ilbc_decode_init, | .init = ilbc_decode_init, | ||||
| .decode = ilbc_decode_frame, | .decode = ilbc_decode_frame, | ||||
| .capabilities = CODEC_CAP_DR1, | .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, | .priv_class = &ilbc_dec_class, | ||||
| }; | }; | ||||
| @@ -209,7 +209,7 @@ AVCodec ff_libilbc_encoder = { | |||||
| .close = ilbc_encode_close, | .close = ilbc_encode_close, | ||||
| .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, | .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, | ||||
| AV_SAMPLE_FMT_NONE }, | 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, | .defaults = ilbc_encode_defaults, | ||||
| .priv_class = &ilbc_enc_class, | .priv_class = &ilbc_enc_class, | ||||
| }; | }; | ||||
| @@ -180,7 +180,7 @@ AVCodec ff_libopencore_amrnb_decoder = { | |||||
| .close = amr_nb_decode_close, | .close = amr_nb_decode_close, | ||||
| .decode = amr_nb_decode_frame, | .decode = amr_nb_decode_frame, | ||||
| .capabilities = CODEC_CAP_DR1, | .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) | 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, | .capabilities = CODEC_CAP_DELAY | CODEC_CAP_SMALL_LAST_FRAME, | ||||
| .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, | .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, | ||||
| AV_SAMPLE_FMT_NONE }, | 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, | .priv_class = &class, | ||||
| }; | }; | ||||
| @@ -384,7 +384,7 @@ AVCodec ff_libopencore_amrwb_decoder = { | |||||
| .close = amr_wb_decode_close, | .close = amr_wb_decode_close, | ||||
| .decode = amr_wb_decode_frame, | .decode = amr_wb_decode_frame, | ||||
| .capabilities = CODEC_CAP_DR1, | .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 */ | #endif /* CONFIG_LIBOPENCORE_AMRWB */ | ||||
| @@ -197,5 +197,5 @@ AVCodec ff_libvo_aacenc_encoder = { | |||||
| .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY, | .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY, | ||||
| .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, | .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, | ||||
| AV_SAMPLE_FMT_NONE }, | 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, | .close = amr_wb_encode_close, | ||||
| .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, | .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, | ||||
| AV_SAMPLE_FMT_NONE }, | 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, | .priv_class = &class, | ||||
| }; | }; | ||||
| @@ -424,7 +424,7 @@ AVCodec ff_libxavs_encoder = { | |||||
| .close = XAVS_close, | .close = XAVS_close, | ||||
| .capabilities = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS, | .capabilities = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS, | ||||
| .pix_fmts = (const enum PixelFormat[]) { PIX_FMT_YUV420P, PIX_FMT_NONE }, | .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, | .priv_class = &class, | ||||
| .defaults = xavs_defaults, | .defaults = xavs_defaults, | ||||
| }; | }; | ||||
| @@ -474,5 +474,5 @@ AVCodec ff_tta_decoder = { | |||||
| .close = tta_decode_close, | .close = tta_decode_close, | ||||
| .decode = tta_decode_frame, | .decode = tta_decode_frame, | ||||
| .capabilities = CODEC_CAP_DR1, | .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/x86inc.asm" | ||||
| %include "libavutil/x86/x86util.asm" | %include "libavutil/x86/x86util.asm" | ||||
| SECTION_RODATA | |||||
| pb_3_1: times 4 db 3, 1 | |||||
| SECTION .text | SECTION .text | ||||
| cextern pb_0 | cextern pb_0 | ||||
| @@ -921,3 +925,167 @@ ff_chroma_intra_body_mmx2: | |||||
| paddb m1, m5 | paddb m1, m5 | ||||
| paddb m2, m6 | paddb m2, m6 | ||||
| ret | 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 */ | /* 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) \ | #define LF_FUNC(DIR, TYPE, DEPTH, OPT) \ | ||||
| void ff_deblock_ ## DIR ## _ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *pix, int stride, \ | 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) | 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(); | int mm_flags = av_get_cpu_flags(); | ||||
| if (chroma_format_idc == 1 && mm_flags & AV_CPU_FLAG_MMX2) { | 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 (bit_depth == 8) { | ||||
| #if HAVE_YASM | |||||
| if (mm_flags & AV_CPU_FLAG_MMX) { | if (mm_flags & AV_CPU_FLAG_MMX) { | ||||
| c->h264_idct_dc_add = | c->h264_idct_dc_add = | ||||
| c->h264_idct_add = ff_h264_idct_add_8_mmx; | 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) { | } else if (bit_depth == 10) { | ||||
| #if HAVE_YASM | |||||
| if (mm_flags & AV_CPU_FLAG_MMX) { | if (mm_flags & AV_CPU_FLAG_MMX) { | ||||
| if (mm_flags & AV_CPU_FLAG_MMX2) { | if (mm_flags & AV_CPU_FLAG_MMX2) { | ||||
| #if ARCH_X86_32 | #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 /* HAVE_AVX */ | ||||
| } | } | ||||
| } | } | ||||
| #endif | |||||
| } | } | ||||
| #endif | |||||
| } | } | ||||
| @@ -296,7 +296,7 @@ static const AVClass oss_demuxer_class = { | |||||
| AVInputFormat ff_oss_demuxer = { | AVInputFormat ff_oss_demuxer = { | ||||
| .name = "oss", | .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), | .priv_data_size = sizeof(AudioData), | ||||
| .read_header = audio_read_header, | .read_header = audio_read_header, | ||||
| .read_packet = audio_read_packet, | .read_packet = audio_read_packet, | ||||
| @@ -309,7 +309,7 @@ AVInputFormat ff_oss_demuxer = { | |||||
| #if CONFIG_OSS_OUTDEV | #if CONFIG_OSS_OUTDEV | ||||
| AVOutputFormat ff_oss_muxer = { | AVOutputFormat ff_oss_muxer = { | ||||
| .name = "oss", | .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), | .priv_data_size = sizeof(AudioData), | ||||
| /* XXX: we make the assumption that the soundcard accepts this format */ | /* XXX: we make the assumption that the soundcard accepts this format */ | ||||
| /* XXX: find better solution with "preinit" method, needed also in | /* 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 | #undef COMPILE_TEMPLATE_SSE | ||||
| #endif | #endif | ||||
| #if HAVE_MMX | |||||
| #if HAVE_MMX2 | |||||
| #undef RENAME | #undef RENAME | ||||
| #define RENAME(a) a ## _mmx | |||||
| #define RENAME(a) a ## _mmx2 | |||||
| #include "yadif_template.c" | #include "yadif_template.c" | ||||
| #endif | #endif | ||||
| @@ -58,9 +58,9 @@ av_cold void ff_yadif_init_x86(YADIFContext *yadif) | |||||
| int cpu_flags = av_get_cpu_flags(); | int cpu_flags = av_get_cpu_flags(); | ||||
| #if HAVE_INLINE_ASM | #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 | #endif | ||||
| #if HAVE_SSE | #if HAVE_SSE | ||||
| if (cpu_flags & AV_CPU_FLAG_SSE2) | if (cpu_flags & AV_CPU_FLAG_SSE2) | ||||
| @@ -84,7 +84,7 @@ static int adts_aac_read_header(AVFormatContext *s) | |||||
| AVInputFormat ff_aac_demuxer = { | AVInputFormat ff_aac_demuxer = { | ||||
| .name = "aac", | .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_probe = adts_aac_probe, | ||||
| .read_header = adts_aac_read_header, | .read_header = adts_aac_read_header, | ||||
| .read_packet = ff_raw_read_partial_packet, | .read_packet = ff_raw_read_partial_packet, | ||||
| @@ -165,7 +165,7 @@ static int adts_write_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| AVOutputFormat ff_adts_muxer = { | AVOutputFormat ff_adts_muxer = { | ||||
| .name = "adts", | .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", | .mime_type = "audio/aac", | ||||
| .extensions = "aac,adts", | .extensions = "aac,adts", | ||||
| .priv_data_size = sizeof(ADTSContext), | .priv_data_size = sizeof(ADTSContext), | ||||
| @@ -111,40 +111,47 @@ static int ape_tag_read_field(AVFormatContext *s) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| void ff_ape_parse_tag(AVFormatContext *s) | |||||
| int64_t ff_ape_parse_tag(AVFormatContext *s) | |||||
| { | { | ||||
| AVIOContext *pb = s->pb; | AVIOContext *pb = s->pb; | ||||
| int file_size = avio_size(pb); | int file_size = avio_size(pb); | ||||
| uint32_t val, fields, tag_bytes; | uint32_t val, fields, tag_bytes; | ||||
| uint8_t buf[8]; | uint8_t buf[8]; | ||||
| int64_t tag_start; | |||||
| int i; | int i; | ||||
| if (file_size < APE_TAG_FOOTER_BYTES) | if (file_size < APE_TAG_FOOTER_BYTES) | ||||
| return; | |||||
| return 0; | |||||
| avio_seek(pb, file_size - APE_TAG_FOOTER_BYTES, SEEK_SET); | avio_seek(pb, file_size - APE_TAG_FOOTER_BYTES, SEEK_SET); | ||||
| avio_read(pb, buf, 8); /* APETAGEX */ | avio_read(pb, buf, 8); /* APETAGEX */ | ||||
| if (strncmp(buf, APE_TAG_PREAMBLE, 8)) { | if (strncmp(buf, APE_TAG_PREAMBLE, 8)) { | ||||
| return; | |||||
| return 0; | |||||
| } | } | ||||
| val = avio_rl32(pb); /* APE tag version */ | val = avio_rl32(pb); /* APE tag version */ | ||||
| if (val > APE_TAG_VERSION) { | if (val > APE_TAG_VERSION) { | ||||
| av_log(s, AV_LOG_ERROR, "Unsupported tag version. (>=%d)\n", 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 */ | tag_bytes = avio_rl32(pb); /* tag size */ | ||||
| if (tag_bytes - APE_TAG_FOOTER_BYTES > (1024 * 1024 * 16)) { | if (tag_bytes - APE_TAG_FOOTER_BYTES > (1024 * 1024 * 16)) { | ||||
| av_log(s, AV_LOG_ERROR, "Tag size is way too big\n"); | 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 */ | fields = avio_rl32(pb); /* number of fields */ | ||||
| if (fields > 65536) { | if (fields > 65536) { | ||||
| av_log(s, AV_LOG_ERROR, "Too many tag fields (%d)\n", fields); | av_log(s, AV_LOG_ERROR, "Too many tag fields (%d)\n", fields); | ||||
| return; | |||||
| return 0; | |||||
| } | } | ||||
| val = avio_rl32(pb); /* flags */ | val = avio_rl32(pb); /* flags */ | ||||
| @@ -157,4 +164,6 @@ void ff_ape_parse_tag(AVFormatContext *s) | |||||
| for (i=0; i<fields; i++) | for (i=0; i<fields; i++) | ||||
| if (ape_tag_read_field(s) < 0) break; | if (ape_tag_read_field(s) < 0) break; | ||||
| return tag_start; | |||||
| } | } | ||||
| @@ -31,8 +31,10 @@ | |||||
| /** | /** | ||||
| * Read and parse an APE tag | * 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 | * 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 = { | AVInputFormat ff_asf_demuxer = { | ||||
| .name = "asf", | .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), | .priv_data_size = sizeof(ASFContext), | ||||
| .read_probe = asf_probe, | .read_probe = asf_probe, | ||||
| .read_header = asf_read_header, | .read_header = asf_read_header, | ||||
| @@ -901,7 +901,7 @@ static int asf_write_trailer(AVFormatContext *s) | |||||
| #if CONFIG_ASF_MUXER | #if CONFIG_ASF_MUXER | ||||
| AVOutputFormat ff_asf_muxer = { | AVOutputFormat ff_asf_muxer = { | ||||
| .name = "asf", | .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", | .mime_type = "video/x-ms-asf", | ||||
| .extensions = "asf,wmv,wma", | .extensions = "asf,wmv,wma", | ||||
| .priv_data_size = sizeof(ASFContext), | .priv_data_size = sizeof(ASFContext), | ||||
| @@ -920,7 +920,7 @@ AVOutputFormat ff_asf_muxer = { | |||||
| #if CONFIG_ASF_STREAM_MUXER | #if CONFIG_ASF_STREAM_MUXER | ||||
| AVOutputFormat ff_asf_stream_muxer = { | AVOutputFormat ff_asf_stream_muxer = { | ||||
| .name = "asf_stream", | .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", | .mime_type = "video/x-ms-asf", | ||||
| .extensions = "asf,wmv,wma", | .extensions = "asf,wmv,wma", | ||||
| .priv_data_size = sizeof(ASFContext), | .priv_data_size = sizeof(ASFContext), | ||||
| @@ -205,7 +205,7 @@ static int read_seek2(AVFormatContext *s, int stream_index, | |||||
| AVInputFormat ff_ass_demuxer = { | AVInputFormat ff_ass_demuxer = { | ||||
| .name = "ass", | .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), | .priv_data_size = sizeof(ASSContext), | ||||
| .read_probe = probe, | .read_probe = probe, | ||||
| .read_header = read_header, | .read_header = read_header, | ||||
| @@ -79,7 +79,7 @@ static int write_trailer(AVFormatContext *s) | |||||
| AVOutputFormat ff_ass_muxer = { | AVOutputFormat ff_ass_muxer = { | ||||
| .name = "ass", | .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", | .mime_type = "text/x-ssa", | ||||
| .extensions = "ass,ssa", | .extensions = "ass,ssa", | ||||
| .priv_data_size = sizeof(ASSContext), | .priv_data_size = sizeof(ASSContext), | ||||
| @@ -195,7 +195,7 @@ static int au_read_packet(AVFormatContext *s, | |||||
| #if CONFIG_AU_DEMUXER | #if CONFIG_AU_DEMUXER | ||||
| AVInputFormat ff_au_demuxer = { | AVInputFormat ff_au_demuxer = { | ||||
| .name = "au", | .name = "au", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("SUN AU format"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("Sun AU"), | |||||
| .read_probe = au_probe, | .read_probe = au_probe, | ||||
| .read_header = au_read_header, | .read_header = au_read_header, | ||||
| .read_packet = au_read_packet, | .read_packet = au_read_packet, | ||||
| @@ -207,7 +207,7 @@ AVInputFormat ff_au_demuxer = { | |||||
| #if CONFIG_AU_MUXER | #if CONFIG_AU_MUXER | ||||
| AVOutputFormat ff_au_muxer = { | AVOutputFormat ff_au_muxer = { | ||||
| .name = "au", | .name = "au", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("SUN AU format"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("Sun AU"), | |||||
| .mime_type = "audio/basic", | .mime_type = "audio/basic", | ||||
| .extensions = "au", | .extensions = "au", | ||||
| .audio_codec = CODEC_ID_PCM_S16BE, | .audio_codec = CODEC_ID_PCM_S16BE, | ||||
| @@ -1562,7 +1562,7 @@ static int avi_probe(AVProbeData *p) | |||||
| AVInputFormat ff_avi_demuxer = { | AVInputFormat ff_avi_demuxer = { | ||||
| .name = "avi", | .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), | .priv_data_size = sizeof(AVIContext), | ||||
| .read_probe = avi_probe, | .read_probe = avi_probe, | ||||
| .read_header = avi_read_header, | .read_header = avi_read_header, | ||||
| @@ -650,7 +650,7 @@ static int avi_write_trailer(AVFormatContext *s) | |||||
| AVOutputFormat ff_avi_muxer = { | AVOutputFormat ff_avi_muxer = { | ||||
| .name = "avi", | .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", | .mime_type = "video/x-msvideo", | ||||
| .extensions = "avi", | .extensions = "avi", | ||||
| .priv_data_size = sizeof(AVIContext), | .priv_data_size = sizeof(AVIContext), | ||||
| @@ -417,7 +417,7 @@ static int read_seek(AVFormatContext *s, int stream_index, | |||||
| AVInputFormat ff_caf_demuxer = { | AVInputFormat ff_caf_demuxer = { | ||||
| .name = "caf", | .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), | .priv_data_size = sizeof(CaffContext), | ||||
| .read_probe = probe, | .read_probe = probe, | ||||
| .read_header = read_header, | .read_header = read_header, | ||||
| @@ -65,4 +65,4 @@ static int cavsvideo_probe(AVProbeData *p) | |||||
| return 0; | 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 | #if CONFIG_DV_DEMUXER | ||||
| AVInputFormat ff_dv_demuxer = { | AVInputFormat ff_dv_demuxer = { | ||||
| .name = "dv", | .name = "dv", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("DV video"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"), | |||||
| .priv_data_size = sizeof(RawDVContext), | .priv_data_size = sizeof(RawDVContext), | ||||
| .read_probe = dv_probe, | .read_probe = dv_probe, | ||||
| .read_header = dv_read_header, | .read_header = dv_read_header, | ||||
| @@ -407,7 +407,7 @@ static int dv_write_trailer(struct AVFormatContext *s) | |||||
| AVOutputFormat ff_dv_muxer = { | AVOutputFormat ff_dv_muxer = { | ||||
| .name = "dv", | .name = "dv", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("DV video"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"), | |||||
| .extensions = "dv", | .extensions = "dv", | ||||
| .priv_data_size = sizeof(DVMuxContext), | .priv_data_size = sizeof(DVMuxContext), | ||||
| .audio_codec = CODEC_ID_PCM_S16LE, | .audio_codec = CODEC_ID_PCM_S16LE, | ||||
| @@ -889,7 +889,7 @@ static const AVClass class = { | |||||
| AVInputFormat ff_flv_demuxer = { | AVInputFormat ff_flv_demuxer = { | ||||
| .name = "flv", | .name = "flv", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("FLV format"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"), | |||||
| .priv_data_size = sizeof(FLVContext), | .priv_data_size = sizeof(FLVContext), | ||||
| .read_probe = flv_probe, | .read_probe = flv_probe, | ||||
| .read_header = flv_read_header, | .read_header = flv_read_header, | ||||
| @@ -566,7 +566,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| AVOutputFormat ff_flv_muxer = { | AVOutputFormat ff_flv_muxer = { | ||||
| .name = "flv", | .name = "flv", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("FLV format"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"), | |||||
| .mime_type = "video/x-flv", | .mime_type = "video/x-flv", | ||||
| .extensions = "flv", | .extensions = "flv", | ||||
| .priv_data_size = sizeof(FLVContext), | .priv_data_size = sizeof(FLVContext), | ||||
| @@ -569,7 +569,7 @@ static int64_t gxf_read_timestamp(AVFormatContext *s, int stream_index, | |||||
| AVInputFormat ff_gxf_demuxer = { | AVInputFormat ff_gxf_demuxer = { | ||||
| .name = "gxf", | .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), | .priv_data_size = sizeof(struct gxf_stream_info), | ||||
| .read_probe = gxf_probe, | .read_probe = gxf_probe, | ||||
| .read_header = gxf_header, | .read_header = gxf_header, | ||||
| @@ -986,7 +986,7 @@ static int gxf_interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *pk | |||||
| AVOutputFormat ff_gxf_muxer = { | AVOutputFormat ff_gxf_muxer = { | ||||
| .name = "gxf", | .name = "gxf", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("GXF format"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("GXF (General eXchange Format)"), | |||||
| .extensions = "gxf", | .extensions = "gxf", | ||||
| .priv_data_size = sizeof(GXFContext), | .priv_data_size = sizeof(GXFContext), | ||||
| .audio_codec = CODEC_ID_PCM_S16LE, | .audio_codec = CODEC_ID_PCM_S16LE, | ||||
| @@ -388,7 +388,7 @@ static int iff_read_packet(AVFormatContext *s, | |||||
| AVInputFormat ff_iff_demuxer = { | AVInputFormat ff_iff_demuxer = { | ||||
| .name = "iff", | .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), | .priv_data_size = sizeof(IffDemuxContext), | ||||
| .read_probe = iff_probe, | .read_probe = iff_probe, | ||||
| .read_header = iff_read_header, | .read_header = iff_read_header, | ||||
| @@ -110,7 +110,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| AVInputFormat ff_iv8_demuxer = { | AVInputFormat ff_iv8_demuxer = { | ||||
| .name = "iv8", | .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_probe = probe, | ||||
| .read_header = read_header, | .read_header = read_header, | ||||
| .read_packet = read_packet, | .read_packet = read_packet, | ||||
| @@ -3193,7 +3193,7 @@ static const AVClass class = { | |||||
| AVInputFormat ff_mov_demuxer = { | AVInputFormat ff_mov_demuxer = { | ||||
| .name = "mov,mp4,m4a,3gp,3g2,mj2", | .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), | .priv_data_size = sizeof(MOVContext), | ||||
| .read_probe = mov_probe, | .read_probe = mov_probe, | ||||
| .read_header = mov_read_header, | .read_header = mov_read_header, | ||||
| @@ -3582,7 +3582,7 @@ static int mov_write_trailer(AVFormatContext *s) | |||||
| MOV_CLASS(mov) | MOV_CLASS(mov) | ||||
| AVOutputFormat ff_mov_muxer = { | AVOutputFormat ff_mov_muxer = { | ||||
| .name = "mov", | .name = "mov", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("MOV format"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("QuickTime / MOV"), | |||||
| .extensions = "mov", | .extensions = "mov", | ||||
| .priv_data_size = sizeof(MOVMuxContext), | .priv_data_size = sizeof(MOVMuxContext), | ||||
| .audio_codec = CODEC_ID_AAC, | .audio_codec = CODEC_ID_AAC, | ||||
| @@ -3602,7 +3602,7 @@ AVOutputFormat ff_mov_muxer = { | |||||
| MOV_CLASS(tgp) | MOV_CLASS(tgp) | ||||
| AVOutputFormat ff_tgp_muxer = { | AVOutputFormat ff_tgp_muxer = { | ||||
| .name = "3gp", | .name = "3gp", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("3GP format"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("3GP (3GPP file format)"), | |||||
| .extensions = "3gp", | .extensions = "3gp", | ||||
| .priv_data_size = sizeof(MOVMuxContext), | .priv_data_size = sizeof(MOVMuxContext), | ||||
| .audio_codec = CODEC_ID_AMR_NB, | .audio_codec = CODEC_ID_AMR_NB, | ||||
| @@ -3619,7 +3619,7 @@ AVOutputFormat ff_tgp_muxer = { | |||||
| MOV_CLASS(mp4) | MOV_CLASS(mp4) | ||||
| AVOutputFormat ff_mp4_muxer = { | AVOutputFormat ff_mp4_muxer = { | ||||
| .name = "mp4", | .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", | .mime_type = "application/mp4", | ||||
| .extensions = "mp4", | .extensions = "mp4", | ||||
| .priv_data_size = sizeof(MOVMuxContext), | .priv_data_size = sizeof(MOVMuxContext), | ||||
| @@ -3638,7 +3638,7 @@ AVOutputFormat ff_mp4_muxer = { | |||||
| MOV_CLASS(psp) | MOV_CLASS(psp) | ||||
| AVOutputFormat ff_psp_muxer = { | AVOutputFormat ff_psp_muxer = { | ||||
| .name = "psp", | .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", | .extensions = "mp4,psp", | ||||
| .priv_data_size = sizeof(MOVMuxContext), | .priv_data_size = sizeof(MOVMuxContext), | ||||
| .audio_codec = CODEC_ID_AAC, | .audio_codec = CODEC_ID_AAC, | ||||
| @@ -3656,7 +3656,7 @@ AVOutputFormat ff_psp_muxer = { | |||||
| MOV_CLASS(tg2) | MOV_CLASS(tg2) | ||||
| AVOutputFormat ff_tg2_muxer = { | AVOutputFormat ff_tg2_muxer = { | ||||
| .name = "3g2", | .name = "3g2", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("3GP2 format"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("3GP2 (3GPP2 file format)"), | |||||
| .extensions = "3g2", | .extensions = "3g2", | ||||
| .priv_data_size = sizeof(MOVMuxContext), | .priv_data_size = sizeof(MOVMuxContext), | ||||
| .audio_codec = CODEC_ID_AMR_NB, | .audio_codec = CODEC_ID_AMR_NB, | ||||
| @@ -3673,7 +3673,7 @@ AVOutputFormat ff_tg2_muxer = { | |||||
| MOV_CLASS(ipod) | MOV_CLASS(ipod) | ||||
| AVOutputFormat ff_ipod_muxer = { | AVOutputFormat ff_ipod_muxer = { | ||||
| .name = "ipod", | .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", | .mime_type = "application/mp4", | ||||
| .extensions = "m4v,m4a", | .extensions = "m4v,m4a", | ||||
| .priv_data_size = sizeof(MOVMuxContext), | .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 = { | AVInputFormat ff_mp3_demuxer = { | ||||
| .name = "mp3", | .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), | .priv_data_size = sizeof(MP3Context), | ||||
| .read_probe = mp3_read_probe, | .read_probe = mp3_read_probe, | ||||
| .read_header = mp3_read_header, | .read_header = mp3_read_header, | ||||
| @@ -373,7 +373,7 @@ static int mp2_write_trailer(struct AVFormatContext *s) | |||||
| #if CONFIG_MP2_MUXER | #if CONFIG_MP2_MUXER | ||||
| AVOutputFormat ff_mp2_muxer = { | AVOutputFormat ff_mp2_muxer = { | ||||
| .name = "mp2", | .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", | .mime_type = "audio/x-mpeg", | ||||
| .extensions = "mp2,m2a", | .extensions = "mp2,m2a", | ||||
| .audio_codec = CODEC_ID_MP2, | .audio_codec = CODEC_ID_MP2, | ||||
| @@ -507,7 +507,7 @@ static int mp3_write_trailer(AVFormatContext *s) | |||||
| AVOutputFormat ff_mp3_muxer = { | AVOutputFormat ff_mp3_muxer = { | ||||
| .name = "mp3", | .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", | .mime_type = "audio/x-mpeg", | ||||
| .extensions = "mp3", | .extensions = "mp3", | ||||
| .priv_data_size = sizeof(MP3Context), | .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)){ | if(avio_rl24(s->pb) != MKTAG('M', 'P', '+', 0)){ | ||||
| av_log(s, AV_LOG_ERROR, "Not a Musepack file\n"); | av_log(s, AV_LOG_ERROR, "Not a Musepack file\n"); | ||||
| return -1; | |||||
| return AVERROR_INVALIDDATA; | |||||
| } | } | ||||
| c->ver = avio_r8(s->pb); | c->ver = avio_r8(s->pb); | ||||
| if(c->ver != 0x07 && c->ver != 0x17){ | if(c->ver != 0x07 && c->ver != 0x17){ | ||||
| av_log(s, AV_LOG_ERROR, "Can demux Musepack SV7, got version %02X\n", c->ver); | 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); | c->fcount = avio_rl32(s->pb); | ||||
| if((int64_t)c->fcount * sizeof(MPCFrame) >= UINT_MAX){ | if((int64_t)c->fcount * sizeof(MPCFrame) >= UINT_MAX){ | ||||
| av_log(s, AV_LOG_ERROR, "Too many frames, seeking is not possible\n"); | av_log(s, AV_LOG_ERROR, "Too many frames, seeking is not possible\n"); | ||||
| return -1; | |||||
| return AVERROR_INVALIDDATA; | |||||
| } | } | ||||
| if(c->fcount){ | if(c->fcount){ | ||||
| c->frames = av_malloc(c->fcount * sizeof(MPCFrame)); | c->frames = av_malloc(c->fcount * sizeof(MPCFrame)); | ||||
| @@ -122,7 +122,7 @@ static int mpc_read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| int64_t pos; | int64_t pos; | ||||
| if (c->curframe >= c->fcount && c->fcount) | if (c->curframe >= c->fcount && c->fcount) | ||||
| return -1; | |||||
| return AVERROR_EOF; | |||||
| if(c->curframe != c->lastframe + 1){ | if(c->curframe != c->lastframe + 1){ | ||||
| avio_seek(s->pb, c->frames[c->curframe].pos, SEEK_SET); | 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; | 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[0] = curbits; | ||||
| pkt->data[1] = (c->curframe > c->fcount) && c->fcount; | 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); | avio_seek(s->pb, -4, SEEK_CUR); | ||||
| if(ret < size){ | if(ret < size){ | ||||
| av_free_packet(pkt); | av_free_packet(pkt); | ||||
| return AVERROR(EIO); | |||||
| return ret < 0 ? ret : AVERROR(EIO); | |||||
| } | } | ||||
| pkt->size = ret + 4; | 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); | ret = av_read_frame(s, pkt); | ||||
| if (ret < 0){ | if (ret < 0){ | ||||
| c->curframe = lastframe; | c->curframe = lastframe; | ||||
| return -1; | |||||
| return ret; | |||||
| } | } | ||||
| av_free_packet(pkt); | av_free_packet(pkt); | ||||
| } | } | ||||
| @@ -52,6 +52,8 @@ typedef struct { | |||||
| int frame; | int frame; | ||||
| int64_t header_pos; | int64_t header_pos; | ||||
| int64_t samples; | int64_t samples; | ||||
| int64_t apetag_start; | |||||
| } MPCContext; | } MPCContext; | ||||
| static inline int64_t bs_get_v(uint8_t **bs) | 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); | c->header_pos = avio_tell(pb); | ||||
| if(avio_rl32(pb) != TAG_MPCK){ | if(avio_rl32(pb) != TAG_MPCK){ | ||||
| av_log(s, AV_LOG_ERROR, "Not a Musepack8 file\n"); | av_log(s, AV_LOG_ERROR, "Not a Musepack8 file\n"); | ||||
| return -1; | |||||
| return AVERROR_INVALIDDATA; | |||||
| } | } | ||||
| while(!url_feof(pb)){ | while(!url_feof(pb)){ | ||||
| @@ -212,14 +214,14 @@ static int mpc8_read_header(AVFormatContext *s) | |||||
| } | } | ||||
| if(tag != TAG_STREAMHDR){ | if(tag != TAG_STREAMHDR){ | ||||
| av_log(s, AV_LOG_ERROR, "Stream header not found\n"); | av_log(s, AV_LOG_ERROR, "Stream header not found\n"); | ||||
| return -1; | |||||
| return AVERROR_INVALIDDATA; | |||||
| } | } | ||||
| pos = avio_tell(pb); | pos = avio_tell(pb); | ||||
| avio_skip(pb, 4); //CRC | avio_skip(pb, 4); //CRC | ||||
| c->ver = avio_r8(pb); | c->ver = avio_r8(pb); | ||||
| if(c->ver != 8){ | if(c->ver != 8){ | ||||
| av_log(s, AV_LOG_ERROR, "Unknown stream version %d\n", c->ver); | av_log(s, AV_LOG_ERROR, "Unknown stream version %d\n", c->ver); | ||||
| return -1; | |||||
| return AVERROR_PATCHWELCOME; | |||||
| } | } | ||||
| c->samples = ffio_read_varlen(pb); | c->samples = ffio_read_varlen(pb); | ||||
| ffio_read_varlen(pb); //silence samples at the beginning | ffio_read_varlen(pb); //silence samples at the beginning | ||||
| @@ -245,7 +247,7 @@ static int mpc8_read_header(AVFormatContext *s) | |||||
| if (pb->seekable) { | if (pb->seekable) { | ||||
| int64_t pos = avio_tell(s->pb); | 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); | 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)){ | while(!url_feof(s->pb)){ | ||||
| pos = avio_tell(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); | mpc8_get_chunk_header(s->pb, &tag, &size); | ||||
| if (size < 0) | if (size < 0) | ||||
| return -1; | return -1; | ||||
| @@ -573,7 +573,7 @@ static int64_t mpegps_read_dts(AVFormatContext *s, int stream_index, | |||||
| AVInputFormat ff_mpegps_demuxer = { | AVInputFormat ff_mpegps_demuxer = { | ||||
| .name = "mpeg", | .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), | .priv_data_size = sizeof(MpegDemuxContext), | ||||
| .read_probe = mpegps_probe, | .read_probe = mpegps_probe, | ||||
| .read_header = mpegps_read_header, | .read_header = mpegps_read_header, | ||||
| @@ -1147,7 +1147,7 @@ static const AVClass flavor ## _class = {\ | |||||
| MPEGENC_CLASS(mpeg) | MPEGENC_CLASS(mpeg) | ||||
| AVOutputFormat ff_mpeg1system_muxer = { | AVOutputFormat ff_mpeg1system_muxer = { | ||||
| .name = "mpeg", | .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", | .mime_type = "video/mpeg", | ||||
| .extensions = "mpg,mpeg", | .extensions = "mpg,mpeg", | ||||
| .priv_data_size = sizeof(MpegMuxContext), | .priv_data_size = sizeof(MpegMuxContext), | ||||
| @@ -1163,7 +1163,7 @@ AVOutputFormat ff_mpeg1system_muxer = { | |||||
| MPEGENC_CLASS(vcd) | MPEGENC_CLASS(vcd) | ||||
| AVOutputFormat ff_mpeg1vcd_muxer = { | AVOutputFormat ff_mpeg1vcd_muxer = { | ||||
| .name = "vcd", | .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", | .mime_type = "video/mpeg", | ||||
| .priv_data_size = sizeof(MpegMuxContext), | .priv_data_size = sizeof(MpegMuxContext), | ||||
| .audio_codec = CODEC_ID_MP2, | .audio_codec = CODEC_ID_MP2, | ||||
| @@ -1196,7 +1196,7 @@ AVOutputFormat ff_mpeg2vob_muxer = { | |||||
| MPEGENC_CLASS(svcd) | MPEGENC_CLASS(svcd) | ||||
| AVOutputFormat ff_mpeg2svcd_muxer = { | AVOutputFormat ff_mpeg2svcd_muxer = { | ||||
| .name = "svcd", | .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", | .mime_type = "video/mpeg", | ||||
| .extensions = "vob", | .extensions = "vob", | ||||
| .priv_data_size = sizeof(MpegMuxContext), | .priv_data_size = sizeof(MpegMuxContext), | ||||
| @@ -2217,7 +2217,7 @@ void ff_mpegts_parse_close(MpegTSContext *ts) | |||||
| AVInputFormat ff_mpegts_demuxer = { | AVInputFormat ff_mpegts_demuxer = { | ||||
| .name = "mpegts", | .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), | .priv_data_size = sizeof(MpegTSContext), | ||||
| .read_probe = mpegts_probe, | .read_probe = mpegts_probe, | ||||
| .read_header = mpegts_read_header, | .read_header = mpegts_read_header, | ||||
| @@ -2229,7 +2229,7 @@ AVInputFormat ff_mpegts_demuxer = { | |||||
| AVInputFormat ff_mpegtsraw_demuxer = { | AVInputFormat ff_mpegtsraw_demuxer = { | ||||
| .name = "mpegtsraw", | .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), | .priv_data_size = sizeof(MpegTSContext), | ||||
| .read_header = mpegts_read_header, | .read_header = mpegts_read_header, | ||||
| .read_packet = mpegts_raw_read_packet, | .read_packet = mpegts_raw_read_packet, | ||||
| @@ -1225,7 +1225,7 @@ static int mpegts_write_end(AVFormatContext *s) | |||||
| AVOutputFormat ff_mpegts_muxer = { | AVOutputFormat ff_mpegts_muxer = { | ||||
| .name = "mpegts", | .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", | .mime_type = "video/x-mpegts", | ||||
| .extensions = "ts,m2t,m2ts,mts", | .extensions = "ts,m2t,m2ts,mts", | ||||
| .priv_data_size = sizeof(MpegTSWrite), | .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 = { | AVInputFormat ff_mxf_demuxer = { | ||||
| .name = "mxf", | .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), | .priv_data_size = sizeof(MXFContext), | ||||
| .read_probe = mxf_probe, | .read_probe = mxf_probe, | ||||
| .read_header = mxf_read_header, | .read_header = mxf_read_header, | ||||
| @@ -2158,7 +2158,7 @@ static int mxf_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int | |||||
| AVOutputFormat ff_mxf_muxer = { | AVOutputFormat ff_mxf_muxer = { | ||||
| .name = "mxf", | .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", | .mime_type = "application/mxf", | ||||
| .extensions = "mxf", | .extensions = "mxf", | ||||
| .priv_data_size = sizeof(MXFContext), | .priv_data_size = sizeof(MXFContext), | ||||
| @@ -2173,7 +2173,7 @@ AVOutputFormat ff_mxf_muxer = { | |||||
| AVOutputFormat ff_mxf_d10_muxer = { | AVOutputFormat ff_mxf_d10_muxer = { | ||||
| .name = "mxf_d10", | .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", | .mime_type = "application/mxf", | ||||
| .priv_data_size = sizeof(MXFContext), | .priv_data_size = sizeof(MXFContext), | ||||
| .audio_codec = CODEC_ID_PCM_S16LE, | .audio_codec = CODEC_ID_PCM_S16LE, | ||||
| @@ -60,7 +60,7 @@ AVOutputFormat ff_adx_muxer = { | |||||
| #if CONFIG_CAVSVIDEO_MUXER | #if CONFIG_CAVSVIDEO_MUXER | ||||
| AVOutputFormat ff_cavsvideo_muxer = { | AVOutputFormat ff_cavsvideo_muxer = { | ||||
| .name = "cavsvideo", | .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", | .extensions = "cavs", | ||||
| .audio_codec = CODEC_ID_NONE, | .audio_codec = CODEC_ID_NONE, | ||||
| .video_codec = CODEC_ID_CAVS, | .video_codec = CODEC_ID_CAVS, | ||||
| @@ -1114,7 +1114,8 @@ static int rtmp_parse_result(URLContext *s, RTMPContext *rt, RTMPPacket *pkt) | |||||
| break; | break; | ||||
| case RTMP_PT_VIDEO: | case RTMP_PT_VIDEO: | ||||
| case RTMP_PT_AUDIO: | 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; | break; | ||||
| default: | default: | ||||
| av_log(s, AV_LOG_VERBOSE, "Unknown packet type received 0x%02X\n", pkt->type); | 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 = { | AVOutputFormat ff_segment_muxer = { | ||||
| .name = "segment", | .name = "segment", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("segment muxer"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("segment"), | |||||
| .priv_data_size = sizeof(SegmentContext), | .priv_data_size = sizeof(SegmentContext), | ||||
| .flags = AVFMT_GLOBALHEADER | AVFMT_NOFILE, | .flags = AVFMT_GLOBALHEADER | AVFMT_NOFILE, | ||||
| .write_header = seg_write_header, | .write_header = seg_write_header, | ||||
| @@ -276,7 +276,7 @@ static av_cold int swf_read_close(AVFormatContext *avctx) | |||||
| AVInputFormat ff_swf_demuxer = { | AVInputFormat ff_swf_demuxer = { | ||||
| .name = "swf", | .name = "swf", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("Flash format"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash)"), | |||||
| .priv_data_size = sizeof(SWFContext), | .priv_data_size = sizeof(SWFContext), | ||||
| .read_probe = swf_probe, | .read_probe = swf_probe, | ||||
| .read_header = swf_read_header, | .read_header = swf_read_header, | ||||
| @@ -505,7 +505,7 @@ static int swf_write_trailer(AVFormatContext *s) | |||||
| #if CONFIG_SWF_MUXER | #if CONFIG_SWF_MUXER | ||||
| AVOutputFormat ff_swf_muxer = { | AVOutputFormat ff_swf_muxer = { | ||||
| .name = "swf", | .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", | .mime_type = "application/x-shockwave-flash", | ||||
| .extensions = "swf", | .extensions = "swf", | ||||
| .priv_data_size = sizeof(SWFContext), | .priv_data_size = sizeof(SWFContext), | ||||
| @@ -520,7 +520,7 @@ AVOutputFormat ff_swf_muxer = { | |||||
| #if CONFIG_AVM2_MUXER | #if CONFIG_AVM2_MUXER | ||||
| AVOutputFormat ff_avm2_muxer = { | AVOutputFormat ff_avm2_muxer = { | ||||
| .name = "avm2", | .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", | .mime_type = "application/x-shockwave-flash", | ||||
| .priv_data_size = sizeof(SWFContext), | .priv_data_size = sizeof(SWFContext), | ||||
| .audio_codec = CODEC_ID_MP3, | .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 = { | AVInputFormat ff_tta_demuxer = { | ||||
| .name = "tta", | .name = "tta", | ||||
| .long_name = NULL_IF_CONFIG_SMALL("True Audio"), | |||||
| .long_name = NULL_IF_CONFIG_SMALL("TTA (True Audio)"), | |||||
| .priv_data_size = sizeof(TTAContext), | .priv_data_size = sizeof(TTAContext), | ||||
| .read_probe = tta_probe, | .read_probe = tta_probe, | ||||
| .read_header = tta_read_header, | .read_header = tta_read_header, | ||||
| @@ -215,7 +215,7 @@ static const AVClass wav_muxer_class = { | |||||
| AVOutputFormat ff_wav_muxer = { | AVOutputFormat ff_wav_muxer = { | ||||
| .name = "wav", | .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", | .mime_type = "audio/x-wav", | ||||
| .extensions = "wav", | .extensions = "wav", | ||||
| .priv_data_size = sizeof(WAVContext), | .priv_data_size = sizeof(WAVContext), | ||||
| @@ -699,7 +699,7 @@ static const AVClass wav_demuxer_class = { | |||||
| }; | }; | ||||
| AVInputFormat ff_wav_demuxer = { | AVInputFormat ff_wav_demuxer = { | ||||
| .name = "wav", | .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), | .priv_data_size = sizeof(WAVContext), | ||||
| .read_probe = wav_probe, | .read_probe = wav_probe, | ||||
| .read_header = wav_read_header, | .read_header = wav_read_header, | ||||
| @@ -64,6 +64,8 @@ typedef struct { | |||||
| int block_parsed; | int block_parsed; | ||||
| uint8_t extra[WV_EXTRA_SIZE]; | uint8_t extra[WV_EXTRA_SIZE]; | ||||
| int64_t pos; | int64_t pos; | ||||
| int64_t apetag_start; | |||||
| } WVContext; | } WVContext; | ||||
| static int wv_probe(AVProbeData *p) | static int wv_probe(AVProbeData *p) | ||||
| @@ -88,6 +90,11 @@ static int wv_read_block_header(AVFormatContext *ctx, AVIOContext *pb, | |||||
| uint32_t chmask; | uint32_t chmask; | ||||
| wc->pos = avio_tell(pb); | 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) { | if (!append) { | ||||
| tag = avio_rl32(pb); | tag = avio_rl32(pb); | ||||
| if (tag != MKTAG('w', 'v', 'p', 'k')) | if (tag != MKTAG('w', 'v', 'p', 'k')) | ||||
| @@ -252,7 +259,7 @@ static int wv_read_header(AVFormatContext *s) | |||||
| if (s->pb->seekable) { | if (s->pb->seekable) { | ||||
| int64_t cur = avio_tell(s->pb); | 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)) | if (!av_dict_get(s->metadata, "", NULL, AV_DICT_IGNORE_SUFFIX)) | ||||
| ff_id3v1_read(s); | ff_id3v1_read(s); | ||||
| avio_seek(s->pb, cur, SEEK_SET); | avio_seek(s->pb, cur, SEEK_SET); | ||||