[FFmpeg-devel] [PATCH] lavf/libsmbclient: implement move and delete callbacks
--- libavformat/libsmbclient.c | 63 ++ 1 file changed, 63 insertions(+) diff --git a/libavformat/libsmbclient.c b/libavformat/libsmbclient.c index 1af8163..84fef7f 100644 --- a/libavformat/libsmbclient.c +++ b/libavformat/libsmbclient.c @@ -287,6 +287,67 @@ static int libsmbc_close_dir(URLContext *h) return 0; } +static int libsmbc_delete(URLContext *h) +{ +LIBSMBContext *libsmbc = h->priv_data; +int ret; +struct stat st; + +if ((ret = libsmbc_connect(h)) < 0) +goto cleanup; + +if ((libsmbc->fd = smbc_open(h->filename, O_WRONLY, 0666)) < 0) { +ret = AVERROR(errno); +goto cleanup; +} + +if (smbc_fstat(libsmbc->fd, &st) < 0) { +ret = AVERROR(errno); +goto cleanup; +} + +smbc_close(libsmbc->fd); +libsmbc->fd = -1; + +if (S_ISDIR(st.st_mode)) { +if (smbc_rmdir(h->filename) < 0) { +ret = AVERROR(errno); +goto cleanup; +} +} else { +if (smbc_unlink(h->filename) < 0) { +ret = AVERROR(errno); +goto cleanup; +} +} + +ret = 0; + +cleanup: +libsmbc_close(h); +return ret; +} + +static int libsmbc_move(URLContext *h_src, URLContext *h_dst) +{ +LIBSMBContext *libsmbc = h_src->priv_data; +int ret; + +if ((ret = libsmbc_connect(h_src)) < 0) +goto cleanup; + +if ((libsmbc->dh = smbc_rename(h_src->filename, h_dst->filename)) < 0) { +ret = AVERROR(errno); +goto cleanup; +} + +ret = 0; + +cleanup: +libsmbc_close(h_src); +return ret; +} + #define OFFSET(x) offsetof(LIBSMBContext, x) #define D AV_OPT_FLAG_DECODING_PARAM #define E AV_OPT_FLAG_ENCODING_PARAM @@ -311,6 +372,8 @@ URLProtocol ff_libsmbclient_protocol = { .url_write = libsmbc_write, .url_seek= libsmbc_seek, .url_close = libsmbc_close, +.url_delete = libsmbc_delete, +.url_move= libsmbc_move, .url_open_dir= libsmbc_open_dir, .url_read_dir= libsmbc_read_dir, .url_close_dir = libsmbc_close_dir, -- 2.3.6 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avcodec: Add support for per-frame AFD output in h264
On Mon, Jun 22, 2015 at 12:01:06AM +0100, Kieran Kunhya wrote: > > h264.c | 11 +++ > h264.h |3 +++ > h264_sei.c |6 ++ > 3 files changed, 20 insertions(+) > 0795671b9553ff2c0af24c0004e582bcbe5b3554 > 0001-avcodec-Add-support-for-per-frame-AFD-output-in-h264.patch > From 6c0c94f8581d9e76301b03f9f416972fc0265fb6 Mon Sep 17 00:00:00 2001 > From: Kieran Kunhya > Date: Sun, 21 Jun 2015 23:59:12 +0100 > Subject: [PATCH] avcodec: Add support for per-frame AFD output in h264 > > --- > libavcodec/h264.c | 11 +++ > libavcodec/h264.h | 3 +++ > libavcodec/h264_sei.c | 6 ++ > 3 files changed, 20 insertions(+) > > diff --git a/libavcodec/h264.c b/libavcodec/h264.c > index 9be317c..de17edd 100644 > --- a/libavcodec/h264.c > +++ b/libavcodec/h264.c > @@ -608,6 +608,7 @@ static int h264_init_context(AVCodecContext *avctx, > H264Context *h) > h->frame_recovered = 0; > h->prev_frame_num= -1; > h->sei_fpa.frame_packing_arrangement_cancel_flag = -1; > +h->has_afd = 0; > > h->next_outputed_poc = INT_MIN; > for (i = 0; i < MAX_DELAYED_PIC_COUNT; i++) > @@ -869,6 +870,16 @@ static void decode_postinit(H264Context *h, int > setup_finished) > } > } > > +if (h->has_afd) { > +AVFrameSideData *sd = > +av_frame_new_side_data(cur->f, AV_FRAME_DATA_AFD, 1); > +if (!sd) > +return AVERROR(ENOMEM); decode_postinit() has a void return value [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I do not agree with what you have to say, but I'll defend to the death your right to say it. -- Voltaire signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] avcodec: Add support for per-frame AFD output in h264
From 6c0c94f8581d9e76301b03f9f416972fc0265fb6 Mon Sep 17 00:00:00 2001 From: Kieran Kunhya Date: Sun, 21 Jun 2015 23:59:12 +0100 Subject: [PATCH] avcodec: Add support for per-frame AFD output in h264 --- libavcodec/h264.c | 11 +++ libavcodec/h264.h | 3 +++ libavcodec/h264_sei.c | 6 ++ 3 files changed, 20 insertions(+) diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 9be317c..de17edd 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -608,6 +608,7 @@ static int h264_init_context(AVCodecContext *avctx, H264Context *h) h->frame_recovered = 0; h->prev_frame_num= -1; h->sei_fpa.frame_packing_arrangement_cancel_flag = -1; +h->has_afd = 0; h->next_outputed_poc = INT_MIN; for (i = 0; i < MAX_DELAYED_PIC_COUNT; i++) @@ -869,6 +870,16 @@ static void decode_postinit(H264Context *h, int setup_finished) } } +if (h->has_afd) { +AVFrameSideData *sd = +av_frame_new_side_data(cur->f, AV_FRAME_DATA_AFD, 1); +if (!sd) +return AVERROR(ENOMEM); + +*sd->data = h->afd; +h->has_afd = 0; +} + cur->mmco_reset = h->mmco_reset; h->mmco_reset = 0; diff --git a/libavcodec/h264.h b/libavcodec/h264.h index 548510d..7565e03 100644 --- a/libavcodec/h264.h +++ b/libavcodec/h264.h @@ -781,6 +781,9 @@ typedef struct H264Context { int missing_fields; +uint8_t afd; +int has_afd; + // Timestamp stuff int sei_buffering_period_present; ///< Buffering period SEI flag diff --git a/libavcodec/h264_sei.c b/libavcodec/h264_sei.c index 8e1697a..b6ec5c7 100644 --- a/libavcodec/h264_sei.c +++ b/libavcodec/h264_sei.c @@ -132,7 +132,13 @@ static int decode_user_data_itu_t_t35(H264Context *h, int size) return -1; skip_bits(&h->gb, 4); dtg_active_format = get_bits(&h->gb, 4); +#if FF_API_AFD +FF_DISABLE_DEPRECATION_WARNINGS h->avctx->dtg_active_format = dtg_active_format; +FF_ENABLE_DEPRECATION_WARNINGS +#endif /* FF_API_AFD */ +h->has_afd = 1; +h->afd = dtg_active_format; } else { skip_bits(&h->gb, 6); } -- 1.9.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] yuv4mpeg: add rough duration estimate and seeking.
On Sun, Jun 21, 2015 at 04:41:23PM -0400, Ronald S. Bultje wrote: > --- > libavformat/yuv4mpeg.h| 1 + > libavformat/yuv4mpegdec.c | 26 +++--- > 2 files changed, 20 insertions(+), 7 deletions(-) this needs to update the reference checksum for fate-seek-lavf-yuv4mpeg assuming the change is intended --- ./tests/ref/seek/lavf-yuv4mpeg 2015-06-20 16:32:37.183978941 +0200 +++ tests/data/fate/seek-lavf-yuv4mpeg 2015-06-22 00:38:43.982413616 +0200 @@ -1,27 +1,53 @@ ret: 0 st: 0 flags:1 dts: 0.00 pts: 0.00 pos: 64 size:152064 -ret:-1 st:-1 flags:0 ts:-1.00 -ret:-1 st:-1 flags:1 ts: 1.894167 -ret:-1 st: 0 flags:0 ts: 0.80 -ret:-1 st: 0 flags:1 ts:-0.32 -ret:-1 st:-1 flags:0 ts: 2.576668 -ret:-1 st:-1 flags:1 ts: 1.470835 -ret:-1 st: 0 flags:0 ts: 0.36 -ret:-1 st: 0 flags:1 ts:-0.76 -ret:-1 st:-1 flags:0 ts: 2.153336 -ret:-1 st:-1 flags:1 ts: 1.047503 -ret:-1 st: 0 flags:0 ts:-0.04 -ret:-1 st: 0 flags:1 ts: 2.84 -ret:-1 st:-1 flags:0 ts: 1.730004 -ret:-1 st:-1 flags:1 ts: 0.624171 -ret:-1 st: 0 flags:0 ts:-0.48 -ret:-1 st: 0 flags:1 ts: 2.40 -ret:-1 st:-1 flags:0 ts: 1.306672 -ret:-1 st:-1 flags:1 ts: 0.200839 -ret:-1 st: 0 flags:0 ts:-0.92 -ret:-1 st: 0 flags:1 ts: 2.00 -ret:-1 st:-1 flags:0 ts: 0.883340 -ret:-1 st:-1 flags:1 ts:-0.222493 -ret:-1 st: 0 flags:0 ts: 2.68 -ret:-1 st: 0 flags:1 ts: 1.56 -ret:-1 st:-1 flags:0 ts: 0.460008 -ret:-1 st:-1 flags:1 ts:-0.645825 +ret: 0 st:-1 flags:0 ts:-1.00 +ret: 0 st: 0 flags:1 dts: 0.04 pts: 0.04 pos: 152134 size:152064 +ret: 0 st:-1 flags:1 ts: 1.894167 +ret:-EOF +ret: 0 st: 0 flags:0 ts: 0.80 +ret: 0 st: 0 flags:1 dts: 0.80 pts: 0.80 pos:3041464 size:152064 +ret: 0 st: 0 flags:1 ts:-0.32 +ret: 0 st: 0 flags:1 dts: 0.84 pts: 0.84 pos:3193534 size:152064 +ret: 0 st:-1 flags:0 ts: 2.576668 +ret:-EOF +ret: 0 st:-1 flags:1 ts: 1.470835 +ret:-EOF +ret: 0 st: 0 flags:0 ts: 0.36 +ret: 0 st: 0 flags:1 dts: 0.36 pts: 0.36 pos:1368694 size:152064 +ret: 0 st: 0 flags:1 ts:-0.76 +ret: 0 st: 0 flags:1 dts: 0.40 pts: 0.40 pos:1520764 size:152064 +ret: 0 st:-1 flags:0 ts: 2.153336 +ret:-EOF +ret: 0 st:-1 flags:1 ts: 1.047503 +ret:-EOF +ret: 0 st: 0 flags:0 ts:-0.04 +ret:-EOF +ret: 0 st: 0 flags:1 ts: 2.84 +ret:-EOF +ret: 0 st:-1 flags:0 ts: 1.730004 +ret:-EOF +ret: 0 st:-1 flags:1 ts: 0.624171 +ret: 0 st: 0 flags:1 dts: 0.64 pts: 0.64 pos:2433184 size:152064 +ret: 0 st: 0 flags:0 ts:-0.48 +ret: 0 st: 0 flags:1 dts: 0.68 pts: 0.68 pos:2585254 size:152064 +ret: 0 st: 0 flags:1 ts: 2.40 +ret:-EOF +ret: 0 st:-1 flags:0 ts: 1.306672 +ret:-EOF +ret: 0 st:-1 flags:1 ts: 0.200839 +ret: 0 st: 0 flags:1 dts: 0.20 pts: 0.20 pos: 760414 size:152064 +ret: 0 st: 0 flags:0 ts:-0.92 +ret: 0 st: 0 flags:1 dts: 0.24 pts: 0.24 pos: 912484 size:152064 +ret: 0 st: 0 flags:1 ts: 2.00 +ret:-EOF +ret: 0 st:-1 flags:0 ts: 0.883340 +ret: 0 st: 0 flags:1 dts: 0.88 pts: 0.88 pos:3345604 size:152064 +ret: 0 st:-1 flags:1 ts:-0.222493 +ret: 0 st: 0 flags:1 dts: 0.92 pts: 0.92 pos:3497674 size:152064 +ret: 0 st: 0 flags:0 ts: 2.68 +ret:-EOF +ret: 0 st: 0 flags:1 ts: 1.56 +ret:-EOF +ret: 0 st:-1 flags:0 ts: 0.460008 +ret: 0 st: 0 flags:1 dts: 0.48 pts: 0.48 pos:1824904 size:152064 +ret: 0 st:-1 flags:1 ts:-0.645825 +ret: 0 st: 0 flags:1 dts: 0.52 pts: 0.52 pos:1976974 size:152064 Test seek-lavf-yuv4mpeg failed. Look at tests/data/fate/seek-lavf-yuv4mpeg.err for details. make: *** [fate-seek-lavf-yuv4mpeg] Error 1 make: *** Waiting for unfinished jobs [] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB No snowflake in an avalanche ever feels responsible. -- Voltaire signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] yuv4mpeg: add rough duration estimate and seeking.
Hi, On Sun, Jun 21, 2015 at 5:17 PM, Hendrik Leppkes wrote: > On Sun, Jun 21, 2015 at 10:41 PM, Ronald S. Bultje > wrote: > > --- > > libavformat/yuv4mpeg.h| 1 + > > libavformat/yuv4mpegdec.c | 26 +++--- > > 2 files changed, 20 insertions(+), 7 deletions(-) > > > > What happens if a seek does not end up on a perfect frame boundary? > Wouldn't that entirely screw over any further reading? > > So is it really that "rough", or does it actually work precise enough > to do that? It works for all y4m files I see in the wild, but the problem is that the y4m spec is a little confusing. The frame header magic is "FRAME", followed by optional per-frame options, and then a "\n". This is always empty (i.e. "FRAME\n"), but in theory it could be non-empty and then this doesn't work. I don't know how much we care about such theoretical files to make a more difficult dur/seek implementation. Ronald ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 1/2] lavf/file: implement directory listing callbacks
From: Lukasz Marek Signed-off-by: Lukasz Marek --- libavformat/file.c | 87 ++ 1 file changed, 87 insertions(+) diff --git a/libavformat/file.c b/libavformat/file.c index 6511328..e617ac8 100644 --- a/libavformat/file.c +++ b/libavformat/file.c @@ -23,6 +23,7 @@ #include "libavutil/internal.h" #include "libavutil/opt.h" #include "avformat.h" +#include #include #if HAVE_IO_H #include @@ -51,6 +52,7 @@ typedef struct FileContext { int fd; int trunc; int blocksize; +DIR *dir; } FileContext; static const AVOption file_options[] = { @@ -189,6 +191,88 @@ static int file_close(URLContext *h) return close(c->fd); } +static int file_open_dir(URLContext *h) +{ +FileContext *c = h->priv_data; + +c->dir = opendir(h->filename); +if (!c->dir) +return AVERROR(errno); + +return 0; +} + +static int file_read_dir(URLContext *h, AVIODirEntry **next) +{ +FileContext *c = h->priv_data; +struct dirent *dir; +char *fullpath = NULL; + +*next = ff_alloc_dir_entry(); +if (!*next) +return AVERROR(ENOMEM); +do { +errno = 0; +dir = readdir(c->dir); +if (!dir) { +av_freep(next); +return AVERROR(errno); +} +} while (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, "..")); + +fullpath = av_append_path_component(h->filename, dir->d_name); +if (fullpath) { +struct stat st; +if (!stat(fullpath, &st)) { +(*next)->group_id = st.st_gid; +(*next)->user_id = st.st_uid; +(*next)->size = st.st_size; +(*next)->filemode = st.st_mode & 0777; +(*next)->modification_timestamp = INT64_C(100) * st.st_mtime; +(*next)->access_timestamp = INT64_C(100) * st.st_atime; +(*next)->status_change_timestamp = INT64_C(100) * st.st_ctime; +} +av_free(fullpath); +} + +(*next)->name = av_strdup(dir->d_name); +switch (dir->d_type) { +case DT_FIFO: +(*next)->type = AVIO_ENTRY_NAMED_PIPE; +break; +case DT_CHR: +(*next)->type = AVIO_ENTRY_CHARACTER_DEVICE; +break; +case DT_DIR: +(*next)->type = AVIO_ENTRY_DIRECTORY; +break; +case DT_BLK: +(*next)->type = AVIO_ENTRY_BLOCK_DEVICE; +break; +case DT_REG: +(*next)->type = AVIO_ENTRY_FILE; +break; +case DT_LNK: +(*next)->type = AVIO_ENTRY_SYMBOLIC_LINK; +break; +case DT_SOCK: +(*next)->type = AVIO_ENTRY_SOCKET; +break; +case DT_UNKNOWN: +default: +(*next)->type = AVIO_ENTRY_UNKNOWN; +break; +} +return 0; +} + +static int file_close_dir(URLContext *h) +{ +FileContext *c = h->priv_data; +closedir(c->dir); +return 0; +} + URLProtocol ff_file_protocol = { .name= "file", .url_open= file_open, @@ -200,6 +284,9 @@ URLProtocol ff_file_protocol = { .url_check = file_check, .priv_data_size = sizeof(FileContext), .priv_data_class = &file_class, +.url_open_dir= file_open_dir, +.url_read_dir= file_read_dir, +.url_close_dir = file_close_dir, }; #endif /* CONFIG_FILE_PROTOCOL */ -- 2.3.6 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 2/2] lavf/file: check for dirent.h support
--- configure | 2 ++ libavformat/file.c | 34 ++ 2 files changed, 36 insertions(+) diff --git a/configure b/configure index 06a9941..09a71d8 100755 --- a/configure +++ b/configure @@ -1679,6 +1679,7 @@ HEADERS_LIST=" dev_video_bktr_ioctl_bt848_h dev_video_meteor_ioctl_meteor_h direct_h +dirent_h dlfcn_h d3d11_h dxva_h @@ -4985,6 +4986,7 @@ enabled xlib && check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext check_header direct.h +check_header dirent.h check_header dlfcn.h check_header d3d11.h check_header dxva.h diff --git a/libavformat/file.c b/libavformat/file.c index e617ac8..bb9ede6 100644 --- a/libavformat/file.c +++ b/libavformat/file.c @@ -23,7 +23,9 @@ #include "libavutil/internal.h" #include "libavutil/opt.h" #include "avformat.h" +#if HAVE_DIRENT_H #include +#endif #include #if HAVE_IO_H #include @@ -52,7 +54,9 @@ typedef struct FileContext { int fd; int trunc; int blocksize; +#if HAVE_DIRENT_H DIR *dir; +#endif } FileContext; static const AVOption file_options[] = { @@ -193,6 +197,7 @@ static int file_close(URLContext *h) static int file_open_dir(URLContext *h) { +#if HAVE_DIRENT_H FileContext *c = h->priv_data; c->dir = opendir(h->filename); @@ -200,10 +205,14 @@ static int file_open_dir(URLContext *h) return AVERROR(errno); return 0; +#else +return AVERROR(ENOSYS); +#endif /* HAVE_DIRENT_H */ } static int file_read_dir(URLContext *h, AVIODirEntry **next) { +#if HAVE_DIRENT_H FileContext *c = h->priv_data; struct dirent *dir; char *fullpath = NULL; @@ -231,11 +240,28 @@ static int file_read_dir(URLContext *h, AVIODirEntry **next) (*next)->modification_timestamp = INT64_C(100) * st.st_mtime; (*next)->access_timestamp = INT64_C(100) * st.st_atime; (*next)->status_change_timestamp = INT64_C(100) * st.st_ctime; + +#ifndef _DIRENT_HAVE_D_TYPE +if (S_ISDIR(st.st_mode)) +(*next)->type = AVIO_ENTRY_DIRECTORY; +else if (S_ISFIFO(st.st_mode)) +(*next)->type = AVIO_ENTRY_NAMED_PIPE; +else if (S_ISCHR(st.st_mode)) +(*next)->type = AVIO_ENTRY_CHARACTER_DEVICE; +else if (S_ISBLK(st.st_mode)) +(*next)->type = AVIO_ENTRY_BLOCK_DEVICE; +else if (S_ISREG(st.st_mode)) +(*next)->type = AVIO_ENTRY_FILE; +else +(*next)->type = AVIO_ENTRY_UNKNOWN; +#endif /* _DIRENT_HAVE_D_TYPE */ } av_free(fullpath); } (*next)->name = av_strdup(dir->d_name); + +#ifdef _DIRENT_HAVE_D_TYPE switch (dir->d_type) { case DT_FIFO: (*next)->type = AVIO_ENTRY_NAMED_PIPE; @@ -263,14 +289,22 @@ static int file_read_dir(URLContext *h, AVIODirEntry **next) (*next)->type = AVIO_ENTRY_UNKNOWN; break; } +#endif /* _DIRENT_HAVE_D_TYPE */ return 0; +#else +return AVERROR(ENOSYS); +#endif /* HAVE_DIRENT_H */ } static int file_close_dir(URLContext *h) { +#if HAVE_DIRENT_H FileContext *c = h->priv_data; closedir(c->dir); return 0; +#else +return AVERROR(ENOSYS); +#endif /* HAVE_DIRENT_H */ } URLProtocol ff_file_protocol = { -- 2.3.6 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 0/2] [GSoC] lavf/file: implement directory listing callbacks
Lukasz Marek (1): lavf/file: implement directory listing callbacks Mariusz Szczepańczyk (1): lavf/file: check for dirent.h support configure | 2 + libavformat/file.c | 121 + 2 files changed, 123 insertions(+) -- 2.3.6 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] yuv4mpeg: add rough duration estimate and seeking.
On Sun, Jun 21, 2015 at 10:41 PM, Ronald S. Bultje wrote: > --- > libavformat/yuv4mpeg.h| 1 + > libavformat/yuv4mpegdec.c | 26 +++--- > 2 files changed, 20 insertions(+), 7 deletions(-) > What happens if a seek does not end up on a perfect frame boundary? Wouldn't that entirely screw over any further reading? So is it really that "rough", or does it actually work precise enough to do that? - Hendrik ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/2] lavf/avio: Extend API with avio_move() and avio_delete()
On Sun, Jun 21, 2015 at 10:11:53AM +0200, Hendrik Leppkes wrote: > On Sat, Jun 20, 2015 at 2:52 PM, Mariusz Szczepańczyk > wrote: > > --- > > doc/APIchanges| 4 > > libavformat/avio.c| 38 ++ > > libavformat/avio.h| 19 +++ > > libavformat/url.h | 2 ++ > > libavformat/version.h | 2 +- > > 5 files changed, 64 insertions(+), 1 deletion(-) > > > > Why do we need moving and deleting files in avio? Whats the use-case for > ffmpeg? In addition to what has been mentioned there is also the need to atomically replace files in some muxers we currently use ff_rename() for that, but that is specific to local files, It would be better / more ideal if that was not specific to just local files [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I have never wished to cater to the crowd; for what I know they do not approve, and what they approve I do not know. -- Epicurus signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] yuv4mpeg: add rough duration estimate and seeking.
--- libavformat/yuv4mpeg.h| 1 + libavformat/yuv4mpegdec.c | 26 +++--- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/libavformat/yuv4mpeg.h b/libavformat/yuv4mpeg.h index 750f498..eba7337 100644 --- a/libavformat/yuv4mpeg.h +++ b/libavformat/yuv4mpeg.h @@ -23,5 +23,6 @@ #define Y4M_MAGIC "YUV4MPEG2" #define Y4M_FRAME_MAGIC "FRAME" +#define Y4M_FRAME_MAGIC_LEN 6 #endif /* AVFORMAT_YUV4MPEG_H */ diff --git a/libavformat/yuv4mpegdec.c b/libavformat/yuv4mpegdec.c index 7613c3c..4ebdb78 100644 --- a/libavformat/yuv4mpegdec.c +++ b/libavformat/yuv4mpegdec.c @@ -256,6 +256,12 @@ static int yuv4_read_header(AVFormatContext *s) st->sample_aspect_ratio = (AVRational){ aspectn, aspectd }; st->codec->chroma_sample_location = chroma_sample_location; st->codec->field_order= field_order; +s->packet_size = avpicture_get_size(st->codec->pix_fmt, width, height) + Y4M_FRAME_MAGIC_LEN; +if ((int) s->packet_size < 0) +return s->packet_size; +s->internal->data_offset = avio_tell(pb); + +st->duration = (avio_size(pb) - avio_tell(pb)) / s->packet_size; return 0; } @@ -264,7 +270,7 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt) { int i; char header[MAX_FRAME_HEADER+1]; -int packet_size, width, height, ret; +int width, height, ret, off = avio_tell(s->pb); AVStream *st = s->streams[0]; for (i = 0; i < MAX_FRAME_HEADER; i++) { @@ -287,17 +293,22 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt) width = st->codec->width; height = st->codec->height; -packet_size = avpicture_get_size(st->codec->pix_fmt, width, height); -if (packet_size < 0) -return packet_size; - -ret = av_get_packet(s->pb, pkt, packet_size); +ret = av_get_packet(s->pb, pkt, s->packet_size - Y4M_FRAME_MAGIC_LEN); if (ret < 0) return ret; -else if (ret != packet_size) +else if (ret != s->packet_size - Y4M_FRAME_MAGIC_LEN) return s->pb->eof_reached ? AVERROR_EOF : AVERROR(EIO); pkt->stream_index = 0; +pkt->pts = (off - s->internal->data_offset) / s->packet_size; +pkt->duration = 1; +return 0; +} + +static int yuv4_read_seek(AVFormatContext *s, int stream_index, + int64_t pts, int flags) +{ +avio_seek(s->pb, pts * s->packet_size + s->internal->data_offset, SEEK_SET); return 0; } @@ -316,5 +327,6 @@ AVInputFormat ff_yuv4mpegpipe_demuxer = { .read_probe = yuv4_probe, .read_header= yuv4_read_header, .read_packet= yuv4_read_packet, +.read_seek = yuv4_read_seek, .extensions = "y4m", }; -- 2.1.2 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/2] lavf/avio: Extend API with avio_move() and avio_delete()
On Sun, Jun 21, 2015 at 8:24 PM, wm4 wrote: > On Sun, 21 Jun 2015 19:20:53 +0100 > Kieran Kunhya wrote: > > > > Suppose you're writing a video player with browsing capabilities for > network > > > protocols (like Kodi/XBMC). Now you can have file rename/delete > > > functionality in it. > > > > Suppose you are writing a video player and need to change the screen > resolution. > > Can we have that feature in libavutil too? > > > > Don't give them ideas... there's "space" for such features in > libavdevice. > > (I'd like to have a more general multimedia framework around FFmpeg > too, but messing such features into the existing libav*s for the lack > of a better place is _not_ a good idea.) > You know you can just say why do you think it's an unneeded feature and don't have to be trolling. Anyway, this is a part of my GSoC task that has been accepted and I'm compelled to implement it so I won't be getting into further discussion. Mariusz ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/2] lavf/avio: Extend API with avio_move() and avio_delete()
On Sun, 21 Jun 2015 19:20:53 +0100 Kieran Kunhya wrote: > > Suppose you're writing a video player with browsing capabilities for network > > protocols (like Kodi/XBMC). Now you can have file rename/delete > > functionality in it. > > Suppose you are writing a video player and need to change the screen > resolution. > Can we have that feature in libavutil too? > Don't give them ideas... there's "space" for such features in libavdevice. (I'd like to have a more general multimedia framework around FFmpeg too, but messing such features into the existing libav*s for the lack of a better place is _not_ a good idea.) ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/2] lavf/avio: Extend API with avio_move() and avio_delete()
> Suppose you're writing a video player with browsing capabilities for network > protocols (like Kodi/XBMC). Now you can have file rename/delete > functionality in it. Suppose you are writing a video player and need to change the screen resolution. Can we have that feature in libavutil too? Kieran ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/2] lavf/avio: Extend API with avio_move() and avio_delete()
On 21/06/15 10:11, Hendrik Leppkes wrote: On Sat, Jun 20, 2015 at 2:52 PM, Mariusz Szczepańczyk wrote: --- doc/APIchanges| 4 libavformat/avio.c| 38 ++ libavformat/avio.h| 19 +++ libavformat/url.h | 2 ++ libavformat/version.h | 2 +- 5 files changed, 64 insertions(+), 1 deletion(-) Why do we need moving and deleting files in avio? Whats the use-case for ffmpeg? - Hendrik Suppose you're writing a video player with browsing capabilities for network protocols (like Kodi/XBMC). Now you can have file rename/delete functionality in it. Mariusz ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/2] lavf/avio: Extend API with avio_move() and avio_delete()
On 21/06/15 09:37, Timothy Gu wrote: El sábado, 20 de junio de 2015, Mariusz Szczepańczyk mailto:mszczepanc...@gmail.com>> escribió: --- doc/APIchanges| 4 libavformat/avio.c| 38 ++ libavformat/avio.h| 19 +++ libavformat/url.h | 2 ++ libavformat/version.h | 2 +- 5 files changed, 64 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 6e64a05..a9efd12 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -17,6 +17,10 @@ API changes, most recent first: 8< - FFmpeg 2.7 was cut here 8< - +2015-xx-xx - xxx - lavf 56.38.100 - avio.h url.h + Add avio_move(), avio_delete(). + Extend URLProtocol with url_move(), url_delete(). + This goes above the 2.7 release cut line. Timothy You're right. Thanks! Mariusz >From 283f81e40b8776ac485e0e575ba351618a5c2332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mariusz=20Szczepa=C5=84czyk?= Date: Wed, 17 Jun 2015 20:12:00 +0200 Subject: [PATCH 1/2] lavf/avio: Extend API with avio_move() and avio_delete() --- doc/APIchanges| 4 libavformat/avio.c| 38 ++ libavformat/avio.h| 19 +++ libavformat/url.h | 2 ++ libavformat/version.h | 2 +- 5 files changed, 64 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 6e64a05..cc2ebf3 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,10 @@ libavutil: 2014-08-09 API changes, most recent first: +2015-xx-xx - xxx - lavf 56.38.100 - avio.h url.h + Add avio_move(), avio_delete(). + Extend URLProtocol with url_move(), url_delete(). + 8< - FFmpeg 2.7 was cut here 8< - 2015-06-04 - cc17b43 - lswr 1.2.100 diff --git a/libavformat/avio.c b/libavformat/avio.c index 261ff2a..bd32944 100644 --- a/libavformat/avio.c +++ b/libavformat/avio.c @@ -421,6 +421,44 @@ int avio_check(const char *url, int flags) return ret; } +int avio_move(const char *url_src, const char *url_dst) +{ +URLContext *h_src, *h_dst; +int ret = ffurl_alloc(&h_src, url_src, AVIO_FLAG_READ_WRITE, NULL); +if (ret < 0) +return ret; +ret = ffurl_alloc(&h_dst, url_dst, AVIO_FLAG_WRITE, NULL); +if (ret < 0) { +ffurl_close(h_src); +return ret; +} + +if (h_src->prot == h_dst->prot && h_src->prot->url_move) +ret = h_src->prot->url_move(h_src, h_dst); +else +ret = AVERROR(ENOSYS); + +ffurl_close(h_src); +ffurl_close(h_dst); +return ret; +} + +int avio_delete(const char *url) +{ +URLContext *h; +int ret = ffurl_alloc(&h, url, AVIO_FLAG_WRITE, NULL); +if (ret < 0) +return ret; + +if (h->prot->url_delete) +ret = h->prot->url_delete(h); +else +ret = AVERROR(ENOSYS); + +ffurl_close(h); +return ret; +} + int avio_open_dir(AVIODirContext **s, const char *url, AVDictionary **options) { URLContext *h = NULL; diff --git a/libavformat/avio.h b/libavformat/avio.h index 9f3a992..5ac5d38 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -230,6 +230,25 @@ const char *avio_find_protocol_name(const char *url); int avio_check(const char *url, int flags); /** + * Move or rename a resource. + * + * @note url_src and url_dst should share the same protocol and authority. + * + * @param url_src url to resource to be moved + * @param url_dst new url to resource if the operation succeeded + * @return >=0 on success or negative on error. + */ +int avio_move(const char *url_src, const char *url_dst); + +/** + * Delete a resource. + * + * @param url resource to be deleted. + * @return >=0 on success or negative on error. + */ +int avio_delete(const char *url); + +/** * Open directory for reading. * * @param s directory read context. Pointer to a NULL pointer must be passed. diff --git a/libavformat/url.h b/libavformat/url.h index 1a845b7..99a3201 100644 --- a/libavformat/url.h +++ b/libavformat/url.h @@ -90,6 +90,8 @@ typedef struct URLProtocol { int (*url_open_dir)(URLContext *h); int (*url_read_dir)(URLContext *h, AVIODirEntry **next); int (*url_close_dir)(URLContext *h); +int (*url_delete)(URLContext *h); +int (*url_move)(URLContext *h_src, URLContext *h_dst); } URLProtocol; /** diff --git a/libavformat/version.h b/libavformat/version.h index 99b7190..ec84570 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -30,7 +30,7 @@ #include "libavutil/version.h" #define LIBAVFORMAT_VERSION_MAJOR 56 -#define LIBAVFORMAT_VERSION_MINOR 37 +#define LIBAVFORMAT_VERSION_MINOR 38 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ -- 2.3.6 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http:/
Re: [FFmpeg-devel] [PATCH] avformat/rawenc: Store sample number for ADX
On Sun, Jun 21, 2015 at 08:32:46AM +, Paul B Mahol wrote: > Dana 21. 6. 2015. 00:32 osoba "Michael Niedermayer" > napisala je: > > > > Fixes Ticket4540 > > > > Signed-off-by: Michael Niedermayer > > --- > > libavformat/rawenc.c | 20 > > tests/ref/acodec/adpcm-adx |2 +- > > tests/ref/acodec/adpcm-adx-trellis |2 +- > > 3 files changed, 22 insertions(+), 2 deletions(-) > > > > diff --git a/libavformat/rawenc.c b/libavformat/rawenc.c > > index e59f1ae..d65c7c7 100644 > > --- a/libavformat/rawenc.c > > +++ b/libavformat/rawenc.c > > @@ -56,6 +56,25 @@ AVOutputFormat ff_ac3_muxer = { > > #endif > > > > #if CONFIG_ADX_MUXER > > + > > +static int adx_write_trailer(AVFormatContext *s) > > +{ > > +AVIOContext *pb = s->pb; > > +AVCodecContext *avctx = s->streams[0]->codec; > > + > > +if (pb->seekable) { > > +int64_t file_size = avio_tell(pb); > > +uint64_t sample_count = (file_size - 36) / avctx->channels / 18 > * 32; > > +if (sample_count <= UINT32_MAX) { > > +avio_seek(pb, 12, SEEK_SET); > > +avio_wb32(pb, sample_count); > > +avio_seek(pb, file_size, SEEK_SET); > > +} > > +} > > + > > +return 0; > > +} > > + > > AVOutputFormat ff_adx_muxer = { > > .name = "adx", > > .long_name = NULL_IF_CONFIG_SMALL("CRI ADX"), > > @@ -64,6 +83,7 @@ AVOutputFormat ff_adx_muxer = { > > .video_codec = AV_CODEC_ID_NONE, > > .write_header = force_one_stream, > > .write_packet = ff_raw_write_packet, > > +.write_trailer = adx_write_trailer, > > .flags = AVFMT_NOTIMESTAMPS, > > }; > > #endif > > diff --git a/tests/ref/acodec/adpcm-adx b/tests/ref/acodec/adpcm-adx > > index 34dd9b6..8c40100 100644 > > --- a/tests/ref/acodec/adpcm-adx > > +++ b/tests/ref/acodec/adpcm-adx > > @@ -1,4 +1,4 @@ > > -d7ec7d52a2f5c91464812d031b07cc1d *tests/data/fate/acodec-adpcm-adx.adx > > +6bf1a8e5ec9cc958a31cb2b1b66bfc75 *tests/data/fate/acodec-adpcm-adx.adx > > 297720 tests/data/fate/acodec-adpcm-adx.adx > > 5b5a436ec9d528d6eb0bebaf667521b0 > *tests/data/fate/acodec-adpcm-adx.out.wav > > stddev: 2549.93 PSNR: 28.20 MAXDIFF:57514 bytes: 1058400/ 1058432 > > diff --git a/tests/ref/acodec/adpcm-adx-trellis > b/tests/ref/acodec/adpcm-adx-trellis > > index d620d4a..039f69f 100644 > > --- a/tests/ref/acodec/adpcm-adx-trellis > > +++ b/tests/ref/acodec/adpcm-adx-trellis > > @@ -1,4 +1,4 @@ > > -d7ec7d52a2f5c91464812d031b07cc1d > *tests/data/fate/acodec-adpcm-adx-trellis.adx > > +6bf1a8e5ec9cc958a31cb2b1b66bfc75 > *tests/data/fate/acodec-adpcm-adx-trellis.adx > > 297720 tests/data/fate/acodec-adpcm-adx-trellis.adx > > 5b5a436ec9d528d6eb0bebaf667521b0 > *tests/data/fate/acodec-adpcm-adx-trellis.out.wav > > stddev: 2549.93 PSNR: 28.20 MAXDIFF:57514 bytes: 1058400/ 1058432 > > -- > > 1.7.9.5 > > > > ___ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > LGTM applied thanks [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I have often repented speaking, but never of holding my tongue. -- Xenocrates signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] Areas needing work
On Tue, Apr 07, 2015 at 10:22:17AM +1000, Peter Ross wrote: > On Mon, Apr 06, 2015 at 07:24:35PM +0100, Derek Buitenhuis wrote: > > On 4/6/2015 4:43 AM, Michael Niedermayer wrote: > [..] > > > * Conferences / exhibitions, public stuff > > > Theres a conference, linuxtag, fosdem, whatever, wherever in your local > > > area > > > and you think FFmpeg should be represented there ? > > > > FWIW, I attend FOSDEM and VDD representing both FFmpeg and Libav as well as > > $dayjob, > > (just to make sure everyone on every side hates me ;)). I also talked at > > IBC at EBU's > > booth about open source media, and will be in Berlin for SMPTE's > > circlejerk^Wforum > > in May, as talking about open source media (FFmpeg especially). I'm not the > > only > > one, and I think this is pretty well covered in recent years. > > I am thinking of submitting a FFmpeg themed paper to LCA'2016 (Linux > Conference Australia). > If anyone wants to contribute please yell out. > > Topic idea to be decided. Maybe: > - survey of compression algorithm reuse amongst all our codecs. Might be a > lot of work to do, but would be interesting. > - or describe less known capabilities of FFmpeg. > - ... > > The LCA call for proposals opens in July-August. > My spare time is limited, so to have something ready I need to make a start > soon. Anyone? Ping me. "The tentative close date for Presentations, Tutorials and Prototypes is 6th July. If you are proposing a Miniconf, you must submit your proposal by 6th July." http://linux.conf.au/cfp -- Peter (A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B) signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avformat/rawenc: Store sample number for ADX
Dana 21. 6. 2015. 00:32 osoba "Michael Niedermayer" napisala je: > > Fixes Ticket4540 > > Signed-off-by: Michael Niedermayer > --- > libavformat/rawenc.c | 20 > tests/ref/acodec/adpcm-adx |2 +- > tests/ref/acodec/adpcm-adx-trellis |2 +- > 3 files changed, 22 insertions(+), 2 deletions(-) > > diff --git a/libavformat/rawenc.c b/libavformat/rawenc.c > index e59f1ae..d65c7c7 100644 > --- a/libavformat/rawenc.c > +++ b/libavformat/rawenc.c > @@ -56,6 +56,25 @@ AVOutputFormat ff_ac3_muxer = { > #endif > > #if CONFIG_ADX_MUXER > + > +static int adx_write_trailer(AVFormatContext *s) > +{ > +AVIOContext *pb = s->pb; > +AVCodecContext *avctx = s->streams[0]->codec; > + > +if (pb->seekable) { > +int64_t file_size = avio_tell(pb); > +uint64_t sample_count = (file_size - 36) / avctx->channels / 18 * 32; > +if (sample_count <= UINT32_MAX) { > +avio_seek(pb, 12, SEEK_SET); > +avio_wb32(pb, sample_count); > +avio_seek(pb, file_size, SEEK_SET); > +} > +} > + > +return 0; > +} > + > AVOutputFormat ff_adx_muxer = { > .name = "adx", > .long_name = NULL_IF_CONFIG_SMALL("CRI ADX"), > @@ -64,6 +83,7 @@ AVOutputFormat ff_adx_muxer = { > .video_codec = AV_CODEC_ID_NONE, > .write_header = force_one_stream, > .write_packet = ff_raw_write_packet, > +.write_trailer = adx_write_trailer, > .flags = AVFMT_NOTIMESTAMPS, > }; > #endif > diff --git a/tests/ref/acodec/adpcm-adx b/tests/ref/acodec/adpcm-adx > index 34dd9b6..8c40100 100644 > --- a/tests/ref/acodec/adpcm-adx > +++ b/tests/ref/acodec/adpcm-adx > @@ -1,4 +1,4 @@ > -d7ec7d52a2f5c91464812d031b07cc1d *tests/data/fate/acodec-adpcm-adx.adx > +6bf1a8e5ec9cc958a31cb2b1b66bfc75 *tests/data/fate/acodec-adpcm-adx.adx > 297720 tests/data/fate/acodec-adpcm-adx.adx > 5b5a436ec9d528d6eb0bebaf667521b0 *tests/data/fate/acodec-adpcm-adx.out.wav > stddev: 2549.93 PSNR: 28.20 MAXDIFF:57514 bytes: 1058400/ 1058432 > diff --git a/tests/ref/acodec/adpcm-adx-trellis b/tests/ref/acodec/adpcm-adx-trellis > index d620d4a..039f69f 100644 > --- a/tests/ref/acodec/adpcm-adx-trellis > +++ b/tests/ref/acodec/adpcm-adx-trellis > @@ -1,4 +1,4 @@ > -d7ec7d52a2f5c91464812d031b07cc1d *tests/data/fate/acodec-adpcm-adx-trellis.adx > +6bf1a8e5ec9cc958a31cb2b1b66bfc75 *tests/data/fate/acodec-adpcm-adx-trellis.adx > 297720 tests/data/fate/acodec-adpcm-adx-trellis.adx > 5b5a436ec9d528d6eb0bebaf667521b0 *tests/data/fate/acodec-adpcm-adx-trellis.out.wav > stddev: 2549.93 PSNR: 28.20 MAXDIFF:57514 bytes: 1058400/ 1058432 > -- > 1.7.9.5 > > ___ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel LGTM ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/2] lavf/avio: Extend API with avio_move() and avio_delete()
On Sat, Jun 20, 2015 at 2:52 PM, Mariusz Szczepańczyk wrote: > --- > doc/APIchanges| 4 > libavformat/avio.c| 38 ++ > libavformat/avio.h| 19 +++ > libavformat/url.h | 2 ++ > libavformat/version.h | 2 +- > 5 files changed, 64 insertions(+), 1 deletion(-) > Why do we need moving and deleting files in avio? Whats the use-case for ffmpeg? - Hendrik ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/2] lavf/avio: Extend API with avio_move() and avio_delete()
El sábado, 20 de junio de 2015, Mariusz Szczepańczyk < mszczepanc...@gmail.com> escribió: > --- > doc/APIchanges| 4 > libavformat/avio.c| 38 ++ > libavformat/avio.h| 19 +++ > libavformat/url.h | 2 ++ > libavformat/version.h | 2 +- > 5 files changed, 64 insertions(+), 1 deletion(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 6e64a05..a9efd12 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -17,6 +17,10 @@ API changes, most recent first: > > 8< - FFmpeg 2.7 was cut here 8< - > > +2015-xx-xx - xxx - lavf 56.38.100 - avio.h url.h > + Add avio_move(), avio_delete(). > + Extend URLProtocol with url_move(), url_delete(). > + This goes above the 2.7 release cut line. Timothy ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel