Newer
Older
while (*p != '\0' && *p != '=' && *p != '&') {
if ((q - tag) < sizeof(tag) - 1)
*q++ = *p;
p++;
}
*q = '\0';
q = arg;
if (*p == '=') {
p++;
while (*p != '&' && *p != '\0') {
Philip Gladstone
committed
if ((q - arg) < arg_size - 1) {
if (*p == '+')
*q++ = ' ';
else
*q++ = *p;
}
Michel Bardiaux
committed
int av_get_frame_filename(char *buf, int buf_size,
const char *path, int number)
Panagiotis Issaris
committed
char *q, buf1[20], c;
int nd, len, percentd_found;
q = buf;
p = path;
percentd_found = 0;
for(;;) {
c = *p++;
if (c == '\0')
break;
if (c == '%') {
Philip Gladstone
committed
do {
nd = 0;
while (isdigit(*p)) {
nd = nd * 10 + *p++ - '0';
}
c = *p++;
} while (isdigit(c));
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
switch(c) {
case '%':
goto addchar;
case 'd':
if (percentd_found)
goto fail;
percentd_found = 1;
snprintf(buf1, sizeof(buf1), "%0*d", nd, number);
len = strlen(buf1);
if ((q - buf + len) > buf_size - 1)
goto fail;
memcpy(q, buf1, len);
q += len;
break;
default:
goto fail;
}
} else {
addchar:
if ((q - buf) < buf_size - 1)
*q++ = c;
}
}
if (!percentd_found)
goto fail;
*q = '\0';
return 0;
fail:
*q = '\0';
return -1;
}
Panagiotis Issaris
committed
static void hex_dump_internal(void *avcl, FILE *f, int level, uint8_t *buf, int size)
Fabrice Bellard
committed
{
int len, i, j, c;
Panagiotis Issaris
committed
#define PRINT(...) do { if (!f) av_log(avcl, level, __VA_ARGS__); else fprintf(f, __VA_ARGS__); } while(0)
Fabrice Bellard
committed
for(i=0;i<size;i+=16) {
len = size - i;
if (len > 16)
len = 16;
Panagiotis Issaris
committed
PRINT("%08x ", i);
Fabrice Bellard
committed
for(j=0;j<16;j++) {
if (j < len)
Panagiotis Issaris
committed
PRINT(" %02x", buf[i+j]);
Fabrice Bellard
committed
else
Panagiotis Issaris
committed
PRINT(" ");
Fabrice Bellard
committed
}
Panagiotis Issaris
committed
PRINT(" ");
Fabrice Bellard
committed
for(j=0;j<len;j++) {
c = buf[i+j];
if (c < ' ' || c > '~')
c = '.';
Panagiotis Issaris
committed
PRINT("%c", c);
Fabrice Bellard
committed
}
Panagiotis Issaris
committed
PRINT("\n");
Fabrice Bellard
committed
}
Panagiotis Issaris
committed
#undef PRINT
}
void av_hex_dump(FILE *f, uint8_t *buf, int size)
{
hex_dump_internal(NULL, f, 0, buf, size);
}
void av_hex_dump_log(void *avcl, int level, uint8_t *buf, int size)
{
hex_dump_internal(avcl, NULL, level, buf, size);
Fabrice Bellard
committed
}
Panagiotis Issaris
committed
static void pkt_dump_internal(void *avcl, FILE *f, int level, AVPacket *pkt, int dump_payload)
Panagiotis Issaris
committed
#define PRINT(...) do { if (!f) av_log(avcl, level, __VA_ARGS__); else fprintf(f, __VA_ARGS__); } while(0)
PRINT("stream #%d:\n", pkt->stream_index);
PRINT(" keyframe=%d\n", ((pkt->flags & PKT_FLAG_KEY) != 0));
PRINT(" duration=%0.3f\n", (double)pkt->duration / AV_TIME_BASE);
/* DTS is _always_ valid after av_read_frame() */
Panagiotis Issaris
committed
PRINT(" dts=");
if (pkt->dts == AV_NOPTS_VALUE)
Panagiotis Issaris
committed
PRINT("N/A");
Panagiotis Issaris
committed
PRINT("%0.3f", (double)pkt->dts / AV_TIME_BASE);
/* PTS may not be known if B-frames are present. */
Panagiotis Issaris
committed
PRINT(" pts=");
if (pkt->pts == AV_NOPTS_VALUE)
Panagiotis Issaris
committed
PRINT("N/A");
Panagiotis Issaris
committed
PRINT("%0.3f", (double)pkt->pts / AV_TIME_BASE);
PRINT("\n");
PRINT(" size=%d\n", pkt->size);
#undef PRINT
if (dump_payload)
av_hex_dump(f, pkt->data, pkt->size);
}
Panagiotis Issaris
committed
void av_pkt_dump(FILE *f, AVPacket *pkt, int dump_payload)
{
pkt_dump_internal(NULL, f, 0, pkt, dump_payload);
}
void av_pkt_dump_log(void *avcl, int level, AVPacket *pkt, int dump_payload)
{
pkt_dump_internal(avcl, NULL, level, pkt, dump_payload);
}
Petr Doubek
committed
char *authorization, int authorization_size,
char *hostname, int hostname_size,
int *port_ptr,
char *path, int path_size,
const char *url)
{
Michael Niedermayer
committed
const char *p, *ls, *at, *col, *brk;
if (port_ptr) *port_ptr = -1;
if (proto_size > 0) proto[0] = 0;
if (authorization_size > 0) authorization[0] = 0;
if (hostname_size > 0) hostname[0] = 0;
if (path_size > 0) path[0] = 0;
/* parse protocol */
if ((p = strchr(url, ':'))) {
av_strlcpy(proto, url, FFMIN(proto_size, p + 1 - url));
p++; /* skip ':' */
if (*p == '/') p++;
if (*p == '/') p++;
/* no protocol means plain filename */
av_strlcpy(path, url, path_size);
return;
}
Petr Doubek
committed
/* separate path from hostname */
Michael Niedermayer
committed
ls = strchr(p, '/');
if(!ls)
ls = strchr(p, '?');
if(ls)
Michael Niedermayer
committed
else
ls = &p[strlen(p)]; // XXX
/* the rest is hostname, use that to parse auth/port */
if (ls != p) {
/* authorization (user[:pass]@hostname) */
if ((at = strchr(p, '@')) && at < ls) {
av_strlcpy(authorization, p,
FFMIN(authorization_size, at + 1 - p));
p = at + 1; /* skip '@' */
if (*p == '[' && (brk = strchr(p, ']')) && brk < ls) {
/* [host]:port */
av_strlcpy(hostname, p + 1,
FFMIN(hostname_size, brk - p));
if (brk[1] == ':' && port_ptr)
*port_ptr = atoi(brk + 2);
} else if ((col = strchr(p, ':')) && col < ls) {
av_strlcpy(hostname, p,
FFMIN(col + 1 - p, hostname_size));
if (port_ptr) *port_ptr = atoi(col + 1);
} else
av_strlcpy(hostname, p,
FFMIN(ls + 1 - p, hostname_size));
Ronald S. Bultje
committed
char *ff_data_to_hex(char *buff, const uint8_t *src, int s)
{
int i;
Ronald S. Bultje
committed
static const char hex_table[16] = { '0', '1', '2', '3',
'4', '5', '6', '7',
'8', '9', 'A', 'B',
'C', 'D', 'E', 'F' };
Ronald S. Bultje
committed
for(i = 0; i < s; i++) {
Ronald S. Bultje
committed
buff[i * 2] = hex_table[src[i] >> 4];
buff[i * 2 + 1] = hex_table[src[i] & 0xF];
Ronald S. Bultje
committed
}
return buff;
}
void av_set_pts_info(AVStream *s, int pts_wrap_bits,
unsigned int gcd= av_gcd(pts_num, pts_den);
s->time_base.num = pts_num/gcd;
s->time_base.den = pts_den/gcd;
if(gcd>1)
av_log(NULL, AV_LOG_DEBUG, "st:%d removing common factor %d from timebase\n", s->index, gcd);