|
|
@@ -39,6 +39,7 @@ |
|
|
|
#include "libavutil/avstring.h" |
|
|
|
#include "libavutil/lfg.h" |
|
|
|
#include "libavutil/dict.h" |
|
|
|
#include "libavutil/intreadwrite.h" |
|
|
|
#include "libavutil/mathematics.h" |
|
|
|
#include "libavutil/random_seed.h" |
|
|
|
#include "libavutil/parseutils.h" |
|
|
@@ -323,6 +324,37 @@ static AVLFG random_state; |
|
|
|
|
|
|
|
static FILE *logfile = NULL; |
|
|
|
|
|
|
|
static int64_t ffm_read_write_index(int fd) |
|
|
|
{ |
|
|
|
uint8_t buf[8]; |
|
|
|
|
|
|
|
lseek(fd, 8, SEEK_SET); |
|
|
|
if (read(fd, buf, 8) != 8) |
|
|
|
return AVERROR(EIO); |
|
|
|
return AV_RB64(buf); |
|
|
|
} |
|
|
|
|
|
|
|
static int ffm_write_write_index(int fd, int64_t pos) |
|
|
|
{ |
|
|
|
uint8_t buf[8]; |
|
|
|
int i; |
|
|
|
|
|
|
|
for(i=0;i<8;i++) |
|
|
|
buf[i] = (pos >> (56 - i * 8)) & 0xff; |
|
|
|
lseek(fd, 8, SEEK_SET); |
|
|
|
if (write(fd, buf, 8) != 8) |
|
|
|
return AVERROR(EIO); |
|
|
|
return 8; |
|
|
|
} |
|
|
|
|
|
|
|
static void ffm_set_write_index(AVFormatContext *s, int64_t pos, |
|
|
|
int64_t file_size) |
|
|
|
{ |
|
|
|
FFMContext *ffm = s->priv_data; |
|
|
|
ffm->write_index = pos; |
|
|
|
ffm->file_size = file_size; |
|
|
|
} |
|
|
|
|
|
|
|
/* FIXME: make avserver work with IPv6 */ |
|
|
|
/* resolve host with also IP address parsing */ |
|
|
|
static int resolve_host(struct in_addr *sin_addr, const char *hostname) |
|
|
|