Browse Source

fate/async: test error code from underlying protocol

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
tags/n3.0
Zhang Rui Michael Niedermayer 10 years ago
parent
commit
810fbd8933
2 changed files with 43 additions and 0 deletions
  1. +41
    -0
      libavformat/async.c
  2. +2
    -0
      tests/ref/fate/async

+ 41
- 0
libavformat/async.c View File

@@ -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;
}


+ 2
- 0
tests/ref/fate/async View File

@@ -5,3 +5,5 @@ read: 0
seek: 1536
read: 512
read: 0
open: 0
read: -10000

Loading…
Cancel
Save