fate/async: test error code from underlying protocol
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:

committed by
Michael Niedermayer

parent
7dc42c9e65
commit
810fbd8933
@@ -387,6 +387,9 @@ static const AVOption options[] = {
|
|||||||
{NULL},
|
{NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#undef D
|
||||||
|
#undef OFFSET
|
||||||
|
|
||||||
static const AVClass async_context_class = {
|
static const AVClass async_context_class = {
|
||||||
.class_name = "Async",
|
.class_name = "Async",
|
||||||
.item_name = av_default_item_name,
|
.item_name = av_default_item_name,
|
||||||
@@ -413,6 +416,9 @@ typedef struct TestContext {
|
|||||||
AVClass *class;
|
AVClass *class;
|
||||||
int64_t logical_pos;
|
int64_t logical_pos;
|
||||||
int64_t logical_size;
|
int64_t logical_size;
|
||||||
|
|
||||||
|
/* options */
|
||||||
|
int opt_read_error;
|
||||||
} TestContext;
|
} TestContext;
|
||||||
|
|
||||||
static int async_test_open(URLContext *h, const char *arg, int flags, AVDictionary **options)
|
static int async_test_open(URLContext *h, const char *arg, int flags, AVDictionary **options)
|
||||||
@@ -434,6 +440,9 @@ static int async_test_read(URLContext *h, unsigned char *buf, int size)
|
|||||||
int i;
|
int i;
|
||||||
int read_len = 0;
|
int read_len = 0;
|
||||||
|
|
||||||
|
if (c->opt_read_error)
|
||||||
|
return c->opt_read_error;
|
||||||
|
|
||||||
if (c->logical_pos >= c->logical_size)
|
if (c->logical_pos >= c->logical_size)
|
||||||
return AVERROR_EOF;
|
return AVERROR_EOF;
|
||||||
|
|
||||||
@@ -471,9 +480,22 @@ static int64_t async_test_seek(URLContext *h, int64_t pos, int whence)
|
|||||||
return new_logical_pos;
|
return new_logical_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define OFFSET(x) offsetof(TestContext, x)
|
||||||
|
#define D AV_OPT_FLAG_DECODING_PARAM
|
||||||
|
|
||||||
|
static const AVOption async_test_options[] = {
|
||||||
|
{ "async-test-read-error", "cause read fail",
|
||||||
|
OFFSET(opt_read_error), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, .flags = D },
|
||||||
|
{NULL},
|
||||||
|
};
|
||||||
|
|
||||||
|
#undef D
|
||||||
|
#undef OFFSET
|
||||||
|
|
||||||
static const AVClass async_test_context_class = {
|
static const AVClass async_test_context_class = {
|
||||||
.class_name = "Async-Test",
|
.class_name = "Async-Test",
|
||||||
.item_name = av_default_item_name,
|
.item_name = av_default_item_name,
|
||||||
|
.option = async_test_options,
|
||||||
.version = LIBAVUTIL_VERSION_INT,
|
.version = LIBAVUTIL_VERSION_INT,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -496,10 +518,14 @@ int main(void)
|
|||||||
int64_t pos;
|
int64_t pos;
|
||||||
int64_t read_len;
|
int64_t read_len;
|
||||||
unsigned char buf[4096];
|
unsigned char buf[4096];
|
||||||
|
AVDictionary *opts = NULL;
|
||||||
|
|
||||||
ffurl_register_protocol(&ff_async_protocol);
|
ffurl_register_protocol(&ff_async_protocol);
|
||||||
ffurl_register_protocol(&ff_async_test_protocol);
|
ffurl_register_protocol(&ff_async_test_protocol);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* test normal read
|
||||||
|
*/
|
||||||
ret = ffurl_open(&h, "async:async-test:", AVIO_FLAG_READ, NULL, NULL);
|
ret = ffurl_open(&h, "async:async-test:", AVIO_FLAG_READ, NULL, NULL);
|
||||||
printf("open: %d\n", ret);
|
printf("open: %d\n", ret);
|
||||||
|
|
||||||
@@ -534,6 +560,9 @@ int main(void)
|
|||||||
}
|
}
|
||||||
printf("read: %"PRId64"\n", read_len);
|
printf("read: %"PRId64"\n", read_len);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* test normal seek
|
||||||
|
*/
|
||||||
ret = ffurl_read(h, buf, 1);
|
ret = ffurl_read(h, buf, 1);
|
||||||
printf("read: %d\n", ret);
|
printf("read: %d\n", ret);
|
||||||
|
|
||||||
@@ -568,7 +597,19 @@ int main(void)
|
|||||||
ret = ffurl_read(h, buf, 1);
|
ret = ffurl_read(h, buf, 1);
|
||||||
printf("read: %d\n", ret);
|
printf("read: %d\n", ret);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* test read error
|
||||||
|
*/
|
||||||
|
ffurl_close(h);
|
||||||
|
av_dict_set_int(&opts, "async-test-read-error", -10000, 0);
|
||||||
|
ret = ffurl_open(&h, "async:async-test:", AVIO_FLAG_READ, NULL, &opts);
|
||||||
|
printf("open: %d\n", ret);
|
||||||
|
|
||||||
|
ret = ffurl_read(h, buf, 1);
|
||||||
|
printf("read: %d\n", ret);
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
av_dict_free(&opts);
|
||||||
ffurl_close(h);
|
ffurl_close(h);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -5,3 +5,5 @@ read: 0
|
|||||||
seek: 1536
|
seek: 1536
|
||||||
read: 512
|
read: 512
|
||||||
read: 0
|
read: 0
|
||||||
|
open: 0
|
||||||
|
read: -10000
|
||||||
|
Reference in New Issue
Block a user