Re: [FFmpeg-devel] [PATCH] avcodec/utvideodec: use cached bitstream reader only on targets with fast 64bit ops
> Am 02.09.2018 um 01:18 schrieb James Almer : > > Signed-off-by: James Almer > --- > Unbenched, but if x86_32 is slow with it, then chances are so are arm > and similar 32bit architectures. Please do not commit without benchmarks, I found no other architecture where the new reader is slower. Thank you, Carl Eugen ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] ffplay: add option to allow custom jump interval
On Sun, 2 Sep 2018, Gyan Doshi wrote: On 01-09-2018 10:25 PM, Marton Balint wrote: In the descriptive text write "seeking" instead of jumping. @item -nodisp Disable graphical display. @item -noborder diff --git a/fftools/ffplay.c b/fftools/ffplay.c index 368e262123..83eef17797 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -319,6 +319,7 @@ static int video_disable; static int subtitle_disable; static const char* wanted_stream_spec[AVMEDIA_TYPE_NB] = {0}; static int seek_by_bytes = -1; +static float jump_interval = 0; why not make this = 10.0 by default? And change the code below accordingly. Changed 'jump' to 'seek' throughout. Change the option name to seek_interval then, -seek alone seems a bit confusing to me because it might mean to do initial seek in the input before playing the file. Haven't changed code much, kept basic protection against invalid input (val < 0) I don't think the guards are necessary, it might make sense for somebody to reverse the meaning of left and right keys, therefore use a negative value. Thanks, Marton ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] avformat/matroskadec.c: Fix support seek to non keyframes
In previous commit from 7c00d853a65884870e2a7a916197d87c125ed630, It looks like adjust skip_to_keyframe param to support seek to non keyframes. But this code seems to avoid adjust matroska->skip_to_keyframe param. It always set to 1 without considering AVSEEK_FLAG_ANY flag. I don't think this code is what you intended. Please check this patch or explain the reason why matroska->skip_to_keyframe is always set to 1. Regards. -- From 0b35c837ce61d87a4e74865c0d968b258a7c76c3 Mon Sep 17 00:00:00 2001 From: Seokjin Hong Date: Sun, 2 Sep 2018 21:37:06 +0900 Subject: [PATCH] avformat/matroskadec.c: Fix support seek to non keyframes --- libavformat/matroskadec.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index e6793988e1..b66fcec4a5 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3590,12 +3590,13 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index, matroska->current_id = 0; if (flags & AVSEEK_FLAG_ANY) { st->skip_to_keyframe = 0; +matroska->skip_to_keyframe = 0; matroska->skip_to_timecode = timestamp; } else { st->skip_to_keyframe = 1; +matroska->skip_to_keyframe = 1; matroska->skip_to_timecode = st->index_entries[index].timestamp; } -matroska->skip_to_keyframe = 1; matroska->done = 0; matroska->num_levels = 0; ff_update_cur_dts(s, st, st->index_entries[index].timestamp); -- 2.17.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] lavd/v4l2: skip buffers not matching frame_size
> libavdevice/v4l2.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) Any comments on this? pgp6DLors_XHR.pgp Description: OpenPGP digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] lavf/libsmbclient: return AVERROR_EOF for EOF.
Nicolas George (2018-08-30): > Confirmed to work on trac. Will push soon. Pushed. And backported to 4.0; hope I did not make any mistake, this is my first backport. Regards, -- Nicolas George signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] lavf/libsmbclient: return AVERROR_EOF for EOF.
On Sun, Sep 2, 2018 at 7:44 PM, Nicolas George wrote: > Nicolas George (2018-08-30): >> Confirmed to work on trac. Will push soon. > > Pushed. > > And backported to 4.0; hope I did not make any mistake, this is my first > backport. > Hi, I think that looks alright as far as back-port is concerned, although I was advised to use `git cherry-pick -x HASH_IN_MASTER`, where the -x adds the "(cherry-picked from commit HASH)" comment at the end of the commit message. Jan ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] lavf/libsmbclient: return AVERROR_EOF for EOF.
Jan Ekström (2018-09-02): > I think that looks alright as far as back-port is concerned, although > I was advised to use `git cherry-pick -x HASH_IN_MASTER`, where the -x > adds the "(cherry-picked from commit HASH)" comment at the end of the > commit message. Ok, I'll try to remember this for the next time. Thanks. Regards, -- Nicolas George signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avcodec/utvideodec: use cached bitstream reader only on targets with fast 64bit ops
On 9/2/2018 5:30 AM, Carl Eugen Hoyos wrote: > > >> Am 02.09.2018 um 01:18 schrieb James Almer : >> >> Signed-off-by: James Almer >> --- >> Unbenched, but if x86_32 is slow with it, then chances are so are arm >> and similar 32bit architectures. > > Please do not commit without benchmarks, I found no other architecture where > the new reader is slower. I can't bench on anything but x86, which is why i sent this patch to get other people's opinions. You tried other 32 bit architectures like arm7 or PPC? fast_64 is a configure time constant used in a lot of speed critical modules to choose between using 32bit or 64bit ops, so seeing how this new bitstream reader uses a 64bit cache I'd expect it to be slower in such targets as well. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avcodec/utvideodec: use cached bitstream reader only on targets with fast 64bit ops
> Am 02.09.2018 um 19:46 schrieb James Almer : > >> On 9/2/2018 5:30 AM, Carl Eugen Hoyos wrote: >> >> >>> Am 02.09.2018 um 01:18 schrieb James Almer : >>> >>> Signed-off-by: James Almer >>> --- >>> Unbenched, but if x86_32 is slow with it, then chances are so are arm >>> and similar 32bit architectures. >> >> Please do not commit without benchmarks, I found no other architecture where >> the new reader is slower. > > I can't bench on anything but x86, which is why i sent this patch to get > other people's opinions. Then please don’t commit. > You tried other 32 bit architectures like arm7 or PPC? Yes. Carl Eugen ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 4/6] lavfi: add a Vulkan chromatic aberration filter
On 21/06/18 17:55, Rostislav Pehlivanov wrote: > It tries to do something similar to it with YUV images, but RGB images > are done properly. I agree that it's something similar and kindof cute, but it definitely isn't the separation of colours you would expect from the name of the filter. I think it might be better to constrain the filter to be RGB-only, since a video-processing case is likely to have YUV input by default and a user may be somewhat confused by what this does. > Signed-off-by: Rostislav Pehlivanov > --- > configure | 1 + > libavfilter/Makefile| 1 + > libavfilter/allfilters.c| 1 + > libavfilter/vf_chromaticaberration_vulkan.c | 342 > 4 files changed, 345 insertions(+) > create mode 100644 libavfilter/vf_chromaticaberration_vulkan.c What is the behaviour around the edges of the frame meant to be? Currently it bleeds the empty edges into the frame, which looks pretty weird. > ... > diff --git a/libavfilter/vf_chromaticaberration_vulkan.c > b/libavfilter/vf_chromaticaberration_vulkan.c > new file mode 100644 > index 00..1d1aeb95a0 > --- /dev/null > +++ b/libavfilter/vf_chromaticaberration_vulkan.c > ...> + > +#define OFFSET(x) offsetof(ChromaticAberrationVulkanContext, x) > +#define FLAGS (AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM) > +static const AVOption chromaticaberration_vulkan_options[] = { > +{ "dist_x", "Set horizontal distortion amount", OFFSET(dist_x), > AV_OPT_TYPE_FLOAT, {.dbl = 0.0f}, 0.0f, 10.0f, .flags = FLAGS }, > +{ "dist_y", "Set vertical distortion amount", OFFSET(dist_y), > AV_OPT_TYPE_FLOAT, {.dbl = 0.0f}, 0.0f, 10.0f, .flags = FLAGS }, Can you say anything about what the units of this are? It looks like dist_y has exactly half the effect of dist_x - is that intended? > +{ NULL }, > +}; > ... The code parts of this filter all look fine. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/6] lavu: add a Vulkan hwcontext
(Finally got around to this again, apologies for the delay. The Vulkan-only parts all look pretty much fine to me (modulo one transfer case below), but mapping seems to still have some issues.) On 21/06/18 17:55, Rostislav Pehlivanov wrote: > This commit adds a Vulkan hwcontext, currently capable of mapping DRM and > VAAPI frames but additional functionality can be added later to support > importing of D3D11 surfaces as well as exporting to various other APIs. Have you tried on any non-desktop platforms? With the V4L2 DRM PRIME stuff we should be able to import here (and Rockchip would already work if they would just compile the Mali binary with Vulkan enabled...). > This context requires the newest stable version of the Vulkan API. > > It makes use of every part of the Vulkan spec in order to ensure fastest > possible uploading, downloading and mapping of frames. > > To be useful for non-RGB images an implementation with the YUV images > extension is needed. All current implementations support that with the > exception of AMD, though support is coming soon for Mesa. Is there any ETA on when that will be? These formats still don't seem to be getting much use - I wonder whether it would be sensible to admit the possibility of multiple-image cases in the format definition (so NV12 as R8 + R8G8, in the same way the OpenCL does). That doesn't need to have any hwcontext implementation now, but there might need to be some checks in the filters to distinguish the two different representations of multiplanar image types (though they all actually operate on the separate planes, so hopefully that can be some minor amount of common code). > Signed-off-by: Rostislav Pehlivanov > --- > configure | 10 + > doc/APIchanges |4 + > libavutil/Makefile |3 + > libavutil/hwcontext.c |4 + > libavutil/hwcontext.h |1 + > libavutil/hwcontext_internal.h |1 + > libavutil/hwcontext_vulkan.c | 2225 > libavutil/hwcontext_vulkan.h | 133 ++ > libavutil/pixdesc.c|4 + > libavutil/pixfmt.h |4 + > libavutil/version.h|4 +- > 11 files changed, 2391 insertions(+), 2 deletions(-) > create mode 100644 libavutil/hwcontext_vulkan.c > create mode 100644 libavutil/hwcontext_vulkan.h > > ... > diff --git a/doc/APIchanges b/doc/APIchanges > index efe15ba4e0..b2684eb442 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -15,6 +15,10 @@ libavutil: 2017-10-21 > > API changes, most recent first: > > +2018-04-xx - xx - lavu 56.19.100 - hwcontext.h > + Add AV_PIX_FMT_VULKAN Is in pixfmt.h. > + Add AV_HWDEVICE_TYPE_VULKAN and implementation. > + > 2018-05-xx - xx - lavf 58.15.100 - avformat.h >Add pmt_version field to AVProgram > > ... > diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c > new file mode 100644 > index 00..91d06712d4 > --- /dev/null > +++ b/libavutil/hwcontext_vulkan.c > ... > + > +static int vulkan_device_create(AVHWDeviceContext *ctx, const char *device, > +AVDictionary *opts, int flags) > +{ > +VulkanDeviceSelection dev_select = { 0 }; > +if (device && device[0]) { > +char *end = NULL; > +dev_select.index = strtol(device, &end, 10); > +if (end == device) { > +dev_select.index = 0; > +dev_select.name = device; > +} > +} > + > +return vulkan_device_create_internal(ctx, &dev_select, opts, flags); > +} > + > +static int vulkan_device_derive(AVHWDeviceContext *ctx, > +AVHWDeviceContext *src_ctx, int flags) > +{ > +VulkanDeviceSelection dev_select = { 0 }; > + > +switch(src_ctx->type) { > +#if CONFIG_LIBDRM > +#if CONFIG_VAAPI > +case AV_HWDEVICE_TYPE_VAAPI: { > +AVVAAPIDeviceContext *src_hwctx = src_ctx->hwctx; > +const char *vendor = vaQueryVendorString(src_hwctx->display); > +if (!vendor) { > +av_log(ctx, AV_LOG_ERROR, "Unable to get device info from > vaapi!\n"); > +return AVERROR_EXTERNAL; > +} > + > +if (strstr(vendor, "Intel")) > +dev_select.vendor_id = 0x8086; > +if (strstr(vendor, "AMD")) > +dev_select.vendor_id = 0x1002; > + > +return vulkan_device_create_internal(ctx, &dev_select, NULL, flags); > +} > +#endif > +case AV_HWDEVICE_TYPE_DRM: { > +AVDRMDeviceContext *src_hwctx = src_ctx->hwctx; > + > +drmDevice *drm_dev_info; > +int err = drmGetDevice(src_hwctx->fd, &drm_dev_info); > +if (err) { > +av_log(ctx, AV_LOG_ERROR, "Unable to get device info from drm > fd!\n"); > +return AVERROR_EXTERNAL; > +} > + > +if (drm_dev_info->bustype == DRM_BUS_PCI) > +dev_select.pci_device = drm_dev_info->deviceinfo.pci->device_id; > +
Re: [FFmpeg-devel] [PATCH 3/6] lavfi: add a Vulkan avgblur filter
On 21/06/18 17:55, Rostislav Pehlivanov wrote: > Signed-off-by: Rostislav Pehlivanov > --- > configure | 1 + > libavfilter/Makefile| 1 + > libavfilter/allfilters.c| 1 + > libavfilter/vf_avgblur_vulkan.c | 343 > 4 files changed, 346 insertions(+) > create mode 100644 libavfilter/vf_avgblur_vulkan.c This filter seems to always hang when run on current ANV? $ ./ffmpeg_g -v 55 -y -i in.mp4 -an -init_hw_device vulkan=v:'Intel(R) UHD Graphics 630 (Coffeelake 3x8 GT2)' -filter_hw_device v -vf 'hwupload,avgblur_vulkan,hwdownload' -c:v libx264 -frames:v 1000 out.mp4 ... [Parsed_avgblur_vulkan_1 @ 0x55f1ba284ac0] Shader linked! Size: 3464 bytes INTEL-MESA: error: ../../../src/intel/vulkan/anv_device.c:2004: GPU hung on one of our command buffers (VK_ERROR_DEVICE_LOST) [AVHWDeviceContext @ 0x55f1b9219b00] Unable to submit command buffer: VK_ERROR_DEVICE_LOST with kernel log "[drm] GPU HANG: ecode 9:0:0x8ed9fff2, in ffmpeg_g [6451], reason: Hang on rcs0, action: reset". It runs on RADV and the output looks plausible, but it's nondeterministic somehow (checksums never match). I think that means the shader program must be racing or contain some undefined behaviour. > ... > + > +static int process_frames(AVFilterContext *avctx, AVVkFrame *out, AVVkFrame > *in) > +{ > +int err; > +AvgBlurVulkanContext *s = avctx->priv; > +int planes = av_pix_fmt_count_planes(s->vkctx.output_format); > + > +VkCommandBufferBeginInfo cmd_start = { > +.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, > +.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, > +}; > + > +VkComponentMapping null_map = { > +.r = VK_COMPONENT_SWIZZLE_IDENTITY, > +.g = VK_COMPONENT_SWIZZLE_IDENTITY, > +.b = VK_COMPONENT_SWIZZLE_IDENTITY, > +.a = VK_COMPONENT_SWIZZLE_IDENTITY, > +}; > + > +for (int i = 0; i < planes; i++) { > +RET(ff_vk_create_imageview(avctx, &s->input_images[i].imageView, in, > + > ff_vk_plane_rep_fmt(s->vkctx.input_format, i), > + ff_vk_aspect_flags(s->vkctx.input_format, > i), > + null_map, NULL)); > + > +RET(ff_vk_create_imageview(avctx, &s->output_images[i].imageView, > out, > + > ff_vk_plane_rep_fmt(s->vkctx.output_format, i), > + > ff_vk_aspect_flags(s->vkctx.output_format, i), > + null_map, NULL)); > + > +s->input_images[i].imageLayout = > VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; > +s->output_images[i].imageLayout = VK_IMAGE_LAYOUT_GENERAL; > +} Approximately this fragment seems to be common between all the filters - maybe it should be abstracted into vulkan.c? > + > +ff_vk_update_descriptor_set(avctx, 0); > + > +vkBeginCommandBuffer(s->exec.buf, &cmd_start); > + > +{ > +VkImageMemoryBarrier bar[2] = { > +{ > +.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, > +.srcAccessMask = 0, > +.dstAccessMask = VK_ACCESS_SHADER_READ_BIT, > +.oldLayout = in->layout, > +.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, > +.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, > +.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, > +.image = in->img, > +.subresourceRange.aspectMask = > ff_vk_aspect_flags(s->vkctx.input_format, -1), > +.subresourceRange.levelCount = 1, > +.subresourceRange.layerCount = 1, > +}, > +{ > +.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, > +.srcAccessMask = 0, > +.dstAccessMask = VK_ACCESS_SHADER_WRITE_BIT, > +.oldLayout = out->layout, > +.newLayout = VK_IMAGE_LAYOUT_GENERAL, > +.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, > +.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, > +.image = out->img, > +.subresourceRange.aspectMask = > ff_vk_aspect_flags(s->vkctx.output_format, -1), > +.subresourceRange.levelCount = 1, > +.subresourceRange.layerCount = 1, > +}, > +}; > + > +vkCmdPipelineBarrier(s->exec.buf, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, > +VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, > +0, NULL, 0, NULL, 2, bar); > + > +in->layout = bar[0].newLayout; > +in->access = bar[0].dstAccessMask; > + > +out->layout = bar[1].newLayout; > +out->access = bar[1].dstAccessMask; > +} > + > +vkCmdBindPipeline(s->exec.buf, VK_PIPELINE_BIND_POINT_COMPUTE, > s->vkctx.pipeline); > +vkCmdBindDe
Re: [FFmpeg-devel] [PATCH 5/6] lavfi: add a Vulkan scale filter
On 21/06/18 17:55, Rostislav Pehlivanov wrote: > Can convert to RGB using very fast fixed-function conversions. > > Signed-off-by: Rostislav Pehlivanov > --- > configure | 1 + > libavfilter/Makefile | 1 + > libavfilter/allfilters.c | 1 + > libavfilter/vf_scale_vulkan.c | 395 ++ > 4 files changed, 398 insertions(+) > create mode 100644 libavfilter/vf_scale_vulkan.c Would it be difficult to add support for RGB->YUV as well? Having YUV->RGB only limits the conversion use slightly, especially since it has no colourspace information so you can't trust something else to do the conversion in the opposite direction. From testing on ANV / Coffee Lake: * When doing non-scaling YUV420P->RGB0 conversion on ANV I get something funny on the bottom and right pixel edges of a 1280x720 frame, as if it's taking some unknown value from beyond the edge. * Scaling 1920x1080 -> 1280x720 from a mapped image seems to do something ugly with extra 8 pixels at the bottom. The image appears to be 1080 height everywhere inside FFmpeg, but somehow it has the bottom region included as a fill-down of the last line (very obvious with a diagonal line at the bottom of the frame). * I see some green bleeding in from the bottom in some YUV cases? Not sure how to characterise them. If you haven't seen this I can try to track down exactly when. No comments for the actual code. Thanks, - Mark ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/2] avcodec/indeo4: Check dimensions in decode_pic_hdr()
On Sun, Aug 26, 2018 at 04:20:01AM +0200, Michael Niedermayer wrote: > Fixes: Timeout > Fixes: > 9654/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_INDEO4_fuzzer-6289863463665664 > > Found-by: continuous fuzzing process > https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg > Signed-off-by: Michael Niedermayer > --- > libavcodec/indeo4.c | 8 > 1 file changed, 8 insertions(+) will apply patchset [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Rewriting code that is poorly written but fully understood is good. Rewriting code that one doesnt understand is a sign that one is less smart then the original author, trying to rewrite it will not make it better. signature.asc Description: PGP signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avcodec/wmv2dec: skip frames that have only skiped MBs
On Sun, Aug 26, 2018 at 04:29:15PM +0200, Michael Niedermayer wrote: > This requires us to pre-parse the skip data, as we want to > detect this before allocating all the arrays > > Fixes: Timeout > Fixes: > 9708/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_WMV2_fuzzer-5729709861109760 will apply [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB The greatest way to live with honor in this world is to be what we pretend to be. -- Socrates signature.asc Description: PGP signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/3] avcodec/ffv1dec_template: do not ignore the return code of decode_line()
On Mon, Aug 27, 2018 at 01:50:35AM +0200, Michael Niedermayer wrote: > Fixes: Timeout > Fixes: > 9710/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_FFV1_fuzzer-4918894635515904 > > Found-by: continuous fuzzing process > https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg > Signed-off-by: Michael Niedermayer > --- > libavcodec/ffv1dec_template.c | 10 +++--- > 1 file changed, 7 insertions(+), 3 deletions(-) will apply patchset [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Avoid a single point of failure, be that a person or equipment. signature.asc Description: PGP signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/2] avcodec/h264_refs: Detect more random access points which are not marked
On Fri, Aug 17, 2018 at 02:08:40AM +0200, Michael Niedermayer wrote: > Fixes: nature_360-7501616eb5eafca5-.mp4 > > Reported-by: Thierry Foucu > Signed-off-by: Michael Niedermayer > --- > libavcodec/h264_refs.c | 1 + > 1 file changed, 1 insertion(+) will apply [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB The greatest way to live with honor in this world is to be what we pretend to be. -- Socrates signature.asc Description: PGP signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 6/6] lavfi: add a Vulkan overlay filter
On 21/06/18 17:55, Rostislav Pehlivanov wrote: > Could be done in-plane with the main image but framesync segfaults. Is this framesync not working with hardware frames, so it tries to clone an image but can't? (I have had vague plans for a while to clean that up by adding an av_hwframe_clone() call to hwcontext and making the read/write refcounting work as expected, but there are few real use-cases for it so have yet to bother.) > Signed-off-by: Rostislav Pehlivanov > --- > configure | 1 + > libavfilter/Makefile| 1 + > libavfilter/allfilters.c| 1 + > libavfilter/vf_overlay_vulkan.c | 461 > 4 files changed, 464 insertions(+) > create mode 100644 libavfilter/vf_overlay_vulkan.c > > diff --git a/configure b/configure > index d1ceb9e38d..2edd4e36aa 100755 > --- a/configure > +++ b/configure > @@ -3370,6 +3370,7 @@ ocr_filter_deps="libtesseract" > ocv_filter_deps="libopencv" > openclsrc_filter_deps="opencl" > overlay_opencl_filter_deps="opencl" > +overlay_vulkan_filter_deps="vulkan libshaderc" 'q' < 'v' > overlay_qsv_filter_deps="libmfx" > overlay_qsv_filter_select="qsvvpp" > owdenoise_filter_deps="gpl" > diff --git a/libavfilter/Makefile b/libavfilter/Makefile > index 6e2d3681ec..c51add5cb4 100644 > --- a/libavfilter/Makefile > +++ b/libavfilter/Makefile > @@ -280,6 +280,7 @@ OBJS-$(CONFIG_OSCILLOSCOPE_FILTER) += > vf_datascope.o > OBJS-$(CONFIG_OVERLAY_FILTER)+= vf_overlay.o framesync.o > OBJS-$(CONFIG_OVERLAY_OPENCL_FILTER) += vf_overlay_opencl.o opencl.o > \ > opencl/overlay.o framesync.o > +OBJS-$(CONFIG_OVERLAY_VULKAN_FILTER) += vf_overlay_vulkan.o Also here. > OBJS-$(CONFIG_OVERLAY_QSV_FILTER)+= vf_overlay_qsv.o framesync.o > OBJS-$(CONFIG_OWDENOISE_FILTER) += vf_owdenoise.o > OBJS-$(CONFIG_PAD_FILTER)+= vf_pad.o > diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c > index ee58cc9eee..7c9ff0ab41 100644 > --- a/libavfilter/allfilters.c > +++ b/libavfilter/allfilters.c > @@ -269,6 +269,7 @@ extern AVFilter ff_vf_ocv; > extern AVFilter ff_vf_oscilloscope; > extern AVFilter ff_vf_overlay; > extern AVFilter ff_vf_overlay_opencl; > +extern AVFilter ff_vf_overlay_vulkan; And here. > extern AVFilter ff_vf_overlay_qsv; > extern AVFilter ff_vf_owdenoise; > extern AVFilter ff_vf_pad; > diff --git a/libavfilter/vf_overlay_vulkan.c b/libavfilter/vf_overlay_vulkan.c > new file mode 100644 > index 00..a7d8cc3cf2 > --- /dev/null > +++ b/libavfilter/vf_overlay_vulkan.c Code all looks fine. Are you planning to add alpha as well? ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 2/6] lavfi: add common Vulkan filtering code
On 21/06/18 17:55, Rostislav Pehlivanov wrote: > This commit adds a common code for use in Vulkan filters. It attempts > to ease the burden of writing Vulkan image filtering to a minimum, > which is pretty much a requirement considering how verbose the API is. > > It supports both compute and graphic pipelines and manages to abstract > the API to such a level there's no need to call any Vulkan functions > inside the init path of the code. Handling shader descriptors is probably > the bulk of the code, and despite the abstraction, it loses none of the > features for describing shader IO. > > In order to produce linkable shaders, it depends on the libshaderc > library (and depends on the latest stable version of it). This allows > for greater performance and flexibility than static built-in shaders > and also eliminates the cumbersome process of interfacing with glslang > to compile GLSL to SPIR-V. > > It's based off of the common opencl and provides similar interfaces for > filter pad init and config, with the addition that it also supports > in-place filtering. > > Signed-off-by: Rostislav Pehlivanov > --- > configure| 12 +- > libavfilter/vulkan.c | 1192 ++ > libavfilter/vulkan.h | 223 > 3 files changed, 1425 insertions(+), 2 deletions(-) > create mode 100644 libavfilter/vulkan.c > create mode 100644 libavfilter/vulkan.h > > diff --git a/configure b/configure > index 7623a1205a..97bd4225dc 100755 > --- a/configure > +++ b/configure > @@ -252,6 +252,7 @@ External library support: >--enable-librsvg enable SVG rasterization via librsvg [no] >--enable-librubberband enable rubberband needed for rubberband filter > [no] >--enable-librtmp enable RTMP[E] support via librtmp [no] > + --enable-libshaderc enable GLSL->SPIRV compilation via libshaderc [no] >--enable-libshineenable fixed-point MP3 encoding via libshine [no] >--enable-libsmbclientenable Samba protocol via libsmbclient [no] >--enable-libsnappy enable Snappy compression, needed for hap > encoding [no] > @@ -1709,6 +1710,7 @@ EXTERNAL_LIBRARY_LIST=" > libpulse > librsvg > librtmp > +libshaderc > libshine > libsmbclient > libsnappy > @@ -2228,6 +2230,7 @@ HAVE_LIST=" > opencl_dxva2 > opencl_vaapi_beignet > opencl_vaapi_intel_media > +shaderc_opt_perf > vulkan_drm_mod > perl > pod2man > @@ -3462,12 +3465,12 @@ avcodec_select="null_bsf" > avdevice_deps="avformat avcodec avutil" > avdevice_suggest="libm" > avfilter_deps="avutil" > -avfilter_suggest="libm" > +avfilter_suggest="libm libshaderc" > avformat_deps="avcodec avutil" > avformat_suggest="libm network zlib" > avresample_deps="avutil" > avresample_suggest="libm" > -avutil_suggest="clock_gettime ffnvcodec libm libdrm libmfx opencl user32 > vaapi videotoolbox corefoundation corevideo coremedia bcrypt" > +avutil_suggest="clock_gettime ffnvcodec libm libdrm libmfx opencl vulkan > user32 vaapi videotoolbox corefoundation corevideo coremedia bcrypt" > postproc_deps="avutil gpl" > postproc_suggest="libm" > swresample_deps="avutil" > @@ -6056,6 +6059,7 @@ enabled libpulse && require_pkg_config > libpulse libpulse pulse/pulseaud > enabled librsvg && require_pkg_config librsvg librsvg-2.0 > librsvg-2.0/librsvg/rsvg.h rsvg_handle_render_cairo > enabled librtmp && require_pkg_config librtmp librtmp > librtmp/rtmp.h RTMP_Socket > enabled librubberband && require_pkg_config librubberband "rubberband >= > 1.8.1" rubberband/rubberband-c.h rubberband_new -lstdc++ && append > librubberband_extralibs "-lstdc++" > +enabled libshaderc&& require libshaderc shaderc/shaderc.h > shaderc_compiler_initialize -lshaderc_shared > enabled libshine && require_pkg_config libshine shine > shine/layer3.h shine_encode_buffer > enabled libsmbclient && { check_pkg_config libsmbclient smbclient > libsmbclient.h smbc_init || > require libsmbclient libsmbclient.h smbc_init > -lsmbclient; } > @@ -6363,6 +6367,10 @@ enabled crystalhd && check_lib crystalhd "stdint.h > libcrystalhd/libcrystalhd_if. > enabled vulkan && > require_pkg_config vulkan "vulkan >= 1.1.73" "vulkan/vulkan.h" > vkCreateInstance > > +if enabled_all vulkan libshaderc ; then > +check_cc shaderc_opt_perf shaderc/shaderc.h "int t = > shaderc_optimization_level_performance" > +fi Is there really no way to do this without a configure test? A preprocessor version check? (Or requiring a recent libshaderc, given that there is no compatibility to maintain.) > + > if enabled_all vulkan libdrm ; then > check_cpp_condition vulkan_drm_mod vulkan/vulkan.h "defined > VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME" > fi > diff --git a/libavfilter/vulkan.c b/libavfilter/vulkan.c > new file mode 100644 > index 00..976e846fa3 > --- /dev/nul
Re: [FFmpeg-devel] [PATCH] libavfilter: Removes stored DNN models. Adds support for native backend model file format in tf backend. Removes scaling and conversion with libswscale and replaces input fo
Hi 2018-09-01 16:27 GMT-03:00 Sergey Lavrushkin : > Hello, > > Resending patch with fixes of sr filter and dnn module for review. Thanks for your work. I think it would be beter if you split this patch: one removing the stored data and one which adds the support for native model file in tf. Regarding the removal of swscale from the filter, given how it harms the usage raising the complexity for the user, it should not be removed. In the original patch thread I discussed it with Gyan Doshi which agreed keeping it, I also made sure the other, supposedly interested, devs were aware of the decision via IRC which noone cared to discuss further. Thus I consider the sws removal subject closed and for sure I'll not ask you to redo it. I apologize for requiring this extra work from you but I think it will benefit everyone interested in using sr filter. > > ___ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH v3 1/2] lavc, doc, configure: add libxavs2 video encoder wrapper
On Sun, Sep 02, 2018 at 12:58:38PM +0800, hwren wrote: > Signed-off-by: hwren > --- > Changelog | 1 + > configure | 4 + > doc/encoders.texi | 40 +++ > doc/general.texi | 14 +++ > libavcodec/Makefile| 1 + > libavcodec/allcodecs.c | 1 + > libavcodec/libxavs2.c | 320 > + > libavcodec/version.h | 2 +- > 8 files changed, 382 insertions(+), 1 deletion(-) > create mode 100644 libavcodec/libxavs2.c [...] > +static av_cold int xavs2_init(AVCodecContext *avctx) > +{ > +XAVS2EContext *cae= avctx->priv_data; > +int bit_depth; > + > +char str_bd[16] = {0}, str_iqp[16] = {0}, str_w[16] = {0}, str_h[16] = > {0}; > +char str_preset[16] = {0}, str_hr[16] = {0}, str_bf[16] = {0}; > +char str_iv[16] = {0}, str_TBR[16] = {0}, str_fr[16] = {0}; > + > +bit_depth = avctx->pix_fmt == AV_PIX_FMT_YUV420P ? 8 : 10; > + > +/* get API handler */ > +cae->api = xavs2_api_get(bit_depth); > + > +cae->param = cae->api->opt_alloc(); > + > +if (!cae->param) { > +av_log(avctx, AV_LOG_ERROR, "param alloc failed\n"); > +return AVERROR(EINVAL); > +} > + > +cae->api->opt_set2(cae->param,"rec","0"); > +cae->api->opt_set2(cae->param,"log","0"); > + > +av_strlcatf(str_w, sizeof(str_w), "%d", avctx->width); > +av_strlcatf(str_h, sizeof(str_h), "%d", avctx->height); > +av_strlcatf(str_bd, sizeof(str_bd), "%d", bit_depth); > +av_strlcatf(str_iqp, sizeof(str_iqp), "%d", cae->i_initial_qp); > + > +cae->api->opt_set2(cae->param,"width",str_w); > +cae->api->opt_set2(cae->param,"height",str_h); > +cae->api->opt_set2(cae->param, "initial_qp", str_iqp); > +cae->api->opt_set2(cae->param, "bitdepth", str_bd); > + > +/* preset level */ > +av_strlcatf(str_preset, sizeof(str_preset), "%d", cae->preset_level); > + > +cae->api->opt_set2(cae->param,"preset", str_preset); > +/* bframes */ > +av_log( avctx, AV_LOG_DEBUG, > +"HierarchicalReference %d, Number B Frames %d\n", > +cae->b_hierarchical_reference, cae->num_b_frames); > + > +av_strlcatf(str_hr, sizeof(str_hr), "%d", cae->b_hierarchical_reference); > +//av_strlcatf(str_bf, sizeof(str_bf), "%d", cae->num_b_frames); > +av_strlcatf(str_bf, sizeof(str_bf), "%d", avctx->max_b_frames); > + > +cae->api->opt_set2(cae->param, "hierarchical_ref", str_hr); > +cae->api->opt_set2(cae->param, "bframes", str_bf); > + > +if (cae->xavs2_opts) { > +AVDictionary *dict= NULL; > +AVDictionaryEntry *en = NULL; > + > +if (!av_dict_parse_string(&dict, cae->xavs2_opts, "=", ":", 0)) { > +while ((en = av_dict_get(dict, "", en, AV_DICT_IGNORE_SUFFIX))) { > + > +int i_value = isdigit(en->value[0]) ? atoi(en->value) : 0; this lacks validity checks, strtol() or similar may be a better choice [...] > +if ((cae->packet.len) && (cae->packet.state != XAVS2_STATE_FLUSH_END)){ > +av_new_packet(pkt, cae->packet.len); > + > +if (!pkt) { this is not checking for av_new_packet failure > +av_log(avctx, AV_LOG_ERROR, "packet alloc failed\n"); > +return AVERROR(EINVAL); > +} > + [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Let us carefully observe those good qualities wherein our enemies excel us and endeavor to excel them, by avoiding what is faulty, and imitating what is excellent in them. -- Plutarch signature.asc Description: PGP signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] avformat/libsrt: fix merge of payload_size option
Fixes a compile error and re-adds pkt_size as a url?option as well. Signed-off-by: Marton Balint --- libavformat/libsrt.c | 7 --- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libavformat/libsrt.c b/libavformat/libsrt.c index 9795e279e8..fbfd6ace83 100644 --- a/libavformat/libsrt.c +++ b/libavformat/libsrt.c @@ -309,8 +309,8 @@ static int libsrt_set_options_pre(URLContext *h, int fd) (s->peerlatency >= 0 && libsrt_setsockopt(h, fd, SRTO_PEERLATENCY, "SRTO_PEERLATENCY", &peerlatency, sizeof(peerlatency)) < 0) || (s->tlpktdrop >= 0 && libsrt_setsockopt(h, fd, SRTO_TLPKTDROP, "SRTO_TLPKDROP", &s->tlpktdrop, sizeof(s->tlpktdrop)) < 0) || (s->nakreport >= 0 && libsrt_setsockopt(h, fd, SRTO_NAKREPORT, "SRTO_NAKREPORT", &s->nakreport, sizeof(s->nakreport)) < 0) || -(connect_timeout >= 0 && libsrt_setsockopt(h, fd, SRTO_CONNTIMEO, "SRTO_CONNTIMEO", &connect_timeout, sizeof(connect_timeout)) <0 )) || -(s->payload_size >= 0 && libsrt_setsockopt(h, fd, SRTO_PAYLOADSIZE, "SRTO_PAYLOADSIZE", &s->payload_size, sizeof(s->payload_size)) < 0) { +(connect_timeout >= 0 && libsrt_setsockopt(h, fd, SRTO_CONNTIMEO, "SRTO_CONNTIMEO", &connect_timeout, sizeof(connect_timeout)) <0 ) || +(s->payload_size >= 0 && libsrt_setsockopt(h, fd, SRTO_PAYLOADSIZE, "SRTO_PAYLOADSIZE", &s->payload_size, sizeof(s->payload_size)) < 0)) { return AVERROR(EIO); } return 0; @@ -507,7 +507,8 @@ static int libsrt_open(URLContext *h, const char *uri, int flags) if (av_find_info_tag(buf, sizeof(buf), "connect_timeout", p)) { s->connect_timeout = strtol(buf, NULL, 10); } -if (av_find_info_tag(buf, sizeof(buf), "payload_size", p)) { +if (av_find_info_tag(buf, sizeof(buf), "payload_size", p) || +av_find_info_tag(buf, sizeof(buf), "pkt_size", p)) { s->payload_size = strtol(buf, NULL, 10); } if (av_find_info_tag(buf, sizeof(buf), "mode", p)) { -- 2.16.4 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 1/2] hwcontext_vaapi: Add DRM format mappings for YUV420P (libva I420)
--- Needed to import YUV420P frames exported from Vulkan. libavutil/hwcontext_vaapi.c | 6 ++ 1 file changed, 6 insertions(+) diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c index a2387d4fc4..cc3739f6ec 100644 --- a/libavutil/hwcontext_vaapi.c +++ b/libavutil/hwcontext_vaapi.c @@ -935,6 +935,12 @@ static const struct { DRM_MAP(NV12, 2, DRM_FORMAT_R8, DRM_FORMAT_RG88), #endif DRM_MAP(NV12, 1, DRM_FORMAT_NV12), +#ifdef VA_FOURCC_I420 +#ifdef DRM_FORMAT_R8 +DRM_MAP(I420, 3, DRM_FORMAT_R8, DRM_FORMAT_R8, DRM_FORMAT_R8), +#endif +DRM_MAP(I420, 1, DRM_FORMAT_YUV420), +#endif #if defined(VA_FOURCC_P010) && defined(DRM_FORMAT_R16) DRM_MAP(P010, 2, DRM_FORMAT_R16, DRM_FORMAT_RG1616), #endif -- 2.18.0 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 2/2] hwcontext_vaapi: Zero unused fields of external buffer descriptor
--- Though nothing should look directly as these fields having random stack data in them is confusing for debugging. libavutil/hwcontext_vaapi.c | 16 +--- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c index cc3739f6ec..9dc1d30d37 100644 --- a/libavutil/hwcontext_vaapi.c +++ b/libavutil/hwcontext_vaapi.c @@ -1039,13 +1039,15 @@ static int vaapi_map_from_drm(AVHWFramesContext *src_fc, AVFrame *dst, av_assert0(i < FF_ARRAY_ELEMS(vaapi_format_map)); buffer_handle = desc->objects[0].fd; -buffer_desc.pixel_format = va_fourcc; -buffer_desc.width= src_fc->width; -buffer_desc.height = src_fc->height; -buffer_desc.data_size= desc->objects[0].size; -buffer_desc.buffers = &buffer_handle; -buffer_desc.num_buffers = 1; -buffer_desc.flags= 0; +buffer_desc = (VASurfaceAttribExternalBuffers) { +.pixel_format = va_fourcc, +.width= src_fc->width, +.height = src_fc->height, +.data_size= desc->objects[0].size, +.buffers = &buffer_handle, +.num_buffers = 1, +.flags= 0, +}; k = 0; for (i = 0; i < desc->nb_layers; i++) { -- 2.18.0 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avformat/libsrt: fix merge of payload_size option
On 9/2/2018 8:58 PM, Marton Balint wrote: > Fixes a compile error and re-adds pkt_size as a url?option as well. Sorry about that. I made sure to keep the logic as you added it a few days ago instead of adopting the one from libav, including keeping the option name you added and the default of -1, but i failed to notice this. Feel free to push. > > Signed-off-by: Marton Balint > --- > libavformat/libsrt.c | 7 --- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/libavformat/libsrt.c b/libavformat/libsrt.c > index 9795e279e8..fbfd6ace83 100644 > --- a/libavformat/libsrt.c > +++ b/libavformat/libsrt.c > @@ -309,8 +309,8 @@ static int libsrt_set_options_pre(URLContext *h, int fd) > (s->peerlatency >= 0 && libsrt_setsockopt(h, fd, SRTO_PEERLATENCY, > "SRTO_PEERLATENCY", &peerlatency, sizeof(peerlatency)) < 0) || > (s->tlpktdrop >= 0 && libsrt_setsockopt(h, fd, SRTO_TLPKTDROP, > "SRTO_TLPKDROP", &s->tlpktdrop, sizeof(s->tlpktdrop)) < 0) || > (s->nakreport >= 0 && libsrt_setsockopt(h, fd, SRTO_NAKREPORT, > "SRTO_NAKREPORT", &s->nakreport, sizeof(s->nakreport)) < 0) || > -(connect_timeout >= 0 && libsrt_setsockopt(h, fd, SRTO_CONNTIMEO, > "SRTO_CONNTIMEO", &connect_timeout, sizeof(connect_timeout)) <0 )) || > -(s->payload_size >= 0 && libsrt_setsockopt(h, fd, SRTO_PAYLOADSIZE, > "SRTO_PAYLOADSIZE", &s->payload_size, sizeof(s->payload_size)) < 0) { > +(connect_timeout >= 0 && libsrt_setsockopt(h, fd, SRTO_CONNTIMEO, > "SRTO_CONNTIMEO", &connect_timeout, sizeof(connect_timeout)) <0 ) || > +(s->payload_size >= 0 && libsrt_setsockopt(h, fd, SRTO_PAYLOADSIZE, > "SRTO_PAYLOADSIZE", &s->payload_size, sizeof(s->payload_size)) < 0)) { > return AVERROR(EIO); > } > return 0; > @@ -507,7 +507,8 @@ static int libsrt_open(URLContext *h, const char *uri, > int flags) > if (av_find_info_tag(buf, sizeof(buf), "connect_timeout", p)) { > s->connect_timeout = strtol(buf, NULL, 10); > } > -if (av_find_info_tag(buf, sizeof(buf), "payload_size", p)) { > +if (av_find_info_tag(buf, sizeof(buf), "payload_size", p) || > +av_find_info_tag(buf, sizeof(buf), "pkt_size", p)) { > s->payload_size = strtol(buf, NULL, 10); > } > if (av_find_info_tag(buf, sizeof(buf), "mode", p)) { > ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] frame: Simplify the video allocation
From: Luca Barbato Merged-by: James Almer --- This is the next merge in the queue. It's a critical part of the AVFrame API, so even if FATE passes I'd rather have others look at it and test in case something breaks. The only difference compared to the libav commit is the "32 - 1" padding per plane when allocating the buffer, which was only in our tree. libavutil/frame.c | 28 +++- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index deb9b6f334..f072baa916 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -211,7 +211,7 @@ void av_frame_free(AVFrame **frame) static int get_video_buffer(AVFrame *frame, int align) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format); -int ret, i; +int ret, i, padded_height; if (!desc) return AVERROR(EINVAL); @@ -236,24 +236,18 @@ static int get_video_buffer(AVFrame *frame, int align) frame->linesize[i] = FFALIGN(frame->linesize[i], align); } -for (i = 0; i < 4 && frame->linesize[i]; i++) { -int h = FFALIGN(frame->height, 32); -if (i == 1 || i == 2) -h = AV_CEIL_RSHIFT(h, desc->log2_chroma_h); +padded_height = FFALIGN(frame->height, 32) + 32 /* STRIDE_ALIGN */ - 1; +if ((ret = av_image_fill_pointers(frame->data, frame->format, padded_height, + NULL, frame->linesize)) < 0) +return ret; -frame->buf[i] = av_buffer_alloc(frame->linesize[i] * h + 16 + 16/*STRIDE_ALIGN*/ - 1); -if (!frame->buf[i]) -goto fail; +frame->buf[0] = av_buffer_alloc(ret); +if (!frame->buf[0]) +goto fail; -frame->data[i] = frame->buf[i]->data; -} -if (desc->flags & AV_PIX_FMT_FLAG_PAL || desc->flags & FF_PSEUDOPAL) { -av_buffer_unref(&frame->buf[1]); -frame->buf[1] = av_buffer_alloc(AVPALETTE_SIZE); -if (!frame->buf[1]) -goto fail; -frame->data[1] = frame->buf[1]->data; -} +if (av_image_fill_pointers(frame->data, frame->format, padded_height, + frame->buf[0]->data, frame->linesize) < 0) +goto fail; frame->extended_data = frame->data; -- 2.18.0 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH v4 2/2] lavf: add raw avs2 muxer
Signed-off-by: hwren --- libavformat/allformats.c | 1 + libavformat/rawenc.c | 13 + 2 files changed, 14 insertions(+) diff --git a/libavformat/allformats.c b/libavformat/allformats.c index adcc8d9..c17cdc2 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -76,6 +76,7 @@ extern AVInputFormat ff_avisynth_demuxer; extern AVOutputFormat ff_avm2_muxer; extern AVInputFormat ff_avr_demuxer; extern AVInputFormat ff_avs_demuxer; +extern AVOutputFormat ff_avs2_muxer; extern AVInputFormat ff_bethsoftvid_demuxer; extern AVInputFormat ff_bfi_demuxer; extern AVInputFormat ff_bintext_demuxer; diff --git a/libavformat/rawenc.c b/libavformat/rawenc.c index 809ca23..993d232 100644 --- a/libavformat/rawenc.c +++ b/libavformat/rawenc.c @@ -117,6 +117,19 @@ AVOutputFormat ff_aptx_hd_muxer = { }; #endif +#if CONFIG_AVS2_MUXER +AVOutputFormat ff_avs2_muxer = { +.name = "avs2", +.long_name = NULL_IF_CONFIG_SMALL("raw AVS2-P2/IEEE1857.4 video"), +.extensions= "avs,avs2", +.audio_codec = AV_CODEC_ID_NONE, +.video_codec = AV_CODEC_ID_AVS2, +.write_header = force_one_stream, +.write_packet = ff_raw_write_packet, +.flags = AVFMT_NOTIMESTAMPS, +}; +#endif + #if CONFIG_CAVSVIDEO_MUXER AVOutputFormat ff_cavsvideo_muxer = { .name = "cavsvideo", -- 2.7.4 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH v4 1/2] lavc, doc, configure: add libxavs2 video encoder wrapper
Signed-off-by: hwren --- Changelog | 1 + configure | 4 + doc/encoders.texi | 40 +++ doc/general.texi | 14 +++ libavcodec/Makefile| 1 + libavcodec/allcodecs.c | 1 + libavcodec/libxavs2.c | 319 + libavcodec/version.h | 2 +- 8 files changed, 381 insertions(+), 1 deletion(-) create mode 100644 libavcodec/libxavs2.c diff --git a/Changelog b/Changelog index 0975fee..8377956 100644 --- a/Changelog +++ b/Changelog @@ -21,6 +21,7 @@ version : - Brooktree ProSumer video decoder - MatchWare Screen Capture Codec decoder - WinCam Motion Video decoder +- AVS2 video encoder via libxavs2 version 4.0: diff --git a/configure b/configure index 8bbcd53..c439d2a 100755 --- a/configure +++ b/configure @@ -280,6 +280,7 @@ External library support: --enable-libx264 enable H.264 encoding via x264 [no] --enable-libx265 enable HEVC encoding via x265 [no] --enable-libxavs enable AVS encoding via xavs [no] + --enable-libxavs2enable AVS2 encoding via xavs2 [no] --enable-libxcb enable X11 grabbing using XCB [autodetect] --enable-libxcb-shm enable X11 grabbing shm communication [autodetect] --enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect] @@ -1667,6 +1668,7 @@ EXTERNAL_LIBRARY_GPL_LIST=" libx264 libx265 libxavs +libxavs2 libxvid " @@ -3132,6 +3134,7 @@ libx264rgb_encoder_deps="libx264 x264_csp_bgr" libx264rgb_encoder_select="libx264_encoder" libx265_encoder_deps="libx265" libxavs_encoder_deps="libxavs" +libxavs2_encoder_deps="libxavs2" libxvid_encoder_deps="libxvid" libzvbi_teletext_decoder_deps="libzvbi" vapoursynth_demuxer_deps="vapoursynth" @@ -6164,6 +6167,7 @@ enabled libx264 && { check_pkg_config libx264 x264 "stdint.h x264.h" x enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get && require_cpp_condition x265.h "X265_BUILD >= 68" enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode "-lxavs $pthreads_extralibs $libm_extralibs" +enabled libxavs2 && require_pkg_config libxavs2 "xavs2 >= 1.2.77" "stdint.h xavs2.h" xavs2_api_get enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore enabled libzimg && require_pkg_config libzimg "zimg >= 2.7.0" zimg.h zimg_get_api_version enabled libzmq&& require_pkg_config libzmq libzmq zmq.h zmq_ctx_new diff --git a/doc/encoders.texi b/doc/encoders.texi index 7b09575..0b4dfb3 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -2726,6 +2726,46 @@ Reduces detail but attempts to preserve color at extremely low bitrates. @end table +@section libxavs2 + +xavs2 AVS2-P2/IEEE1857.4 encoder wrapper. + +This encoder requires the presence of the libxavs2 headers and library +during configuration. You need to explicitly configure the build with +@option{--enable-libxavs2}. + +@subsection Options + +@table @option +@item i_lcurow_threads +Set the number of parallel threads for rows from 1 to 8 (default 5). + +@item i_initial_qp +Set the xavs2 quantization parameter from 1 to 63 (default 34). + +@item preset_level +Set the Speed level from 0 to 9 (default 0). + +@item intra_period +Set the Intra period from 3 to 100 (default 4). + +@item hierarchical_ref +Set the hierarchical reference from 0 to 1 (default 1). + +@item num_bframes +Set the number of B frames from 0 to 15 (default 7). + +@item xavs2-params +Set xavs2 options using a list of @var{key}=@var{value} couples separated +by ":". + +For example to specify libxavs2 encoding options with @option{-xavs2-params}: + +@example +ffmpeg -i input -c:v libxavs2 -xavs2-params preset_level=5 output.avs2 +@end example +@end table + @c man end VIDEO ENCODERS @chapter Subtitles Encoders diff --git a/doc/general.texi b/doc/general.texi index 06f7a78..05f7bcd9 100644 --- a/doc/general.texi +++ b/doc/general.texi @@ -17,6 +17,20 @@ for more formats. None of them are used by default, their use has to be explicitly requested by passing the appropriate flags to @command{./configure}. +@section libxavs2 + +FFmpeg can make use of the xavs2 library for AVS2-P2/IEEE1857.4 video encoding. + +Go to @url{https://github.com/pkuvcl/xavs2} and follow the instructions for +installing the library. Then pass @code{--enable-libxavs2} to configure to +enable it. + +@float NOTE +libxavs2 is under the GNU Public License Version 2 or later +(see @url{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html} for +details), you must upgrade FFmpeg's license to GPL in order to use it. +@end float + @section libdavs2 FFmpeg can make use of the davs2 library for AVS2-P2/IEEE1857.4 video decoding. diff --git a/libavcodec/Makefile b/libavcodec/Makefile index f8673f0..bf17bf7 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -992,6 +992,7 @@ OBJS-$(CONFIG_LIBX262_ENC
[FFmpeg-devel] [PATCH] avcodec: [loongson] fix bug of mss2-wmv failed in fate test.
Failed case: mss2-wmv In following functions, pmullh was used to multiply two 16-bit data, this will cause data overflow. 1. ff_vc1_inv_trans_8x8_dc_mmi 2. ff_vc1_inv_trans_8x8_mmi 3. ff_vc1_inv_trans_8x4_mmi 4. ff_vc1_inv_trans_4x8_mmi 5. ff_vc1_inv_trans_4x4_mmi --- libavcodec/mips/vc1dsp_mmi.c | 1493 +++--- 1 file changed, 957 insertions(+), 536 deletions(-) diff --git a/libavcodec/mips/vc1dsp_mmi.c b/libavcodec/mips/vc1dsp_mmi.c index ec2fdca..d78e0c3 100644 --- a/libavcodec/mips/vc1dsp_mmi.c +++ b/libavcodec/mips/vc1dsp_mmi.c @@ -27,118 +27,99 @@ #include "hpeldsp_mips.h" #include "libavutil/mips/mmiutils.h" - -#define VC1_INV_TRANCS_8_STEP1_MMI(fp1, fp2, fp3, fp4,\ - o1,o2,o3,o4, \ - t1,t2,t3,t4, \ - ff_p1, ff_p2, ff_p3, ff_p4) \ -"pmullh "#t1" , "#fp1" , "#ff_p1"\n\t" \ -"pmullh "#t2" , "#fp2" , "#ff_p2"\n\t" \ -"pmullh "#t3" , "#fp3" , "#ff_p3"\n\t" \ -"pmullh "#t4" , "#fp4" , "#ff_p4"\n\t" \ -"paddh "#o1" , "#t1" , "#t2" \n\t" \ -"paddh "#o1" , "#o1" , "#t3" \n\t" \ -"paddh "#o1" , "#o1" , "#t4" \n\t" \ -\ -"pmullh "#t1" , "#fp1" , "#ff_p2"\n\t" \ -"pmullh "#t2" , "#fp2" , "#ff_p4"\n\t" \ -"pmullh "#t3" , "#fp3" , "#ff_p1"\n\t" \ -"pmullh "#t4" , "#fp4" , "#ff_p3"\n\t" \ -"psubh "#o2" , "#t1" , "#t2" \n\t" \ -"psubh "#o2" , "#o2" , "#t3" \n\t" \ -"psubh "#o2" , "#o2" , "#t4" \n\t" \ -\ -"pmullh "#t1" , "#fp1" , "#ff_p3"\n\t" \ -"pmullh "#t2" , "#fp2" , "#ff_p1"\n\t" \ -"pmullh "#t3" , "#fp3" , "#ff_p4"\n\t" \ -"pmullh "#t4" , "#fp4" , "#ff_p2"\n\t" \ -"psubh "#o3" , "#t1" , "#t2" \n\t" \ -"paddh "#o3" , "#o3" , "#t3" \n\t" \ -"paddh "#o3" , "#o3" , "#t4" \n\t" \ -\ -"pmullh "#t1" , "#fp1" , "#ff_p4"\n\t" \ -"pmullh "#t2" , "#fp2" , "#ff_p3"\n\t" \ -"pmullh "#t3" , "#fp3" , "#ff_p2"\n\t" \ -"pmullh "#t4" , "#fp4" , "#ff_p1"\n\t" \ -"psubh "#o4" , "#t1" , "#t2" \n\t" \ -"paddh "#o4" , "#o4" , "#t3" \n\t" \ -"psubh "#o4" , "#o4" , "#t4" \n\t" - - -#define VC1_INV_TRANCS_8_STEP2_MMI(fp1, fp2, fp3, fp4,\ - fp5, fp6, fp7, fp8,\ - o1,o2,o3,o4, \ - ff_p1, ff_p2, ff_p3, ff_pw) \ -"paddh "#fp5" , "#fp1" , "#fp2" \n\t" \ -"psubh "#fp6" , "#fp1" , "#fp2" \n\t" \ -"pmullh "#fp5" , "#fp5" , "#ff_p1"\n\t" \ -"pmullh "#fp6" , "#fp6" , "#ff_p1"\n\t" \ -"paddh "#fp5" , "#fp5" , "#ff_pw"\n\t" \ -"paddh "#fp6" , "#fp6" , "#ff_pw"\n\t" \ -\ -"pmullh "#fp1" , "#fp3" , "#ff_p2"\n\t" \ -"pmullh "#fp2" , "#fp4" , "#ff_p3"\n\t" \ -"pmullh "#fp3" , "#fp3" , "#ff_p3"\n\t" \ -"pmullh "#fp4" , "#fp4" , "#ff_p2"\n\t" \ -"paddh "#fp7" , "#fp1" , "#fp2" \n\t" \ -"psubh "#fp8" , "#fp3" , "#fp4" \n\t" \ +#define VC1_INV_TRANCS_8_TYPE1(o1, o2, r1, r2, r3, r4, c0) \ +"li %[tmp0],"#r1" \n\t" \ +"mtc1 %[tmp0],%[ftmp13]
[FFmpeg-devel] [PATCH] avformat/hlsenc: rename option from use_localtime to strftime
fix ticket: 7393 indent option name to segment Signed-off-by: Steven Liu --- doc/muxers.texi | 26 -- libavformat/hlsenc.c | 22 ++ libavformat/version.h | 7 +-- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/doc/muxers.texi b/doc/muxers.texi index 268c152023..f18543e83d 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -617,7 +617,7 @@ This example will produce the playlist, @file{out.m3u8}, and segment files: but only the file name part without any path info will be contained in the m3u8 segment list. Should a relative path be specified, the path of the created segment files will be relative to the current working directory. -When use_localtime_mkdir is set, the whole expanded value of @var{filename} will be written into the m3u8 segment list. +When strftime_mkdir is set, the whole expanded value of @var{filename} will be written into the m3u8 segment list. When @code{var_stream_map} is set with two or more variant streams, the @var{filename} pattern must contain the string "%v", this string specifies @@ -646,34 +646,40 @@ This example will produce the playlists segment file sets: @file{vs1/file_000.ts}, @file{vs1/file_001.ts}, @file{vs1/file_002.ts}, etc. @item use_localtime +Same as strftime option, will be deprecated. + +@item strftime Use strftime() on @var{filename} to expand the segment filename with localtime. The segment number is also available in this mode, but to use it, you need to specify second_level_segment_index hls_flag and %%d will be the specifier. @example -ffmpeg -i in.nut -use_localtime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8 +ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8 @end example This example will produce the playlist, @file{out.m3u8}, and segment files: @file{file-20160215-1455569023.ts}, @file{file-20160215-1455569024.ts}, etc. Note: On some systems/environments, the @code{%s} specifier is not available. See @code{strftime()} documentation. @example -ffmpeg -i in.nut -use_localtime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8 +ffmpeg -i in.nut -strftime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8 @end example This example will produce the playlist, @file{out.m3u8}, and segment files: @file{file-20160215-0001.ts}, @file{file-20160215-0002.ts}, etc. @item use_localtime_mkdir -Used together with -use_localtime, it will create all subdirectories which +Same as strftime_mkdir option, will be deprecated . + +@item strftime_mkdir +Used together with -strftime_mkdir, it will create all subdirectories which is expanded in @var{filename}. @example -ffmpeg -i in.nut -use_localtime 1 -use_localtime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8 +ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8 @end example This example will create a directory 201560215 (if it does not exist), and then produce the playlist, @file{out.m3u8}, and segment files: @file{20160215/file-20160215-1455569023.ts}, @file{20160215/file-20160215-1455569024.ts}, etc. @example -ffmpeg -i in.nut -use_localtime 1 -use_localtime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8 +ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8 @end example This example will create a directory hierarchy 2016/02/15 (if any of them do not exist), and then produce the playlist, @file{out.m3u8}, and segment files: @@ -833,24 +839,24 @@ Generate @code{EXT-X-PROGRAM-DATE-TIME} tags. @item second_level_segment_index Makes it possible to use segment indexes as %%d in hls_segment_filename expression -besides date/time values when use_localtime is on. +besides date/time values when strftime is on. To get fixed width numbers with trailing zeroes, %%0xd format is available where x is the required width. @item second_level_segment_size Makes it possible to use segment sizes (counted in bytes) as %%s in hls_segment_filename -expression besides date/time values when use_localtime is on. +expression besides date/time values when strftime is on. To get fixed width numbers with trailing zeroes, %%0xs format is available where x is the required width. @item second_level_segment_duration Makes it possible to use segment duration (calculated in microseconds) as %%t in hls_segment_filename -expression besides date/time values when use_localtime is on. +expression besides date/time values when strftime is on. To get fixed width numbers with trailing zeroes, %%0xt format is available where x is the required width. @example ffmpeg -i sample.mpeg \ -f hls -hls_time 3 -hls_list_size 5 \ -hls_flags second_level_segment_index+second_level_segment_size+second_level_segment_duration \ - -use_localtime 1 -use
Re: [FFmpeg-devel] [PATCH] ffmpeg: block output == input for files
On 31-08-2018 10:26 AM, Gyan Doshi wrote: On 31-08-2018 09:57 AM, Gyan Doshi wrote: On 31-08-2018 04:28 AM, Marton Balint wrote: Is there any real use case when same source and destination works, so the option can be used? If not, then just make ffmpeg fail, like the cp command fails for same source and destination. I am against adding an option if it has no known use. Via the file protocol, not that I know of. Will remove. Gyan Revised patch attached. Ping. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] ffplay: add option to allow custom jump interval
On 02-09-2018 02:57 PM, Marton Balint wrote: Change the option name to seek_interval then, -seek alone seems a bit confusing to me because it might mean to do initial seek in the input before playing the file. Haven't changed code much, kept basic protection against invalid input (val < 0) I don't think the guards are necessary, it might make sense for somebody to reverse the meaning of left and right keys, therefore use a negative value. v3: option renamed; sign guard removed. Gyan From 94424f1b9501e0550a2d395381f15d89e00a52f9 Mon Sep 17 00:00:00 2001 From: Gyan Doshi Date: Sat, 1 Sep 2018 11:33:17 +0530 Subject: [PATCH v3] ffplay: add option to allow custom seek interval At present, left and right keys are hardcoded to seek by 10 seconds. --- doc/ffplay.texi | 2 ++ fftools/ffplay.c | 8 +--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/doc/ffplay.texi b/doc/ffplay.texi index c95956ea17..dcb86ce13c 100644 --- a/doc/ffplay.texi +++ b/doc/ffplay.texi @@ -60,6 +60,8 @@ Play @var{duration} seconds of audio/video. see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}. @item -bytes Seek by bytes. +@item -seek_interval +Set custom interval, in seconds, for seeking using left/right keys. Default is 10 seconds. @item -nodisp Disable graphical display. @item -noborder diff --git a/fftools/ffplay.c b/fftools/ffplay.c index 5d9121e5b7..e375a32ec2 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -319,6 +319,7 @@ static int video_disable; static int subtitle_disable; static const char* wanted_stream_spec[AVMEDIA_TYPE_NB] = {0}; static int seek_by_bytes = -1; +static float seek_interval = 10; static int display_disable; static int borderless; static int startup_volume = 100; @@ -3343,10 +3344,10 @@ static void event_loop(VideoState *cur_stream) seek_chapter(cur_stream, -1); break; case SDLK_LEFT: -incr = -10.0; +incr = seek_interval ? -seek_interval : -10.0; goto do_seek; case SDLK_RIGHT: -incr = 10.0; +incr = seek_interval ? seek_interval : 10.0; goto do_seek; case SDLK_UP: incr = 60.0; @@ -3582,6 +3583,7 @@ static const OptionDef options[] = { { "ss", HAS_ARG, { .func_arg = opt_seek }, "seek to a given position in seconds", "pos" }, { "t", HAS_ARG, { .func_arg = opt_duration }, "play \"duration\" seconds of audio/video", "duration" }, { "bytes", OPT_INT | HAS_ARG, { &seek_by_bytes }, "seek by bytes 0=off 1=on -1=auto", "val" }, +{ "seek_interval", OPT_FLOAT | HAS_ARG, { &seek_interval }, "set seek interval for left/right keys, in seconds", "seconds" }, { "nodisp", OPT_BOOL, { &display_disable }, "disable graphical display" }, { "noborder", OPT_BOOL, { &borderless }, "borderless window" }, { "volume", OPT_INT | HAS_ARG, { &startup_volume}, "set startup volume 0=min 100=max", "volume" }, @@ -3652,7 +3654,7 @@ void show_help_default(const char *opt, const char *arg) "c cycle program\n" "w cycle video filters or show modes\n" "s activate frame-step mode\n" - "left/right seek backward/forward 10 seconds\n" + "left/right seek backward/forward 10 seconds or to custom interval if -seek_interval is set\n" "down/up seek backward/forward 1 minute\n" "page down/page up seek backward/forward 10 minutes\n" "right mouse click seek to percentage in file corresponding to fraction of width\n" -- 2.18.0___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel