# HG changeset patch # User diego # Date 1332606535 0 # Node ID bbbe7b6abc62a3a9632ba70633e67dcfbcdde708 # Parent 795e0f6a85e16c312deef9ce7fc8b445898eaf2d stream_ffmpeg: convert to avio API, fix build against shared libavformat patch by Alexis Ballier, alexis.ballier gmail com diff -r 795e0f6a85e1 -r bbbe7b6abc62 stream/stream_ffmpeg.c --- a/stream/stream_ffmpeg.c Thu Mar 22 21:04:32 2012 +0000 +++ b/stream/stream_ffmpeg.c Sat Mar 24 16:28:55 2012 +0000 @@ -26,33 +26,22 @@ #include "m_struct.h" #include "av_helpers.h" -#ifndef URL_RDONLY -#include "libavformat/url.h" -#define url_read_complete ffurl_read_complete -#define url_write ffurl_write -#define url_seek ffurl_seek -#define url_filesize ffurl_size -#define url_close ffurl_close -#define url_open(c, n, f) ffurl_open(c, n, f, NULL, NULL) -#endif - static int fill_buffer(stream_t *s, char *buffer, int max_len) { - int r = url_read_complete(s->priv, buffer, max_len); + int r = avio_read(s->priv, buffer, max_len); return (r <= 0) ? -1 : r; } static int write_buffer(stream_t *s, char *buffer, int len) { - /* url_write retries internally on short writes and EAGAIN */ - int r = url_write(s->priv, buffer, len); - return (r <= 0) ? -1 : r; + avio_write(s->priv, buffer, len); + return len; } static int seek(stream_t *s, off_t newpos) { s->pos = newpos; - if (url_seek(s->priv, s->pos, SEEK_SET) < 0) { + if (avio_seek(s->priv, s->pos, SEEK_SET) < 0) { s->eof = 1; return 0; } @@ -61,12 +50,12 @@ static int control(stream_t *s, int cmd, void *arg) { - URLContext *ctx = s->priv; + AVIOContext *ctx = s->priv; int64_t size, ts; double pts; switch(cmd) { case STREAM_CTRL_GET_SIZE: - size = url_filesize(s->priv); + size = avio_size(s->priv); if(size >= 0) { *(off_t *)arg = size; return 1; @@ -75,13 +64,9 @@ case STREAM_CTRL_SEEK_TO_TIME: pts = *(double *)arg; ts = pts * AV_TIME_BASE; -#ifdef URL_RDONLY - ts = av_url_read_seek(s->priv, -1, ts, 0); -#else - if (!ctx->prot->url_read_seek) + if (!ctx->read_seek) break; - ts = ctx->prot->url_read_seek(s->priv, -1, ts, 0); -#endif + ts = ctx->read_seek(s->priv, -1, ts, 0); if (ts >= 0) return 1; break; @@ -91,7 +76,7 @@ static void close_f(stream_t *stream) { - url_close(stream->priv); + avio_close(stream->priv); } static const char prefix[] = "ffmpeg://"; @@ -100,7 +85,7 @@ { int flags = 0; const char *filename; - URLContext *ctx = NULL; + AVIOContext *ctx = NULL; int res = STREAM_ERROR; int64_t size; int dummy; @@ -127,16 +112,16 @@ dummy = !strncmp(filename, "rtsp:", 5); mp_msg(MSGT_OPEN, MSGL_V, "[ffmpeg] Opening %s\n", filename); - if (!dummy && url_open(&ctx, filename, flags) < 0) + if (!dummy && avio_open(&ctx, filename, flags) < 0) goto out; stream->priv = ctx; - size = dummy ? 0 : url_filesize(ctx); + size = dummy ? 0 : avio_size(ctx); if (size >= 0) stream->end_pos = size; stream->type = STREAMTYPE_FILE; stream->seek = seek; - if (dummy || ctx->is_streamed) { + if (dummy || !ctx->seekable) { stream->type = STREAMTYPE_STREAM; stream->seek = NULL; }