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:
commit
64b25938e9
11
cmdutils.c
11
cmdutils.c
@ -1135,8 +1135,8 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
|
|||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
AVDictionary *filter_codec_opts(AVDictionary *opts, AVCodec *codec,
|
AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id,
|
||||||
AVFormatContext *s, AVStream *st)
|
AVFormatContext *s, AVStream *st, AVCodec *codec)
|
||||||
{
|
{
|
||||||
AVDictionary *ret = NULL;
|
AVDictionary *ret = NULL;
|
||||||
AVDictionaryEntry *t = NULL;
|
AVDictionaryEntry *t = NULL;
|
||||||
@ -1145,6 +1145,9 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, AVCodec *codec,
|
|||||||
char prefix = 0;
|
char prefix = 0;
|
||||||
const AVClass *cc = avcodec_get_class();
|
const AVClass *cc = avcodec_get_class();
|
||||||
|
|
||||||
|
if (!codec)
|
||||||
|
codec = s->oformat ? avcodec_find_encoder(codec_id)
|
||||||
|
: avcodec_find_decoder(codec_id);
|
||||||
if (!codec)
|
if (!codec)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -1205,8 +1208,8 @@ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
for (i = 0; i < s->nb_streams; i++)
|
for (i = 0; i < s->nb_streams; i++)
|
||||||
opts[i] = filter_codec_opts(codec_opts, avcodec_find_decoder(s->streams[i]->codec->codec_id),
|
opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codec->codec_id,
|
||||||
s, s->streams[i]);
|
s, s->streams[i], NULL);
|
||||||
return opts;
|
return opts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,10 +232,12 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec);
|
|||||||
*
|
*
|
||||||
* @param s Corresponding format context.
|
* @param s Corresponding format context.
|
||||||
* @param st A stream from s for which the options should be filtered.
|
* @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
|
* @return a pointer to the created dictionary
|
||||||
*/
|
*/
|
||||||
AVDictionary *filter_codec_opts(AVDictionary *opts, AVCodec *codec,
|
AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id,
|
||||||
AVFormatContext *s, AVStream *st);
|
AVFormatContext *s, AVStream *st, AVCodec *codec);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup AVCodecContext options for avformat_find_stream_info().
|
* 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_group_source_req
|
||||||
struct_ip_mreq_source
|
struct_ip_mreq_source
|
||||||
struct_ipv6_mreq
|
struct_ipv6_mreq
|
||||||
|
struct_pollfd
|
||||||
struct_rusage_ru_maxrss
|
struct_rusage_ru_maxrss
|
||||||
struct_sockaddr_in6
|
struct_sockaddr_in6
|
||||||
struct_sockaddr_sa_len
|
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 ip_mreq_source" -D_BSD_SOURCE
|
||||||
check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
|
check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
|
||||||
check_type netinet/in.h "struct sockaddr_in6"
|
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_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
|
||||||
check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
|
check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
|
||||||
check_header netinet/sctp.h
|
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 group_source_req"
|
||||||
check_type ws2tcpip.h "struct ip_mreq_source"
|
check_type ws2tcpip.h "struct ip_mreq_source"
|
||||||
check_type ws2tcpip.h "struct ipv6_mreq"
|
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_in6"
|
||||||
check_type ws2tcpip.h "struct sockaddr_storage"
|
check_type ws2tcpip.h "struct sockaddr_storage"
|
||||||
check_struct winsock2.h "struct sockaddr" sa_len
|
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->file_index = nb_input_files;
|
||||||
ist->discard = 1;
|
ist->discard = 1;
|
||||||
st->discard = AVDISCARD_ALL;
|
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;
|
ist->ts_scale = 1.0;
|
||||||
MATCH_PER_STREAM_OPT(ts_scale, dbl, ist->ts_scale, ic, st);
|
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;
|
st->codec->codec_type = type;
|
||||||
choose_encoder(o, oc, ost);
|
choose_encoder(o, oc, ost);
|
||||||
if (ost->enc) {
|
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);
|
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;
|
avctx = ic->streams[stream_index]->codec;
|
||||||
|
|
||||||
codec = avcodec_find_decoder(avctx->codec_id);
|
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){
|
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;
|
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;
|
RCCMPEntry *mb_cmp;
|
||||||
RCEntry (*mb_rc)[8160];
|
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;
|
} DNXHDEncContext;
|
||||||
|
|
||||||
void ff_dnxhd_init_mmx(DNXHDEncContext *ctx);
|
void ff_dnxhd_init_mmx(DNXHDEncContext *ctx);
|
||||||
|
@ -1128,7 +1128,7 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
c->pix_norm1 = pix_norm1_mmx;
|
c->pix_norm1 = pix_norm1_mmx;
|
||||||
c->sse[0] = (HAVE_YASM && mm_flags & AV_CPU_FLAG_SSE2) ? ff_sse16_sse2 : sse16_mmx;
|
c->sse[0] = sse16_mmx;
|
||||||
c->sse[1] = sse8_mmx;
|
c->sse[1] = sse8_mmx;
|
||||||
c->vsad[4]= vsad_intra16_mmx;
|
c->vsad[4]= vsad_intra16_mmx;
|
||||||
|
|
||||||
@ -1165,9 +1165,12 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
|
|||||||
if (bit_depth <= 8)
|
if (bit_depth <= 8)
|
||||||
c->get_pixels = get_pixels_sse2;
|
c->get_pixels = get_pixels_sse2;
|
||||||
c->sum_abs_dctelem= sum_abs_dctelem_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[0]= ff_hadamard8_diff16_sse2;
|
||||||
c->hadamard8_diff[1]= ff_hadamard8_diff_sse2;
|
c->hadamard8_diff[1]= ff_hadamard8_diff_sse2;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,6 +115,84 @@ FLOAT_TO_INT16 sse, 0
|
|||||||
FLOAT_TO_INT16 3dnow, 0
|
FLOAT_TO_INT16 3dnow, 0
|
||||||
%undef cvtps2pi
|
%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);
|
; void ff_float_to_int16_interleave2(int16_t *dst, const float **src, long len);
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "libavutil/cpu.h"
|
#include "libavutil/cpu.h"
|
||||||
#include "libavutil/x86_cpu.h"
|
#include "libavutil/x86_cpu.h"
|
||||||
#include "libavcodec/fmtconvert.h"
|
#include "libavcodec/fmtconvert.h"
|
||||||
|
#include "libavcodec/dsputil.h"
|
||||||
|
|
||||||
#if HAVE_YASM
|
#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_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_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_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_sse (int16_t *dst, const float **src, long len);
|
||||||
void ff_float_to_int16_interleave2_sse2 (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) \
|
#define FLOAT_TO_INT16_INTERLEAVE(cpu) \
|
||||||
/* gcc pessimizes register allocation if this is in the same function as float_to_int16_interleave_sse2*/\
|
/* 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){\
|
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 c;\
|
||||||
int i,j,c;\
|
|
||||||
for(c=0; c<channels; c++){\
|
for(c=0; c<channels; c++){\
|
||||||
ff_float_to_int16_##cpu(tmp, src[c], len);\
|
ff_float_to_int16_step_##cpu(dst+c, src[c], len, channels);\
|
||||||
for(i=0, j=c; i<len; i++, j+=channels)\
|
|
||||||
dst[j] = tmp[i];\
|
|
||||||
}\
|
}\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
|
@ -809,7 +809,7 @@ void ff_vc1dsp_init_mmx(VC1DSPContext *dsp)
|
|||||||
#if HAVE_YASM
|
#if HAVE_YASM
|
||||||
if (mm_flags & AV_CPU_FLAG_MMX) {
|
if (mm_flags & AV_CPU_FLAG_MMX) {
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
if (mm_flags & AV_CPU_FLAG_MMX2) {
|
if (mm_flags & AV_CPU_FLAG_MMX2) {
|
||||||
ASSIGN_LF(mmx2);
|
ASSIGN_LF(mmx2);
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,9 @@ section .text
|
|||||||
pand m2, m6
|
pand m2, m6
|
||||||
pand m3, m2 ; d final
|
pand m3, m2 ; d final
|
||||||
|
|
||||||
PSIGNW m3, m7
|
psraw m7, 15
|
||||||
|
pxor m3, m7
|
||||||
|
psubw m3, m7
|
||||||
psubw m0, m3
|
psubw m0, m3
|
||||||
paddw m1, m3
|
paddw m1, m3
|
||||||
packuswb m0, m0
|
packuswb m0, m0
|
||||||
@ -284,7 +286,6 @@ cglobal vc1_h_loop_filter8_sse2, 3,6,8
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
%define PABSW PABSW_SSSE3
|
%define PABSW PABSW_SSSE3
|
||||||
%define PSIGNW PSIGNW_SSSE3
|
|
||||||
|
|
||||||
INIT_MMX
|
INIT_MMX
|
||||||
; void ff_vc1_v_loop_filter4_ssse3(uint8_t *src, int stride, int pq)
|
; void ff_vc1_v_loop_filter4_ssse3(uint8_t *src, int stride, int pq)
|
||||||
|
@ -28,10 +28,12 @@
|
|||||||
#include "os_support.h"
|
#include "os_support.h"
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(__MINGW32CE__)
|
#if defined(_WIN32) && !defined(__MINGW32CE__)
|
||||||
|
#undef open
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <io.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <share.h>
|
#include <share.h>
|
||||||
|
|
||||||
#undef open
|
|
||||||
int ff_win32_open(const char *filename_utf8, int oflag, int pmode)
|
int ff_win32_open(const char *filename_utf8, int oflag, int pmode)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
@ -265,7 +267,7 @@ int ff_socket_nonblock(int socket, int enable)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if !HAVE_POLL_H
|
#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 read_set;
|
||||||
fd_set write_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(&write_set);
|
||||||
FD_ZERO(&exception_set);
|
FD_ZERO(&exception_set);
|
||||||
|
|
||||||
n = -1;
|
n = 0;
|
||||||
for(i = 0; i < numfds; i++) {
|
for(i = 0; i < numfds; i++) {
|
||||||
if (fds[i].fd < 0)
|
if (fds[i].fd < 0)
|
||||||
continue;
|
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 & POLLOUT) FD_SET(fds[i].fd, &write_set);
|
||||||
if (fds[i].events & POLLERR) FD_SET(fds[i].fd, &exception_set);
|
if (fds[i].events & POLLERR) FD_SET(fds[i].fd, &exception_set);
|
||||||
|
|
||||||
if (fds[i].fd > n)
|
if (fds[i].fd >= n)
|
||||||
n = fds[i].fd;
|
n = fds[i].fd + 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (n == -1)
|
if (n == 0)
|
||||||
/* Hey!? Nothing to poll, in fact!!! */
|
/* Hey!? Nothing to poll, in fact!!! */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (timeout < 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 {
|
else {
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
|
||||||
tv.tv_sec = timeout / 1000;
|
tv.tv_sec = timeout / 1000;
|
||||||
tv.tv_usec = 1000 * (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)
|
if (rc < 0)
|
||||||
|
@ -29,6 +29,8 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#if defined(__MINGW32__) && !defined(__MINGW32CE__)
|
#if defined(__MINGW32__) && !defined(__MINGW32CE__)
|
||||||
# include <fcntl.h>
|
# include <fcntl.h>
|
||||||
# ifdef lseek
|
# ifdef lseek
|
||||||
@ -58,6 +60,13 @@ static inline int is_dos_path(const char *path)
|
|||||||
#define SHUT_RD SD_RECEIVE
|
#define SHUT_RD SD_RECEIVE
|
||||||
#define SHUT_WR SD_SEND
|
#define SHUT_WR SD_SEND
|
||||||
#define SHUT_RDWR SD_BOTH
|
#define SHUT_RDWR SD_BOTH
|
||||||
|
|
||||||
|
#ifndef S_IRUSR
|
||||||
|
#define S_IRUSR S_IREAD
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWUSR
|
||||||
|
#define S_IWUSR S_IWRITE
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(__MINGW32CE__)
|
#if defined(_WIN32) && !defined(__MINGW32CE__)
|
||||||
@ -78,6 +87,10 @@ typedef int socklen_t;
|
|||||||
#if !HAVE_POLL_H
|
#if !HAVE_POLL_H
|
||||||
typedef unsigned long nfds_t;
|
typedef unsigned long nfds_t;
|
||||||
|
|
||||||
|
#if HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
#if !HAVE_STRUCT_POLLFD
|
||||||
struct pollfd {
|
struct pollfd {
|
||||||
int fd;
|
int fd;
|
||||||
short events; /* events to look for */
|
short events; /* events to look for */
|
||||||
@ -97,9 +110,11 @@ struct pollfd {
|
|||||||
#define POLLERR 0x0004 /* errors pending */
|
#define POLLERR 0x0004 /* errors pending */
|
||||||
#define POLLHUP 0x0080 /* disconnected */
|
#define POLLHUP 0x0080 /* disconnected */
|
||||||
#define POLLNVAL 0x1000 /* invalid file descriptor */
|
#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 /* HAVE_POLL_H */
|
||||||
#endif /* CONFIG_NETWORK */
|
#endif /* CONFIG_NETWORK */
|
||||||
|
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
#ifndef av_always_inline
|
#ifndef av_always_inline
|
||||||
#if AV_GCC_VERSION_AT_LEAST(3,1)
|
#if AV_GCC_VERSION_AT_LEAST(3,1)
|
||||||
# define av_always_inline __attribute__((always_inline)) inline
|
# define av_always_inline __attribute__((always_inline)) inline
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# define av_always_inline __forceinline
|
||||||
#else
|
#else
|
||||||
# define av_always_inline inline
|
# define av_always_inline inline
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user