Commit 810fbd89 authored by Zhang Rui's avatar Zhang Rui Committed by Michael Niedermayer

fate/async: test error code from underlying protocol

Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent 7dc42c9e
......@@ -387,6 +387,9 @@ static const AVOption options[] = {
{NULL},
};
#undef D
#undef OFFSET
static const AVClass async_context_class = {
.class_name = "Async",
.item_name = av_default_item_name,
......@@ -413,6 +416,9 @@ typedef struct TestContext {
AVClass *class;
int64_t logical_pos;
int64_t logical_size;
/* options */
int opt_read_error;
} TestContext;
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 read_len = 0;
if (c->opt_read_error)
return c->opt_read_error;
if (c->logical_pos >= c->logical_size)
return AVERROR_EOF;
......@@ -471,9 +480,22 @@ static int64_t async_test_seek(URLContext *h, int64_t pos, int whence)
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 = {
.class_name = "Async-Test",
.item_name = av_default_item_name,
.option = async_test_options,
.version = LIBAVUTIL_VERSION_INT,
};
......@@ -496,10 +518,14 @@ int main(void)
int64_t pos;
int64_t read_len;
unsigned char buf[4096];
AVDictionary *opts = NULL;
ffurl_register_protocol(&ff_async_protocol);
ffurl_register_protocol(&ff_async_test_protocol);
/*
* test normal read
*/
ret = ffurl_open(&h, "async:async-test:", AVIO_FLAG_READ, NULL, NULL);
printf("open: %d\n", ret);
......@@ -534,6 +560,9 @@ int main(void)
}
printf("read: %"PRId64"\n", read_len);
/*
* test normal seek
*/
ret = ffurl_read(h, buf, 1);
printf("read: %d\n", ret);
......@@ -568,7 +597,19 @@ int main(void)
ret = ffurl_read(h, buf, 1);
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:
av_dict_free(&opts);
ffurl_close(h);
return 0;
}
......
......@@ -5,3 +5,5 @@ read: 0
seek: 1536
read: 512
read: 0
open: 0
read: -10000
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment