30 #define CONTROL_BUFFER_SIZE 1024 31 #define DIR_BUFFER_SIZE 4096 76 #define OFFSET(x) offsetof(FTPContext, x) 77 #define D AV_OPT_FLAG_DECODING_PARAM 78 #define E AV_OPT_FLAG_ENCODING_PARAM 80 {
"timeout",
"set timeout of socket I/O operations",
OFFSET(rw_timeout),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX,
D|
E },
81 {
"ftp-write-seekable",
"control seekability of connection during encoding",
OFFSET(write_seekable),
AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1,
E },
82 {
"ftp-anonymous-password",
"password for anonymous login. E-mail address should be used.",
OFFSET(anonymous_password),
AV_OPT_TYPE_STRING, { 0 }, 0, 0,
D|
E },
83 {
"ftp-user",
"user for FTP login. Overridden by whatever is in the URL.",
OFFSET(option_user),
AV_OPT_TYPE_STRING, { 0 }, 0, 0,
D|
E },
84 {
"ftp-password",
"password for FTP login. Overridden by whatever is in the URL.",
OFFSET(option_password),
AV_OPT_TYPE_STRING, { 0 }, 0, 0,
D|
E },
126 if (q > line && q[-1] ==
'\r')
131 if ((q - line) < line_size - 1)
144 int err,
i, dash = 0,
result = 0, code_found = 0, linesize;
146 AVBPrint line_buffer;
151 while (!code_found || dash) {
160 linesize = strlen(buf);
163 for (i = 0; i < 3; ++
i) {
164 if (buf[i] <
'0' || buf[i] >
'9') {
178 for (i = 0; response_codes[
i]; ++
i) {
179 if (err == response_codes[i]) {
190 if (!dash && buf[3] ==
'-')
192 else if (err == dash && buf[3] ==
' ')
204 const int response_codes[],
char **response)
222 if (response_codes) {
223 return ftp_status(s, response, response_codes);
245 static const int user_codes[] = {331, 230, 0};
246 static const int pass_codes[] = {230, 0};
267 static const char d =
'|';
268 static const char *
command =
"EPSV\r\n";
269 static const int epsv_codes[] = {229, 0};
274 for (i = 0; res[
i]; ++
i) {
277 }
else if (res[i] ==
')') {
286 if (strlen(start) < 5)
288 if (start[0] != d || start[1] != d || start[2] != d || end[-1] != d)
309 static const char *
command =
"PASV\r\n";
310 static const int pasv_codes[] = {227, 0};
315 for (i = 0; res[
i]; ++
i) {
318 }
else if (res[i] ==
')') {
335 if (!start)
goto fail;
338 if (!start)
goto fail;
355 static const char *
command =
"PWD\r\n";
356 static const int pwd_codes[] = {257, 0};
361 for (i = 0; res[
i]; ++
i) {
393 static const int size_codes[] = {213, 0};
395 snprintf(command,
sizeof(command),
"SIZE %s\r\n", s->
path);
396 if (
ftp_send_command(s, command, size_codes, &res) == 213 && res && strlen(res) > 4) {
411 static const int retr_codes[] = {150, 125, 0};
414 snprintf(command,
sizeof(command),
"RETR %s\r\n", s->
path);
416 if (resp_code != 125 && resp_code != 150)
427 static const int stor_codes[] = {150, 125, 0};
430 snprintf(command,
sizeof(command),
"STOR %s\r\n", s->
path);
432 if (resp_code != 125 && resp_code != 150)
442 static const char *
command =
"TYPE I\r\n";
443 static const int type_codes[] = {200, 0};
454 static const int rest_codes[] = {350, 0};
456 snprintf(command,
sizeof(command),
"REST %"PRId64
"\r\n", pos);
465 static const int cwd_codes[] = {250, 550, 0};
468 snprintf(command,
sizeof(command),
"CWD %s\r\n", s->
path);
476 static const char *
command =
"MLSD\r\n";
477 static const int mlsd_codes[] = {150, 500, 0};
487 static const char *
command =
"NLST\r\n";
488 static const int nlst_codes[] = {226, 425, 426, 451, 450, 550, 0};
517 static const char *feat_command =
"FEAT\r\n";
518 static const char *enable_utf8_command =
"OPTS UTF8 ON\r\n";
519 static const int feat_codes[] = {211, 0};
520 static const int opts_codes[] = {200, 202, 451, 0};
529 if (ret == 200 || ret == 202)
542 static const int connect_codes[] = {220, 0};
566 av_log(h,
AV_LOG_WARNING,
"Pure-FTPd server is used as an output protocol. It is known issue this implementation may produce incorrect content and it cannot be fixed at this moment.");
621 static const char *
command =
"ABOR\r\n";
623 static const int abor_codes[] = {225, 226, 0};
660 const char *tok_user =
NULL, *tok_pass =
NULL;
672 credentials,
sizeof(credentials),
673 hostname,
sizeof(hostname),
678 tok_user =
av_strtok(credentials,
":", &end);
682 tok_user =
"anonymous";
721 ff_dlog(h,
"ftp protocol open\n");
747 int64_t new_pos, fake_pos;
749 ff_dlog(h,
"ftp protocol seek %"PRId64
" %d\n", pos, whence);
789 int read, err, retry_done = 0;
791 ff_dlog(h,
"ftp protocol read %d bytes\n", size);
821 if (read <= 0 && s->position < s->filesize && !h->
is_streamed) {
827 if ((err =
ftp_seek(h, pos, SEEK_SET)) < 0) {
849 ff_dlog(h,
"ftp protocol write %d bytes\n", size);
876 ff_dlog(h,
"ftp protocol close\n");
892 ff_dlog(h,
"ftp protocol get_file_handle\n");
904 ff_dlog(h,
"ftp protocol shutdown\n");
942 memset(&tv, 0,
sizeof(
struct tm));
944 return INT64_C(1000000) *
av_timegm(&tv);
957 while(fact =
av_strtok(mlsd,
";", &mlsd)) {
958 if (fact[0] ==
' ') {
981 next->
size = strtoll(value,
NULL, 10);
1007 char *
start, *found;
1013 while (!(found = strstr(start,
"\n"))) {
1034 if (found > start && found[-1] ==
'\r')
1040 (*next)->utf8 = s->
utf8;
1064 static const int del_codes[] = {250, 421, 450, 500, 501, 502, 530, 550, 0};
1065 static const int rmd_codes[] = {250, 421, 500, 501, 502, 530, 550, 0};
1071 snprintf(command,
sizeof(command),
"DELE %s\r\n", s->
path);
1077 snprintf(command,
sizeof(command),
"RMD %s\r\n", s->
path);
1092 static const int rnfr_codes[] = {350, 421, 450, 500, 501, 502, 503, 530, 0};
1093 static const int rnto_codes[] = {250, 421, 500, 501, 502, 503, 530, 532, 553, 0};
1099 snprintf(command,
sizeof(command),
"RNFR %s\r\n", s->
path);
1108 snprintf(command,
sizeof(command),
"RNTO %s\r\n", path);
1129 .priv_data_class = &ftp_context_class,
1136 .default_whitelist =
"tcp",
time_t av_timegm(struct tm *tm)
Convert the decomposed UTC time in tm to a time_t value.
const URLProtocol ff_ftp_protocol
void av_url_split(char *proto, int proto_size, char *authorization, int authorization_size, char *hostname, int hostname_size, int *port_ptr, char *path, int path_size, const char *url)
Split a URL string into components.
void av_bprintf(AVBPrint *buf, const char *fmt,...)
int ffurl_open_whitelist(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options, const char *whitelist, const char *blacklist, URLContext *parent)
Create an URLContext for accessing to the resource indicated by url, and open it. ...
#define URL_PROTOCOL_FLAG_NETWORK
static int ftp_get_line(FTPContext *s, char *line, int line_size)
char * password
Server user's password.
int64_t filemode
Unix file mode, -1 if unknown.
#define AV_LOG_WARNING
Something somehow does not look correct.
static int ftp_list(FTPContext *s)
static int ftp_move(URLContext *h_src, URLContext *h_dst)
#define LIBAVUTIL_VERSION_INT
static int ftp_file_size(FTPContext *s)
int ffurl_write(URLContext *h, const unsigned char *buf, int size)
Write size bytes from buf to the resource accessed by h.
char * av_stristr(const char *s1, const char *s2)
Locate the first case-independent occurrence in the string haystack of the string needle...
int is_streamed
true if streamed (no seek possible), default = false
AVIOInterruptCB interrupt_callback
Describes single entry of the directory.
#define AVIO_FLAG_READ
read-only
const char * av_default_item_name(void *ptr)
Return the context name.
static int ftp_connect(URLContext *h, const char *url)
#define AVIO_FLAG_WRITE
write-only
static int ftp_open(URLContext *h, const char *url, int flags)
uint8_t * control_buf_end
const char * option_password
Password to be used if none given in the URL.
static int ftp_status(FTPContext *s, char **line, const int response_codes[])
int write_seekable
Control seekability, 0 = disable, 1 = enable.
static int ftp_retrieve(FTPContext *s)
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
int ffurl_shutdown(URLContext *h, int flags)
Signal the URLContext that we are done reading or writing the stream.
int64_t modification_timestamp
Time of last modification in microseconds since unix epoch, -1 if unknown.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
URLContext * conn_control
Control connection.
static int ftp_read_dir(URLContext *h, AVIODirEntry **next)
static int ftp_connect_data_connection(URLContext *h)
static int ftp_set_dir(FTPContext *s)
static int ftp_shutdown(URLContext *h, int flags)
static av_cold int end(AVCodecContext *avctx)
GLsizei GLboolean const GLfloat * value
int64_t filesize
Size of file on server, -1 on error.
char * av_small_strptime(const char *p, const char *fmt, struct tm *dt)
Simplified version of strptime.
static int ftp_delete(URLContext *h)
static int ftp_connect_control_connection(URLContext *h)
#define AVERROR_EOF
End of file.
uint8_t control_buffer[CONTROL_BUFFER_SIZE]
Control connection buffer.
static int ftp_current_dir(FTPContext *s)
uint8_t * control_buf_ptr
static int ftp_passive_mode(FTPContext *s)
int server_data_port
Data connection port opened by server, -1 on error.
FTPListingMethod listing_method
Called listing method.
static void * av_x_if_null(const void *p, const void *x)
Return x default pointer in case p is NULL.
#define i(width, name, range_min, range_max)
static int ftp_getc(FTPContext *s)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const char * anonymous_password
Password to be used for anonymous user.
const char * protocol_whitelist
static int ftp_abort(URLContext *h)
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
const char * option_user
User to be used if none given in the URL.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
static int ftp_send_command(FTPContext *s, const char *command, const int response_codes[], char **response)
static void ftp_close_both_connections(FTPContext *s)
static int ftp_passive_mode_epsv(FTPContext *s)
void avio_free_directory_entry(AVIODirEntry **entry)
Free entry allocated by avio_read_dir().
int rw_timeout
Network timeout.
common internal API header
static int ftp_parse_entry_nlst(char *line, AVIODirEntry *next)
static int ftp_read(URLContext *h, unsigned char *buf, int size)
static int ftp_close(URLContext *h)
URLContext * conn_data
Data connection, NULL when not connected.
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
static int ftp_auth(FTPContext *s)
int64_t position
Current position, calculated.
static int ftp_restart(FTPContext *s, int64_t pos)
char * features
List of server's features represented as raw response.
static int ftp_has_feature(FTPContext *s, const char *feature_name)
char * path
Path to resource on server.
int ffurl_get_file_handle(URLContext *h)
Return the file descriptor associated with this URL.
int64_t size
File size in bytes, -1 if unknown.
int ffurl_closep(URLContext **hh)
Close the resource accessed by the URLContext h, and free the memory used by it.
int ff_url_join(char *str, int size, const char *proto, const char *authorization, const char *hostname, int port, const char *fmt,...)
static int64_t ftp_seek(URLContext *h, int64_t pos, int whence)
#define AV_LOG_INFO
Standard information.
#define AV_BPRINT_SIZE_AUTOMATIC
char * av_strdup(const char *s)
Duplicate a string.
const char * protocol_blacklist
static int ftp_close_dir(URLContext *h)
int type
Type of the entry.
static int ftp_get_file_handle(URLContext *h)
static int command(AVFilterContext *ctx, const char *cmd, const char *arg, char *res, int res_len, int flags)
static const AVOption options[]
#define AVIO_FLAG_READ_WRITE
read-write pseudo flag
FTPState state
State of data connection.
Describe the class of an AVClass context structure.
int64_t group_id
Group ID of owner, -1 if unknown.
static void ftp_close_data_connection(FTPContext *s)
static int ftp_features(FTPContext *s)
static int ftp_parse_entry_mlsd(char *mlsd, AVIODirEntry *next)
#define CONTROL_BUFFER_SIZE
uint8_t pi<< 24) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_U8,(uint64_t)((*(const uint8_t *) pi-0x80U))<< 56) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16,(*(const int16_t *) pi >>8)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S16,(uint64_t)(*(const int16_t *) pi)<< 48) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16,*(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16,*(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32,(*(const int32_t *) pi >>24)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S32,(uint64_t)(*(const int32_t *) pi)<< 32) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32,*(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32,*(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S64,(*(const int64_t *) pi >>56)+0x80) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S64,*(const int64_t *) pi *(1.0f/(UINT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S64,*(const int64_t *) pi *(1.0/(UINT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_FLT, llrintf(*(const float *) pi *(UINT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_DBL, llrint(*(const double *) pi *(UINT64_C(1)<< 63)))#define FMT_PAIR_FUNC(out, in) static conv_func_type *const fmt_pair_to_conv_functions[AV_SAMPLE_FMT_NB *AV_SAMPLE_FMT_NB]={FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S64),};static void cpy1(uint8_t **dst, const uint8_t **src, int len){memcpy(*dst,*src, len);}static void cpy2(uint8_t **dst, const uint8_t **src, int len){memcpy(*dst,*src, 2 *len);}static void cpy4(uint8_t **dst, const uint8_t **src, int len){memcpy(*dst,*src, 4 *len);}static void cpy8(uint8_t **dst, const uint8_t **src, int len){memcpy(*dst,*src, 8 *len);}AudioConvert *swri_audio_convert_alloc(enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, const int *ch_map, int flags){AudioConvert *ctx;conv_func_type *f=fmt_pair_to_conv_functions[av_get_packed_sample_fmt(out_fmt)+AV_SAMPLE_FMT_NB *av_get_packed_sample_fmt(in_fmt)];if(!f) return NULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx) return NULL;if(channels==1){in_fmt=av_get_planar_sample_fmt(in_fmt);out_fmt=av_get_planar_sample_fmt(out_fmt);}ctx->channels=channels;ctx->conv_f=f;ctx->ch_map=ch_map;if(in_fmt==AV_SAMPLE_FMT_U8||in_fmt==AV_SAMPLE_FMT_U8P) memset(ctx->silence, 0x80, sizeof(ctx->silence));if(out_fmt==in_fmt &&!ch_map){switch(av_get_bytes_per_sample(in_fmt)){case 1:ctx->simd_f=cpy1;break;case 2:ctx->simd_f=cpy2;break;case 4:ctx->simd_f=cpy4;break;case 8:ctx->simd_f=cpy8;break;}}if(HAVE_X86ASM &&1) swri_audio_convert_init_x86(ctx, out_fmt, in_fmt, channels);if(ARCH_ARM) swri_audio_convert_init_arm(ctx, out_fmt, in_fmt, channels);if(ARCH_AARCH64) swri_audio_convert_init_aarch64(ctx, out_fmt, in_fmt, channels);return ctx;}void swri_audio_convert_free(AudioConvert **ctx){av_freep(ctx);}int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len){int ch;int off=0;const int os=(out->planar?1:out->ch_count)*out->bps;unsigned misaligned=0;av_assert0(ctx->channels==out->ch_count);if(ctx->in_simd_align_mask){int planes=in->planar?in->ch_count:1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) in->ch[ch];misaligned|=m &ctx->in_simd_align_mask;}if(ctx->out_simd_align_mask){int planes=out->planar?out->ch_count:1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) out->ch[ch];misaligned|=m &ctx->out_simd_align_mask;}if(ctx->simd_f &&!ctx->ch_map &&!misaligned){off=len &~15;av_assert1(off >=0);av_assert1(off<=len);av_assert2(ctx->channels==SWR_CH_MAX||!in->ch[ctx->channels]);if(off >0){if(out->planar==in->planar){int planes=out->planar?out->ch_count:1;for(ch=0;ch< planes;ch++){ctx->simd_f(out-> ch ch
#define flags(name, subs,...)
char * av_strtok(char *s, const char *delim, char **saveptr)
Split the string into several tokens which can be accessed by successive calls to av_strtok()...
static int ftp_write(URLContext *h, const unsigned char *buf, int size)
char * av_append_path_component(const char *path, const char *component)
Append path component to the existing path.
The official guide to swscale for confused that consecutive non overlapping rectangles of slice_bottom special converter These generally are unscaled converters of common like for each output line the vertical scaler pulls lines from a ring buffer When the ring buffer does not contain the wanted line
int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags)
Convenience wrapper for av_dict_set that converts the value to a string and stores it...
AVIODirEntry * ff_alloc_dir_entry(void)
Allocate directory entry with default values.
char * filename
specified URL
#define AVSEEK_SIZE
ORing this as the "whence" parameter to a seek function causes it to return the filesize without seek...
char * hostname
Server address.
static int ftp_store(FTPContext *s)
static int ftp_type(FTPContext *s)
static int ftp_open_dir(URLContext *h)
int server_control_port
Control connection port, default is 21.
int64_t user_id
User ID of owner, -1 if unknown.
static int ftp_list_mlsd(FTPContext *s)
and forward the result(frame or status change) to the corresponding input.If nothing is possible
static const AVClass ftp_context_class
unbuffered private I/O API
static int64_t ftp_parse_date(const char *date)
static int ftp_parse_entry(URLContext *h, char *line, AVIODirEntry *next)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
int ffurl_read(URLContext *h, unsigned char *buf, int size)
Read up to size bytes from the resource accessed by h, and store the read bytes in buf...
static av_cold void cleanup(FlashSV2Context *s)
static int ftp_list_nlst(FTPContext *s)