mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-27 13:10:37 +00:00
tcp select() check and enables pressing 'q' when reading/(writing) from
tcp/http in ffmpeg.c patch by (Leon van Stuivenberg <l dot vanstuivenberg at chello dot nl>) Originally committed as revision 2891 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
35fe5cc53f
commit
b51469a0c5
12
ffmpeg.c
12
ffmpeg.c
@ -193,6 +193,7 @@ static int using_stdin = 0;
|
||||
static int using_vhook = 0;
|
||||
static int verbose = 1;
|
||||
static int thread_count= 1;
|
||||
static int q_pressed = 0;
|
||||
|
||||
#define DEFAULT_PASS_LOGFILENAME "ffmpeg2pass"
|
||||
|
||||
@ -322,6 +323,11 @@ static int read_key(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int decode_interrupt_cb(void)
|
||||
{
|
||||
return q_pressed || (q_pressed = read_key() == 'q');
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static volatile int received_sigterm = 0;
|
||||
@ -1411,8 +1417,10 @@ static int av_encode(AVFormatContext **output_files,
|
||||
}
|
||||
|
||||
#ifndef CONFIG_WIN32
|
||||
if ( !using_stdin )
|
||||
if ( !using_stdin ) {
|
||||
fprintf(stderr, "Press [q] to stop encoding\n");
|
||||
url_set_interrupt_cb(decode_interrupt_cb);
|
||||
}
|
||||
#endif
|
||||
term_init();
|
||||
|
||||
@ -1427,6 +1435,8 @@ static int av_encode(AVFormatContext **output_files,
|
||||
redo:
|
||||
/* if 'q' pressed, exits */
|
||||
if (!using_stdin) {
|
||||
if (q_pressed)
|
||||
break;
|
||||
/* read_key() returns 0 on EOF */
|
||||
key = read_key();
|
||||
if (key == 'q')
|
||||
|
@ -141,7 +141,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
|
||||
static int tcp_read(URLContext *h, uint8_t *buf, int size)
|
||||
{
|
||||
TCPContext *s = h->priv_data;
|
||||
int len, fd_max;
|
||||
int len, fd_max, ret;
|
||||
fd_set rfds;
|
||||
struct timeval tv;
|
||||
|
||||
@ -153,28 +153,31 @@ static int tcp_read(URLContext *h, uint8_t *buf, int size)
|
||||
FD_SET(s->fd, &rfds);
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 100 * 1000;
|
||||
select(fd_max + 1, &rfds, NULL, NULL, &tv);
|
||||
ret = select(fd_max + 1, &rfds, NULL, NULL, &tv);
|
||||
if (ret > 0 && FD_ISSET(s->fd, &rfds)) {
|
||||
#ifdef __BEOS__
|
||||
len = recv(s->fd, buf, size, 0);
|
||||
len = recv(s->fd, buf, size, 0);
|
||||
#else
|
||||
len = read(s->fd, buf, size);
|
||||
len = read(s->fd, buf, size);
|
||||
#endif
|
||||
if (len < 0) {
|
||||
if (errno != EINTR && errno != EAGAIN)
|
||||
if (len < 0) {
|
||||
if (errno != EINTR && errno != EAGAIN)
|
||||
#ifdef __BEOS__
|
||||
return errno;
|
||||
return errno;
|
||||
#else
|
||||
return -errno;
|
||||
return -errno;
|
||||
#endif
|
||||
} else break;
|
||||
} else return len;
|
||||
} else if (ret < 0) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
static int tcp_write(URLContext *h, uint8_t *buf, int size)
|
||||
{
|
||||
TCPContext *s = h->priv_data;
|
||||
int ret, size1, fd_max;
|
||||
int ret, size1, fd_max, len;
|
||||
fd_set wfds;
|
||||
struct timeval tv;
|
||||
|
||||
@ -187,24 +190,28 @@ static int tcp_write(URLContext *h, uint8_t *buf, int size)
|
||||
FD_SET(s->fd, &wfds);
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 100 * 1000;
|
||||
select(fd_max + 1, NULL, &wfds, NULL, &tv);
|
||||
ret = select(fd_max + 1, NULL, &wfds, NULL, &tv);
|
||||
if (ret > 0 && FD_ISSET(s->fd, &wfds)) {
|
||||
#ifdef __BEOS__
|
||||
ret = send(s->fd, buf, size, 0);
|
||||
len = send(s->fd, buf, size, 0);
|
||||
#else
|
||||
ret = write(s->fd, buf, size);
|
||||
len = write(s->fd, buf, size);
|
||||
#endif
|
||||
if (ret < 0) {
|
||||
if (errno != EINTR && errno != EAGAIN) {
|
||||
if (len < 0) {
|
||||
if (errno != EINTR && errno != EAGAIN) {
|
||||
#ifdef __BEOS__
|
||||
return errno;
|
||||
return errno;
|
||||
#else
|
||||
return -errno;
|
||||
return -errno;
|
||||
#endif
|
||||
}
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
size -= len;
|
||||
buf += len;
|
||||
} else if (ret < 0) {
|
||||
return -1;
|
||||
}
|
||||
size -= ret;
|
||||
buf += ret;
|
||||
}
|
||||
return size1 - size;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user