You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	Merge remote-tracking branch 'qatar/master'
* qatar/master: dsputilenc_mmx: split assignment of ff_sse16_sse2 to SSE2 section. dnxhdenc: add space between function argument type and comment. x86: fmtconvert: add special asm for float_to_int16_interleave_misc_* attributes: Add a definition of av_always_inline for MSVC cmdutils: Pass the actual chosen encoder to filter_codec_opts os_support: Add fallback definitions for stat flags os_support: Rename the poll fallback function to ff_poll network: Check for struct pollfd os_support: Don't compare a negative number against socket descriptors os_support: Include all the necessary headers for the win32 open function x86: vc1: fix and enable optimised loop filter Conflicts: cmdutils.c cmdutils.h ffmpeg.c ffplay.c libavformat/os_support.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							
								
								
									
										11
									
								
								cmdutils.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								cmdutils.c
									
									
									
									
									
								
							| @@ -1135,8 +1135,8 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec) | ||||
|     return AVERROR(EINVAL); | ||||
| } | ||||
|  | ||||
| AVDictionary *filter_codec_opts(AVDictionary *opts, AVCodec *codec, | ||||
|                                 AVFormatContext *s, AVStream *st) | ||||
| AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, | ||||
|                                 AVFormatContext *s, AVStream *st, AVCodec *codec) | ||||
| { | ||||
|     AVDictionary    *ret = NULL; | ||||
|     AVDictionaryEntry *t = NULL; | ||||
| @@ -1145,6 +1145,9 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, AVCodec *codec, | ||||
|     char          prefix = 0; | ||||
|     const AVClass    *cc = avcodec_get_class(); | ||||
|  | ||||
|     if (!codec) | ||||
|         codec            = s->oformat ? avcodec_find_encoder(codec_id) | ||||
|                                       : avcodec_find_decoder(codec_id); | ||||
|     if (!codec) | ||||
|         return NULL; | ||||
|  | ||||
| @@ -1205,8 +1208,8 @@ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s, | ||||
|         return NULL; | ||||
|     } | ||||
|     for (i = 0; i < s->nb_streams; i++) | ||||
|         opts[i] = filter_codec_opts(codec_opts, avcodec_find_decoder(s->streams[i]->codec->codec_id), | ||||
|                                     s, s->streams[i]); | ||||
|         opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codec->codec_id, | ||||
|                                     s, s->streams[i], NULL); | ||||
|     return opts; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -232,10 +232,12 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec); | ||||
|  * | ||||
|  * @param s Corresponding format context. | ||||
|  * @param st A stream from s for which the options should be filtered. | ||||
|  * @param codec The particular codec for which the options should be filtered. | ||||
|  *              If null, the default one is looked up according to the codec id. | ||||
|  * @return a pointer to the created dictionary | ||||
|  */ | ||||
| AVDictionary *filter_codec_opts(AVDictionary *opts, AVCodec *codec, | ||||
|                                 AVFormatContext *s, AVStream *st); | ||||
| AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, | ||||
|                                 AVFormatContext *s, AVStream *st, AVCodec *codec); | ||||
|  | ||||
| /** | ||||
|  * Setup AVCodecContext options for avformat_find_stream_info(). | ||||
|   | ||||
							
								
								
									
										3
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -1265,6 +1265,7 @@ HAVE_LIST=" | ||||
|     struct_group_source_req | ||||
|     struct_ip_mreq_source | ||||
|     struct_ipv6_mreq | ||||
|     struct_pollfd | ||||
|     struct_rusage_ru_maxrss | ||||
|     struct_sockaddr_in6 | ||||
|     struct_sockaddr_sa_len | ||||
| @@ -3125,6 +3126,7 @@ if enabled network; then | ||||
|     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE | ||||
|     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE | ||||
|     check_type netinet/in.h "struct sockaddr_in6" | ||||
|     check_type poll.h "struct pollfd" | ||||
|     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage" | ||||
|     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len | ||||
|     check_header netinet/sctp.h | ||||
| @@ -3141,6 +3143,7 @@ if enabled network; then | ||||
|         check_type ws2tcpip.h "struct group_source_req" | ||||
|         check_type ws2tcpip.h "struct ip_mreq_source" | ||||
|         check_type ws2tcpip.h "struct ipv6_mreq" | ||||
|         check_type winsock2.h "struct pollfd" | ||||
|         check_type ws2tcpip.h "struct sockaddr_in6" | ||||
|         check_type ws2tcpip.h "struct sockaddr_storage" | ||||
|         check_struct winsock2.h "struct sockaddr" sa_len | ||||
|   | ||||
							
								
								
									
										4
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								ffmpeg.c
									
									
									
									
									
								
							| @@ -4149,7 +4149,7 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic) | ||||
|         ist->file_index = nb_input_files; | ||||
|         ist->discard = 1; | ||||
|         st->discard  = AVDISCARD_ALL; | ||||
|         ist->opts = filter_codec_opts(codec_opts, choose_decoder(o, ic, st), ic, st); | ||||
|         ist->opts = filter_codec_opts(codec_opts, ist->st->codec->codec_id, ic, st, choose_decoder(o, ic, st)); | ||||
|  | ||||
|         ist->ts_scale = 1.0; | ||||
|         MATCH_PER_STREAM_OPT(ts_scale, dbl, ist->ts_scale, ic, st); | ||||
| @@ -4505,7 +4505,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e | ||||
|     st->codec->codec_type = type; | ||||
|     choose_encoder(o, oc, ost); | ||||
|     if (ost->enc) { | ||||
|         ost->opts  = filter_codec_opts(codec_opts, ost->enc, oc, st); | ||||
|         ost->opts  = filter_codec_opts(codec_opts, ost->enc->id, oc, st, ost->enc); | ||||
|     } | ||||
|  | ||||
|     avcodec_get_context_defaults3(st->codec, ost->enc); | ||||
|   | ||||
							
								
								
									
										2
									
								
								ffplay.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								ffplay.c
									
									
									
									
									
								
							| @@ -2161,7 +2161,7 @@ static int stream_component_open(VideoState *is, int stream_index) | ||||
|     avctx = ic->streams[stream_index]->codec; | ||||
|  | ||||
|     codec = avcodec_find_decoder(avctx->codec_id); | ||||
|     opts = filter_codec_opts(codec_opts, codec, ic, ic->streams[stream_index]); | ||||
|     opts = filter_codec_opts(codec_opts, avctx->codec_id, ic, ic->streams[stream_index], codec); | ||||
|  | ||||
|     switch(avctx->codec_type){ | ||||
|         case AVMEDIA_TYPE_AUDIO   : is->last_audio_stream    = stream_index; if(audio_codec_name   ) codec= avcodec_find_decoder_by_name(   audio_codec_name); break; | ||||
|   | ||||
| @@ -90,7 +90,7 @@ typedef struct DNXHDEncContext { | ||||
|     RCCMPEntry *mb_cmp; | ||||
|     RCEntry   (*mb_rc)[8160]; | ||||
|  | ||||
|     void (*get_pixels_8x4_sym)(DCTELEM */*align 16*/, const uint8_t *, int); | ||||
|     void (*get_pixels_8x4_sym)(DCTELEM * /*align 16*/, const uint8_t *, int); | ||||
| } DNXHDEncContext; | ||||
|  | ||||
| void ff_dnxhd_init_mmx(DNXHDEncContext *ctx); | ||||
|   | ||||
| @@ -1128,8 +1128,8 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx) | ||||
| #endif | ||||
|  | ||||
|         c->pix_norm1 = pix_norm1_mmx; | ||||
|         c->sse[0] = (HAVE_YASM && mm_flags & AV_CPU_FLAG_SSE2) ? ff_sse16_sse2 : sse16_mmx; | ||||
|           c->sse[1] = sse8_mmx; | ||||
|         c->sse[0] = sse16_mmx; | ||||
|         c->sse[1] = sse8_mmx; | ||||
|         c->vsad[4]= vsad_intra16_mmx; | ||||
|  | ||||
|         c->nsse[0] = nsse16_mmx; | ||||
| @@ -1165,9 +1165,12 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx) | ||||
|             if (bit_depth <= 8) | ||||
|                 c->get_pixels = get_pixels_sse2; | ||||
|             c->sum_abs_dctelem= sum_abs_dctelem_sse2; | ||||
| #if HAVE_YASM && HAVE_ALIGNED_STACK | ||||
| #if HAVE_YASM | ||||
|             c->sse[0] = ff_sse16_sse2; | ||||
| #if HAVE_ALIGNED_STACK | ||||
|             c->hadamard8_diff[0]= ff_hadamard8_diff16_sse2; | ||||
|             c->hadamard8_diff[1]= ff_hadamard8_diff_sse2; | ||||
| #endif | ||||
| #endif | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -115,6 +115,84 @@ FLOAT_TO_INT16 sse, 0 | ||||
| FLOAT_TO_INT16 3dnow, 0 | ||||
| %undef cvtps2pi | ||||
|  | ||||
| ;------------------------------------------------------------------------------ | ||||
| ; void ff_float_to_int16_step(int16_t *dst, const float *src, long len, long step); | ||||
| ;------------------------------------------------------------------------------ | ||||
| %macro FLOAT_TO_INT16_STEP 2 | ||||
| cglobal float_to_int16_step_%1, 4,7,%2, dst, src, len, step, step3, v1, v2 | ||||
|     add       lenq, lenq | ||||
|     lea       srcq, [srcq+2*lenq] | ||||
|     lea     step3q, [stepq*3] | ||||
|     neg       lenq | ||||
| .loop: | ||||
| %ifidn %1, sse2 | ||||
|     cvtps2dq    m0, [srcq+2*lenq   ] | ||||
|     cvtps2dq    m1, [srcq+2*lenq+16] | ||||
|     packssdw    m0, m1 | ||||
|     movd       v1d, m0 | ||||
|     psrldq      m0, 4 | ||||
|     movd       v2d, m0 | ||||
|     psrldq      m0, 4 | ||||
|     mov     [dstq], v1w | ||||
|     mov  [dstq+stepq*4], v2w | ||||
|     shr        v1d, 16 | ||||
|     shr        v2d, 16 | ||||
|     mov  [dstq+stepq*2], v1w | ||||
|     mov  [dstq+step3q*2], v2w | ||||
|     lea       dstq, [dstq+stepq*8] | ||||
|     movd       v1d, m0 | ||||
|     psrldq      m0, 4 | ||||
|     movd       v2d, m0 | ||||
|     mov     [dstq], v1w | ||||
|     mov  [dstq+stepq*4], v2w | ||||
|     shr        v1d, 16 | ||||
|     shr        v2d, 16 | ||||
|     mov  [dstq+stepq*2], v1w | ||||
|     mov  [dstq+step3q*2], v2w | ||||
|     lea       dstq, [dstq+stepq*8] | ||||
| %else | ||||
|     cvtps2pi    m0, [srcq+2*lenq   ] | ||||
|     cvtps2pi    m1, [srcq+2*lenq+ 8] | ||||
|     cvtps2pi    m2, [srcq+2*lenq+16] | ||||
|     cvtps2pi    m3, [srcq+2*lenq+24] | ||||
|     packssdw    m0, m1 | ||||
|     packssdw    m2, m3 | ||||
|     movd       v1d, m0 | ||||
|     psrlq       m0, 32 | ||||
|     movd       v2d, m0 | ||||
|     mov     [dstq], v1w | ||||
|     mov  [dstq+stepq*4], v2w | ||||
|     shr        v1d, 16 | ||||
|     shr        v2d, 16 | ||||
|     mov  [dstq+stepq*2], v1w | ||||
|     mov  [dstq+step3q*2], v2w | ||||
|     lea       dstq, [dstq+stepq*8] | ||||
|     movd       v1d, m2 | ||||
|     psrlq       m2, 32 | ||||
|     movd       v2d, m2 | ||||
|     mov     [dstq], v1w | ||||
|     mov  [dstq+stepq*4], v2w | ||||
|     shr        v1d, 16 | ||||
|     shr        v2d, 16 | ||||
|     mov  [dstq+stepq*2], v1w | ||||
|     mov  [dstq+step3q*2], v2w | ||||
|     lea       dstq, [dstq+stepq*8] | ||||
| %endif | ||||
|     add       lenq, 16 | ||||
|     js .loop | ||||
| %ifnidn %1, sse2 | ||||
|     emms | ||||
| %endif | ||||
|     REP_RET | ||||
| %endmacro | ||||
|  | ||||
| INIT_XMM | ||||
| FLOAT_TO_INT16_STEP sse2, 2 | ||||
| INIT_MMX | ||||
| FLOAT_TO_INT16_STEP sse, 0 | ||||
| %define cvtps2pi pf2id | ||||
| FLOAT_TO_INT16_STEP 3dnow, 0 | ||||
| %undef cvtps2pi | ||||
|  | ||||
| ;------------------------------------------------------------------------------- | ||||
| ; void ff_float_to_int16_interleave2(int16_t *dst, const float **src, long len); | ||||
|   | ||||
| @@ -25,6 +25,7 @@ | ||||
| #include "libavutil/cpu.h" | ||||
| #include "libavutil/x86_cpu.h" | ||||
| #include "libavcodec/fmtconvert.h" | ||||
| #include "libavcodec/dsputil.h" | ||||
|  | ||||
| #if HAVE_YASM | ||||
|  | ||||
| @@ -35,6 +36,10 @@ void ff_float_to_int16_3dnow(int16_t *dst, const float *src, long len); | ||||
| void ff_float_to_int16_sse  (int16_t *dst, const float *src, long len); | ||||
| void ff_float_to_int16_sse2 (int16_t *dst, const float *src, long len); | ||||
|  | ||||
| void ff_float_to_int16_step_3dnow(int16_t *dst, const float *src, long len, long step); | ||||
| void ff_float_to_int16_step_sse  (int16_t *dst, const float *src, long len, long step); | ||||
| void ff_float_to_int16_step_sse2 (int16_t *dst, const float *src, long len, long step); | ||||
|  | ||||
| void ff_float_to_int16_interleave2_3dnow(int16_t *dst, const float **src, long len); | ||||
| void ff_float_to_int16_interleave2_sse  (int16_t *dst, const float **src, long len); | ||||
| void ff_float_to_int16_interleave2_sse2 (int16_t *dst, const float **src, long len); | ||||
| @@ -48,12 +53,9 @@ void ff_float_to_int16_interleave6_3dn2(int16_t *dst, const float **src, int len | ||||
| #define FLOAT_TO_INT16_INTERLEAVE(cpu) \ | ||||
| /* gcc pessimizes register allocation if this is in the same function as float_to_int16_interleave_sse2*/\ | ||||
| static av_noinline void float_to_int16_interleave_misc_##cpu(int16_t *dst, const float **src, long len, int channels){\ | ||||
|     DECLARE_ALIGNED(16, int16_t, tmp)[len];\ | ||||
|     int i,j,c;\ | ||||
|     int c;\ | ||||
|     for(c=0; c<channels; c++){\ | ||||
|         ff_float_to_int16_##cpu(tmp, src[c], len);\ | ||||
|         for(i=0, j=c; i<len; i++, j+=channels)\ | ||||
|             dst[j] = tmp[i];\ | ||||
|         ff_float_to_int16_step_##cpu(dst+c, src[c], len, channels);\ | ||||
|     }\ | ||||
| }\ | ||||
| \ | ||||
|   | ||||
| @@ -809,7 +809,7 @@ void ff_vc1dsp_init_mmx(VC1DSPContext *dsp) | ||||
| #if HAVE_YASM | ||||
|     if (mm_flags & AV_CPU_FLAG_MMX) { | ||||
|     } | ||||
|     return; | ||||
|  | ||||
|     if (mm_flags & AV_CPU_FLAG_MMX2) { | ||||
|         ASSIGN_LF(mmx2); | ||||
|     } | ||||
|   | ||||
| @@ -119,7 +119,9 @@ section .text | ||||
|     pand    m2, m6 | ||||
|     pand    m3, m2  ; d final | ||||
|  | ||||
|     PSIGNW  m3, m7 | ||||
|     psraw   m7, 15 | ||||
|     pxor    m3, m7 | ||||
|     psubw   m3, m7 | ||||
|     psubw   m0, m3 | ||||
|     paddw   m1, m3 | ||||
|     packuswb m0, m0 | ||||
| @@ -284,7 +286,6 @@ cglobal vc1_h_loop_filter8_sse2, 3,6,8 | ||||
|     RET | ||||
|  | ||||
| %define PABSW PABSW_SSSE3 | ||||
| %define PSIGNW PSIGNW_SSSE3 | ||||
|  | ||||
| INIT_MMX | ||||
| ; void ff_vc1_v_loop_filter4_ssse3(uint8_t *src, int stride, int pq) | ||||
|   | ||||
| @@ -28,10 +28,12 @@ | ||||
| #include "os_support.h" | ||||
|  | ||||
| #if defined(_WIN32) && !defined(__MINGW32CE__) | ||||
| #undef open | ||||
| #include <fcntl.h> | ||||
| #include <io.h> | ||||
| #include <windows.h> | ||||
| #include <share.h> | ||||
|  | ||||
| #undef open | ||||
| int ff_win32_open(const char *filename_utf8, int oflag, int pmode) | ||||
| { | ||||
|     int fd; | ||||
| @@ -265,7 +267,7 @@ int ff_socket_nonblock(int socket, int enable) | ||||
| } | ||||
|  | ||||
| #if !HAVE_POLL_H | ||||
| int poll(struct pollfd *fds, nfds_t numfds, int timeout) | ||||
| int ff_poll(struct pollfd *fds, nfds_t numfds, int timeout) | ||||
| { | ||||
|     fd_set read_set; | ||||
|     fd_set write_set; | ||||
| @@ -285,7 +287,7 @@ int poll(struct pollfd *fds, nfds_t numfds, int timeout) | ||||
|     FD_ZERO(&write_set); | ||||
|     FD_ZERO(&exception_set); | ||||
|  | ||||
|     n = -1; | ||||
|     n = 0; | ||||
|     for(i = 0; i < numfds; i++) { | ||||
|         if (fds[i].fd < 0) | ||||
|             continue; | ||||
| @@ -300,22 +302,22 @@ int poll(struct pollfd *fds, nfds_t numfds, int timeout) | ||||
|         if (fds[i].events & POLLOUT) FD_SET(fds[i].fd, &write_set); | ||||
|         if (fds[i].events & POLLERR) FD_SET(fds[i].fd, &exception_set); | ||||
|  | ||||
|         if (fds[i].fd > n) | ||||
|             n = fds[i].fd; | ||||
|         if (fds[i].fd >= n) | ||||
|             n = fds[i].fd + 1; | ||||
|     }; | ||||
|  | ||||
|     if (n == -1) | ||||
|     if (n == 0) | ||||
|         /* Hey!? Nothing to poll, in fact!!! */ | ||||
|         return 0; | ||||
|  | ||||
|     if (timeout < 0) | ||||
|         rc = select(n+1, &read_set, &write_set, &exception_set, NULL); | ||||
|         rc = select(n, &read_set, &write_set, &exception_set, NULL); | ||||
|     else { | ||||
|         struct timeval    tv; | ||||
|  | ||||
|         tv.tv_sec = timeout / 1000; | ||||
|         tv.tv_usec = 1000 * (timeout % 1000); | ||||
|         rc = select(n+1, &read_set, &write_set, &exception_set, &tv); | ||||
|         rc = select(n, &read_set, &write_set, &exception_set, &tv); | ||||
|     }; | ||||
|  | ||||
|     if (rc < 0) | ||||
|   | ||||
| @@ -29,6 +29,8 @@ | ||||
|  | ||||
| #include "config.h" | ||||
|  | ||||
| #include <sys/stat.h> | ||||
|  | ||||
| #if defined(__MINGW32__) && !defined(__MINGW32CE__) | ||||
| #  include <fcntl.h> | ||||
| #  ifdef lseek | ||||
| @@ -58,6 +60,13 @@ static inline int is_dos_path(const char *path) | ||||
| #define SHUT_RD SD_RECEIVE | ||||
| #define SHUT_WR SD_SEND | ||||
| #define SHUT_RDWR SD_BOTH | ||||
|  | ||||
| #ifndef S_IRUSR | ||||
| #define S_IRUSR S_IREAD | ||||
| #endif | ||||
| #ifndef S_IWUSR | ||||
| #define S_IWUSR S_IWRITE | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #if defined(_WIN32) && !defined(__MINGW32CE__) | ||||
| @@ -78,6 +87,10 @@ typedef int socklen_t; | ||||
| #if !HAVE_POLL_H | ||||
| typedef unsigned long nfds_t; | ||||
|  | ||||
| #if HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #endif | ||||
| #if !HAVE_STRUCT_POLLFD | ||||
| struct pollfd { | ||||
|     int fd; | ||||
|     short events;  /* events to look for */ | ||||
| @@ -97,9 +110,11 @@ struct pollfd { | ||||
| #define POLLERR    0x0004  /* errors pending */ | ||||
| #define POLLHUP    0x0080  /* disconnected */ | ||||
| #define POLLNVAL   0x1000  /* invalid file descriptor */ | ||||
| #endif | ||||
|  | ||||
|  | ||||
| int poll(struct pollfd *fds, nfds_t numfds, int timeout); | ||||
| int ff_poll(struct pollfd *fds, nfds_t numfds, int timeout); | ||||
| #define poll ff_poll | ||||
| #endif /* HAVE_POLL_H */ | ||||
| #endif /* CONFIG_NETWORK */ | ||||
|  | ||||
|   | ||||
| @@ -35,6 +35,8 @@ | ||||
| #ifndef av_always_inline | ||||
| #if AV_GCC_VERSION_AT_LEAST(3,1) | ||||
| #    define av_always_inline __attribute__((always_inline)) inline | ||||
| #elif defined(_MSC_VER) | ||||
| #    define av_always_inline __forceinline | ||||
| #else | ||||
| #    define av_always_inline inline | ||||
| #endif | ||||
|   | ||||
		Reference in New Issue
	
	Block a user