Recherche avancée

Médias (3)

Mot : - Tags -/collection

Autres articles (35)

  • Supporting all media types

    13 avril 2011, par

    Unlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)

  • Librairies et logiciels spécifiques aux médias

    10 décembre 2010, par

    Pour un fonctionnement correct et optimal, plusieurs choses sont à prendre en considération.
    Il est important, après avoir installé apache2, mysql et php5, d’installer d’autres logiciels nécessaires dont les installations sont décrites dans les liens afférants. Un ensemble de librairies multimedias (x264, libtheora, libvpx) utilisées pour l’encodage et le décodage des vidéos et sons afin de supporter le plus grand nombre de fichiers possibles. Cf. : ce tutoriel ; FFMpeg avec le maximum de décodeurs et (...)

  • Emballe médias : à quoi cela sert ?

    4 février 2011, par

    Ce plugin vise à gérer des sites de mise en ligne de documents de tous types.
    Il crée des "médias", à savoir : un "média" est un article au sens SPIP créé automatiquement lors du téléversement d’un document qu’il soit audio, vidéo, image ou textuel ; un seul document ne peut être lié à un article dit "média" ;

Sur d’autres sites (5204)

  • Errors in compiling FFmpeg for windows10/aarch64 using Microsoft Visual Studio 2017 Preview edition

    29 octobre 2018, par Narsinga

    I am trying to compile FFmpeg (the Chromium version) for Windows10/Aarch64 configuration using Microsoft Visual Studio 2017 Preview community edition. I am running into errors in the assembly files as copied below (highlighted few errors). I believe FFmpeg is working for Linux/Aarch64 configuration (probably using GNU assembler) already in which case the same assembly code should also work for Microsoft ARM Macro Assembler as well. Please let me know if I am missing anything here and any pointers to help resolve the errors.

    D :\Work\Chromium_FFmpeg\chromium\src>ninja -C out\ARM64V8 third_party\ffmpeg
    ninja : Entering directory `out\ARM64V8’
    [2/9] ASM obj/third_party/ffmpeg/ffmpeg_internal/autorename_libavcodec_aarch64_fft_neon.obj
    FAILED : obj/third_party/ffmpeg/ffmpeg_internal/autorename_libavcodec_aarch64_fft_neon.obj
    D :/Work/Chromium_FFmpeg/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py asm-wrapper environment.arm64 armasm64.exe /Foobj/third_party/ffmpeg/ffmpeg_internal/autorename_libavcodec_aarch64_fft_neon.obj ../../third_party/ffmpeg/libavcodec/aarch64/autorename_libavcodec_aarch64_fft_neon.S
    Microsoft (R) ARM Macro Assembler Version 14.16.26926.0 for 64 bits
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\autorename_libavcodec_aarch64_fft_neon.S(1) : error A2003 : improper line syntax : /
    // File automatically generated. See crbug.com/495833.
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\autorename_libavcodec_aarch64_fft_neon.S(2) : error A2230 : Illegal preprocessor directive ; only "#line [filename]" is recognized
    include "fft_neon.S"
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\autorename_libavcodec_aarch64_fft_neon.S(3) : warning A4045 : missing END directive
    include "fft_neon.S"
    .
    .
    .
    [6/9] ASM obj/third_party/ffmpeg/ffmpeg_internal/mpegaudiodsp_neon.obj
    FAILED : obj/third_party/ffmpeg/ffmpeg_internal/mpegaudiodsp_neon.obj
    D :/Work/Chromium_FFmpeg/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py asm-wrapper environment.arm64 armasm64.exe /Foobj/third_party/ffmpeg/ffmpeg_internal/mpegaudiodsp_neon.obj ../../third_party/ffmpeg/libavcodec/aarch64/mpegaudiodsp_neon.S
    Microsoft (R) ARM Macro Assembler Version 14.16.26926.0 for 64 bits
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(1) : error A2003 : improper line syntax : /
    /*
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(2) : error A2079 : improper line syntax ; symbol expected
    * Copyright (c) 2014 Janne Grunau
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(3) : error A2079 : improper line syntax ; symbol expected
    *
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(4) : error A2079 : improper line syntax ; symbol expected
    * This file is part of FFmpeg.
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(5) : error A2079 : improper line syntax ; symbol expected
    *
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(6) : error A2079 : improper line syntax ; symbol expected
    * FFmpeg is free software ; you can redistribute it and/or
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(7) : error A2079 : improper line syntax ; symbol expected
    * modify it under the terms of the GNU Lesser General Public
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(8) : error A2079 : improper line syntax ; symbol expected
    * License as published by the Free Software Foundation ; either
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(9) : error A2079 : improper line syntax ; symbol expected
    * version 2.1 of the License, or (at your option) any later version.
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(10) : error A2079 : improper line syntax ; symbol expected
    *
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(11) : error A2079 : improper line syntax ; symbol expected
    * FFmpeg is distributed in the hope that it will be useful,
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(12) : error A2079 : improper line syntax ; symbol expected
    * but WITHOUT ANY WARRANTY ; without even the implied warranty of
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(13) : error A2079 : improper line syntax ; symbol expected
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(14) : error A2079 : improper line syntax ; symbol expected
    * Lesser General Public License for more details.
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(15) : error A2079 : improper line syntax ; symbol expected
    *
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(16) : error A2079 : improper line syntax ; symbol expected
    * You should have received a copy of the GNU Lesser General Public
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(17) : error A2079 : improper line syntax ; symbol expected
    * License along with FFmpeg ; if not, write to the Free Software
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(18) : error A2079 : improper line syntax ; symbol expected
    * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(19) : error A2079 : improper line syntax ; symbol expected
    */
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(21) : error A2230 : Illegal preprocessor directive ; only "#line [filename]" is recognized
    include "libavutil/aarch64/asm.S"
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(23) : error A2230 : Illegal preprocessor directive ; only "#line [filename]" is recognized
    define FRAC_BITS 23 // fractional bits for sb_samples and dct
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(24) : error A2230 : Illegal preprocessor directive ; only "#line [filename]" is recognized
    define WFRAC_BITS 16 // fractional bits for window
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(25) : error A2230 : Illegal preprocessor directive ; only "#line [filename]" is recognized
    define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 15)
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(27) : error A2034 : unknown opcode : tbl_rev128_s
    const tbl_rev128_s, align=4
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(28) : error A2034 : unknown opcode : .
    .byte 12, 13, 14, 15
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(29) : error A2034 : unknown opcode : .
    .byte 8, 9, 10, 11
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(30) : error A2034 : unknown opcode : .
    .byte 4, 5, 6, 7
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(31) : error A2034 : unknown opcode : .
    .byte 0, 1, 2, 3
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(34) : error A2003 : improper line syntax : .
    .macro apply_window type, st
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(35) : error A2034 : unknown opcode : ff_mpadsp_apply_window_
    function ff_mpadsp_apply_window_\type()_neon, export=1
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(42) : error A2034 : unknown opcode : movrel
    movrel x15, tbl_rev128_s
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(44) : error A2003 : improper line syntax : .
    .ifc \type, fixed
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(46) : error A2003 : improper line syntax : .
    .else
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(48) : error A2003 : improper line syntax : .
    .endif
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(53) : error A2173 : syntax error in expression
    sub x5, x5, x4 // samples2
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(53) : error A2003 : improper line syntax : Trouble parsing operands
    sub x5, x5, x4 // samples2
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(54) : error A2173 : syntax error in expression
    neg x13, x4 // -incr
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(54) : error A2003 : improper line syntax : Trouble parsing operands
    neg x13, x4 // -incr
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(56) : error A2003 : improper line syntax : .
    .ifc \type, fixed
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(57) : error A2173 : syntax error in expression
    ld1r v16.2s, [x2] // dither_state
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(57) : error A2003 : improper line syntax : Trouble parsing operands
    ld1r v16.2s, [x2] // dither_state
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(60) : error A2061 : illegal expression type ; expected absolute numeric
    movi v30.2d, #(1/ 64 * 8 * sizeof(int32_t)
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(101) : error A2003 : improper line syntax : Trouble parsing operands
    sub x10, x10, #64<<5 // 64 * 8 * sizeof(int32_t)
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(103) : error A2003 : improper line syntax : .
    .ifc \type, fixed
    D :\Work\Chromium_FFmpeg\chromium\src\third_party\ffmpeg\libavcodec\aarch64\mpegaudiodsp_neon.S(105) : error A2034 : unknown opcode : ext
    ext v28.16b, v29.16b, v28.16b, #8
    .
    .
    .

  • Video creation with the most recent ffmpeg API (2017)

    19 octobre 2022, par ar2015

    I have started learning how to work with ffmpeg which has a suffering deprecation of all tutorial and available examples such as this.

    &#xA;&#xA;

    I am looking for a code which creates an output video.

    &#xA;&#xA;

    Unfortunately, most of good examples are focusing on reading from a file rather than creating one.

    &#xA;&#xA;

    Here, I have found a deprecated example and I spent a long time to fix its errors until it became like this :

    &#xA;&#xA;

    #include <iostream>&#xA;#include &#xA;#include &#xA;#include <string>&#xA;&#xA;extern "C" {&#xA;        #include <libavcodec></libavcodec>avcodec.h>&#xA;        #include <libavformat></libavformat>avformat.h>&#xA;        #include <libswscale></libswscale>swscale.h>&#xA;        #include <libavformat></libavformat>avio.h>&#xA;        #include <libavutil></libavutil>opt.h>&#xA;}&#xA;&#xA;#define WIDTH 800&#xA;#define HEIGHT 480&#xA;#define STREAM_NB_FRAMES  ((int)(STREAM_DURATION * FRAME_RATE))&#xA;#define FRAME_RATE 24&#xA;#define PIXEL_FORMAT AV_PIX_FMT_YUV420P&#xA;#define STREAM_DURATION 5.0 //seconds&#xA;#define BIT_RATE 400000&#xA;&#xA;#define AV_CODEC_FLAG_GLOBAL_HEADER (1 &lt;&lt; 22)&#xA;#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER&#xA;#define AVFMT_RAWPICTURE 0x0020&#xA;&#xA;using namespace std;&#xA;&#xA;static int sws_flags = SWS_BICUBIC;&#xA;&#xA;AVFrame *picture, *tmp_picture;&#xA;uint8_t *video_outbuf;&#xA;int frame_count, video_outbuf_size;&#xA;&#xA;&#xA;/****** IF LINUX ******/&#xA;inline int sprintf_s(char* buffer, size_t sizeOfBuffer, const char* format, ...)&#xA;{&#xA;    va_list ap;&#xA;    va_start(ap, format);&#xA;    int result = vsnprintf(buffer, sizeOfBuffer, format, ap);&#xA;    va_end(ap);&#xA;    return result;&#xA;}&#xA;&#xA;/****** IF LINUX ******/&#xA;template&#xA;inline int sprintf_s(char (&amp;buffer)[sizeOfBuffer], const char* format, ...)&#xA;{&#xA;    va_list ap;&#xA;    va_start(ap, format);&#xA;    int result = vsnprintf(buffer, sizeOfBuffer, format, ap);&#xA;    va_end(ap);&#xA;    return result;&#xA;}&#xA;&#xA;&#xA;static void closeVideo(AVFormatContext *oc, AVStream *st)&#xA;{&#xA;    avcodec_close(st->codec);&#xA;    av_free(picture->data[0]);&#xA;    av_free(picture);&#xA;    if (tmp_picture)&#xA;    {&#xA;        av_free(tmp_picture->data[0]);&#xA;        av_free(tmp_picture);&#xA;    }&#xA;    av_free(video_outbuf);&#xA;}&#xA;&#xA;static AVFrame *alloc_picture(enum AVPixelFormat pix_fmt, int width, int height)&#xA;{&#xA;    AVFrame *picture;&#xA;    uint8_t *picture_buf;&#xA;    int size;&#xA;&#xA;    picture = av_frame_alloc();&#xA;    if(!picture)&#xA;        return NULL;&#xA;    size = avpicture_get_size(pix_fmt, width, height);&#xA;    picture_buf = (uint8_t*)(av_malloc(size));&#xA;    if (!picture_buf)&#xA;    {&#xA;        av_free(picture);&#xA;        return NULL;&#xA;    }&#xA;    avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);&#xA;    return picture;&#xA;}&#xA;&#xA;static void openVideo(AVFormatContext *oc, AVStream *st)&#xA;{&#xA;    AVCodec *codec;&#xA;    AVCodecContext *c;&#xA;&#xA;    c = st->codec;&#xA;    if(c->idct_algo == AV_CODEC_ID_H264)&#xA;        av_opt_set(c->priv_data, "preset", "slow", 0);&#xA;&#xA;    codec = avcodec_find_encoder(c->codec_id);&#xA;    if(!codec)&#xA;    {&#xA;        std::cout &lt;&lt; "Codec not found." &lt;&lt; std::endl;&#xA;        std::cin.get();std::cin.get();exit(1);&#xA;    }&#xA;&#xA;    if(codec->id == AV_CODEC_ID_H264)&#xA;        av_opt_set(c->priv_data, "preset", "medium", 0);&#xA;&#xA;    if(avcodec_open2(c, codec, NULL) &lt; 0)&#xA;    {&#xA;        std::cout &lt;&lt; "Could not open codec." &lt;&lt; std::endl;&#xA;        std::cin.get();std::cin.get();exit(1);&#xA;    }&#xA;    video_outbuf = NULL;&#xA;    if(!(oc->oformat->flags &amp; AVFMT_RAWPICTURE))&#xA;    {&#xA;        video_outbuf_size = 200000;&#xA;        video_outbuf = (uint8_t*)(av_malloc(video_outbuf_size));&#xA;    }&#xA;    picture = alloc_picture(c->pix_fmt, c->width, c->height);&#xA;    if(!picture)&#xA;    {&#xA;        std::cout &lt;&lt; "Could not allocate picture" &lt;&lt; std::endl;&#xA;        std::cin.get();exit(1);&#xA;    }&#xA;    tmp_picture = NULL;&#xA;    if(c->pix_fmt != AV_PIX_FMT_YUV420P)&#xA;    {&#xA;        tmp_picture = alloc_picture(AV_PIX_FMT_YUV420P, WIDTH, HEIGHT);&#xA;        if(!tmp_picture)&#xA;        {&#xA;            std::cout &lt;&lt; " Could not allocate temporary picture" &lt;&lt; std::endl;&#xA;            std::cin.get();exit(1);&#xA;        }&#xA;    }&#xA;}&#xA;&#xA;&#xA;static AVStream* addVideoStream(AVFormatContext *context, enum AVCodecID codecID)&#xA;{&#xA;    AVCodecContext *codec;&#xA;    AVStream *stream;&#xA;    stream = avformat_new_stream(context, NULL);&#xA;    if(!stream)&#xA;    {&#xA;        std::cout &lt;&lt; "Could not alloc stream." &lt;&lt; std::endl;&#xA;        std::cin.get();exit(1);&#xA;    }&#xA;&#xA;    codec = stream->codec;&#xA;    codec->codec_id = codecID;&#xA;    codec->codec_type = AVMEDIA_TYPE_VIDEO;&#xA;&#xA;    // sample rate&#xA;    codec->bit_rate = BIT_RATE;&#xA;    // resolution must be a multiple of two&#xA;    codec->width = WIDTH;&#xA;    codec->height = HEIGHT;&#xA;    codec->time_base.den = FRAME_RATE; // stream fps&#xA;    codec->time_base.num = 1;&#xA;    codec->gop_size = 12; // intra frame every twelve frames at most&#xA;    codec->pix_fmt = PIXEL_FORMAT;&#xA;    if(codec->codec_id == AV_CODEC_ID_MPEG2VIDEO)&#xA;        codec->max_b_frames = 2; // for testing, B frames&#xA;&#xA;    if(codec->codec_id == AV_CODEC_ID_MPEG1VIDEO)&#xA;        codec->mb_decision = 2;&#xA;&#xA;    if(context->oformat->flags &amp; AVFMT_GLOBALHEADER)&#xA;        codec->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;&#xA;&#xA;    return stream;&#xA;}&#xA;&#xA;static void fill_yuv_image(AVFrame *pict, int frame_index, int width, int height)&#xA;{&#xA;    int x, y, i;&#xA;    i = frame_index;&#xA;&#xA;    /* Y */&#xA;    for(y=0;ydata[0][y * pict->linesize[0] &#x2B; x] = x &#x2B; y &#x2B; i * 3;&#xA;        }&#xA;    }&#xA;&#xA;    /* Cb and Cr */&#xA;    for(y=0;y<height></height>2;y&#x2B;&#x2B;) {&#xA;        for(x=0;x<width></width>2;x&#x2B;&#x2B;) {&#xA;            pict->data[1][y * pict->linesize[1] &#x2B; x] = 128 &#x2B; y &#x2B; i * 2;&#xA;            pict->data[2][y * pict->linesize[2] &#x2B; x] = 64 &#x2B; x &#x2B; i * 5;&#xA;        }&#xA;    }&#xA;}&#xA;&#xA;static void write_video_frame(AVFormatContext *oc, AVStream *st)&#xA;{&#xA;    int out_size, ret;&#xA;    AVCodecContext *c;&#xA;    static struct SwsContext *img_convert_ctx;&#xA;    c = st->codec;&#xA;&#xA;    if(frame_count >= STREAM_NB_FRAMES)&#xA;    {&#xA;&#xA;    }&#xA;    else&#xA;    {&#xA;        if(c->pix_fmt != AV_PIX_FMT_YUV420P)&#xA;        {&#xA;            if(img_convert_ctx = NULL)&#xA;            {&#xA;                img_convert_ctx = sws_getContext(WIDTH, HEIGHT, AV_PIX_FMT_YUV420P, WIDTH, HEIGHT,&#xA;                                                c->pix_fmt, sws_flags, NULL, NULL, NULL);&#xA;                if(img_convert_ctx == NULL)&#xA;                {&#xA;                    std::cout &lt;&lt; "Cannot initialize the conversion context" &lt;&lt; std::endl;&#xA;                    std::cin.get();exit(1);&#xA;                }&#xA;            }&#xA;            fill_yuv_image(tmp_picture, frame_count, WIDTH, HEIGHT);&#xA;            sws_scale(img_convert_ctx, tmp_picture->data, tmp_picture->linesize, 0, HEIGHT,&#xA;                        picture->data, picture->linesize);&#xA;        }&#xA;        else&#xA;        {&#xA;            fill_yuv_image(picture, frame_count, WIDTH, HEIGHT);&#xA;        }&#xA;    }&#xA;&#xA;    if (oc->oformat->flags &amp; AVFMT_RAWPICTURE)&#xA;    {&#xA;        /* raw video case. The API will change slightly in the near&#xA;           futur for that */&#xA;        AVPacket pkt;&#xA;        av_init_packet(&amp;pkt);&#xA;&#xA;        pkt.flags |= AV_PKT_FLAG_KEY;&#xA;        pkt.stream_index= st->index;&#xA;        pkt.data= (uint8_t *)picture;&#xA;        pkt.size= sizeof(AVPicture);&#xA;&#xA;        ret = av_interleaved_write_frame(oc, &amp;pkt);&#xA;    }&#xA;    else&#xA;    {&#xA;        /* encode the image */&#xA;        out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, picture);&#xA;        /* if zero size, it means the image was buffered */&#xA;        if (out_size > 0)&#xA;        {&#xA;            AVPacket pkt;&#xA;            av_init_packet(&amp;pkt);&#xA;&#xA;            if (c->coded_frame->pts != AV_NOPTS_VALUE)&#xA;                pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);&#xA;            if(c->coded_frame->key_frame)&#xA;                pkt.flags |= AV_PKT_FLAG_KEY;&#xA;            pkt.stream_index= st->index;&#xA;            pkt.data= video_outbuf;&#xA;            pkt.size= out_size;&#xA;            /* write the compressed frame in the media file */&#xA;            ret = av_interleaved_write_frame(oc, &amp;pkt);&#xA;        } else {&#xA;            ret = 0;&#xA;        }&#xA;    }&#xA;    if (ret != 0) {&#xA;        std::cout &lt;&lt; "Error while writing video frames" &lt;&lt; std::endl;&#xA;        std::cin.get();exit(1);&#xA;    }&#xA;    frame_count&#x2B;&#x2B;;&#xA;}&#xA;&#xA;int main ( int argc, char *argv[] )&#xA;{&#xA;    const char* filename = "test.h264";&#xA;    AVOutputFormat *outputFormat;&#xA;    AVFormatContext *context;&#xA;    AVCodecContext *codec;&#xA;    AVStream *videoStream;&#xA;    double videoPTS;&#xA;&#xA;    // init libavcodec, register all codecs and formats&#xA;    av_register_all(); &#xA;    // auto detect the output format from the name&#xA;    outputFormat = av_guess_format(NULL, filename, NULL);&#xA;    if(!outputFormat)&#xA;    {&#xA;        std::cout &lt;&lt; "Cannot guess output format! Using mpeg!" &lt;&lt; std::endl;&#xA;        std::cin.get();&#xA;        outputFormat = av_guess_format(NULL, "h263" , NULL);&#xA;    }&#xA;    if(!outputFormat)&#xA;    {&#xA;        std::cout &lt;&lt; "Could not find suitable output format." &lt;&lt; std::endl;&#xA;        std::cin.get();exit(1);&#xA;    }&#xA;&#xA;    context = avformat_alloc_context();&#xA;    if(!context)&#xA;    {&#xA;        std::cout &lt;&lt; "Cannot allocate avformat memory." &lt;&lt; std::endl;&#xA;        std::cin.get();exit(1);&#xA;    }&#xA;    context->oformat = outputFormat;&#xA;    sprintf_s(context->filename, sizeof(context->filename), "%s", filename);&#xA;    std::cout &lt;&lt; "Is &#x27;" &lt;&lt; context->filename &lt;&lt; "&#x27; = &#x27;" &lt;&lt; filename &lt;&lt; "&#x27;" &lt;&lt; std::endl;&#xA;&#xA;&#xA;    videoStream = NULL;&#xA;    outputFormat->audio_codec = AV_CODEC_ID_NONE;&#xA;    videoStream = addVideoStream(context, outputFormat->video_codec);&#xA;&#xA;    /* still needed?&#xA;    if(av_set_parameters(context, NULL) &lt; 0)&#xA;    {&#xA;        std::cout &lt;&lt; "Invalid output format parameters." &lt;&lt; std::endl;&#xA;        exit(0);&#xA;    }*/&#xA;&#xA;    av_dump_format(context, 0, filename, 1);&#xA;&#xA;    if(videoStream)&#xA;        openVideo(context, videoStream);&#xA;&#xA;    if(!outputFormat->flags &amp; AVFMT_NOFILE)&#xA;    {&#xA;        if(avio_open(&amp;context->pb, filename, AVIO_FLAG_READ_WRITE) &lt; 0)&#xA;        {&#xA;            std::cout &lt;&lt; "Could not open " &lt;&lt; filename &lt;&lt; std::endl;&#xA;            std::cin.get();exit(1);&#xA;        }&#xA;    }&#xA;&#xA;    avformat_write_header(context, 0);&#xA;&#xA;    while(true)&#xA;    {&#xA;        if(videoStream)&#xA;            videoPTS = (double) videoStream->pts.val * videoStream->time_base.num / videoStream->time_base.den;&#xA;        else&#xA;            videoPTS = 0.;&#xA;&#xA;        if((!videoStream || videoPTS >= STREAM_DURATION))&#xA;        {&#xA;            break;&#xA;        }&#xA;        write_video_frame(context, videoStream);&#xA;    }&#xA;    av_write_trailer(context);&#xA;    if(videoStream)&#xA;        closeVideo(context, videoStream);&#xA;    for(int i = 0; i &lt; context->nb_streams; i&#x2B;&#x2B;)&#xA;    {&#xA;        av_freep(&amp;context->streams[i]->codec);&#xA;        av_freep(&amp;context->streams[i]);&#xA;    }&#xA;&#xA;    if(!(outputFormat->flags &amp; AVFMT_NOFILE))&#xA;    {&#xA;        avio_close(context->pb);&#xA;    }&#xA;    av_free(context);&#xA;    std::cin.get();&#xA;    return 0;&#xA;}&#xA;</string></iostream>

    &#xA;&#xA;

    Compile :

    &#xA;&#xA;

    g&#x2B;&#x2B; -I ./FFmpeg/ video.cpp -L fflibs -lavcodec -lavformat&#xA;

    &#xA;&#xA;

    The code comes with two errors :

    &#xA;&#xA;

    video.cpp:249:84: error: ‘avcodec_encode_video’ was not declared in this scope&#xA;         out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, picture);&#xA;                                                                                    ^&#xA;&#xA;&#xA;video.cpp: In function ‘int main(int, char**)’:&#xA;video.cpp:342:46: error: ‘AVStream {aka struct AVStream}’ has no member named ‘pts’&#xA;             videoPTS = (double) videoStream->pts.val * videoStream->time_base.num / videoStream->time_base.den;&#xA;                                              ^&#xA;

    &#xA;&#xA;

    and a huge number of warnings for deprecation.

    &#xA;&#xA;

    video.cpp: In function ‘void closeVideo(AVFormatContext*, AVStream*)’:&#xA;video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     avcodec_close(st->codec);&#xA;                       ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     avcodec_close(st->codec);&#xA;                       ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     avcodec_close(st->codec);&#xA;                       ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp: In function ‘AVFrame* alloc_picture(AVPixelFormat, int, int)’:&#xA;video.cpp:80:12: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     size = avpicture_get_size(pix_fmt, width, height);&#xA;            ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here&#xA; int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);&#xA;     ^&#xA;video.cpp:80:12: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     size = avpicture_get_size(pix_fmt, width, height);&#xA;            ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here&#xA; int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);&#xA;     ^&#xA;video.cpp:80:53: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     size = avpicture_get_size(pix_fmt, width, height);&#xA;                                                     ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here&#xA; int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);&#xA;     ^&#xA;video.cpp:87:5: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);&#xA;     ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here&#xA; int avpicture_fill(AVPicture *picture, const uint8_t *ptr,&#xA;     ^&#xA;video.cpp:87:5: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);&#xA;     ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here&#xA; int avpicture_fill(AVPicture *picture, const uint8_t *ptr,&#xA;     ^&#xA;video.cpp:87:78: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);&#xA;                                                                              ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here&#xA; int avpicture_fill(AVPicture *picture, const uint8_t *ptr,&#xA;     ^&#xA;video.cpp: In function ‘void openVideo(AVFormatContext*, AVStream*)’:&#xA;video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp: In function ‘AVStream* addVideoStream(AVFormatContext*, AVCodecID)’:&#xA;video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     codec = stream->codec;&#xA;                     ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     codec = stream->codec;&#xA;                     ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     codec = stream->codec;&#xA;                     ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp: In function ‘void write_video_frame(AVFormatContext*, AVStream*)’:&#xA;video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if (c->coded_frame->pts != AV_NOPTS_VALUE)&#xA;                    ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if (c->coded_frame->pts != AV_NOPTS_VALUE)&#xA;                    ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if (c->coded_frame->pts != AV_NOPTS_VALUE)&#xA;                    ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;                 pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);&#xA;                                          ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;                 pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);&#xA;                                          ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;                 pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);&#xA;                                          ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if(c->coded_frame->key_frame)&#xA;                   ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if(c->coded_frame->key_frame)&#xA;                   ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if(c->coded_frame->key_frame)&#xA;                   ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;         av_freep(&amp;context->streams[i]->codec);&#xA;                                        ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;         av_freep(&amp;context->streams[i]->codec);&#xA;                                        ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;         av_freep(&amp;context->streams[i]->codec);&#xA;                                        ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:337:38: warning: ignoring return value of ‘int avformat_write_header(AVFormatContext*, AVDictionary**)’, declared with attribute warn_unused_result [-Wunused-result]&#xA;     avformat_write_header(context, 0);&#xA;                                      ^&#xA;

    &#xA;&#xA;

    I have also defined a few macros to redefine those who have been omited. In a modern ffmpeg API, they must be replaced.

    &#xA;&#xA;

    Could someone please help me solving errors and deprecation warnings to comply with recent ffmpeg API ?

    &#xA;

  • Video creation with a recent ffmpeg API (2017)

    16 novembre 2017, par ar2015

    I have started learning how to work with ffmpeg which has a suffering deprecation of all tutorial and available examples such as this.

    I am looking for a code which creates an output video.

    Unfortunately, most of good examples are focusing on reading from a file rather than creating one.

    Here, I have found a deprecated example and I spent a long time to fix its errors until it became like this :

    #include <iostream>
    #include
    #include
    #include <string>

    extern "C" {
           #include <libavcodec></libavcodec>avcodec.h>
           #include <libavformat></libavformat>avformat.h>
           #include <libswscale></libswscale>swscale.h>
           #include <libavformat></libavformat>avio.h>
           #include <libavutil></libavutil>opt.h>
    }

    #define WIDTH 800
    #define HEIGHT 480
    #define STREAM_NB_FRAMES  ((int)(STREAM_DURATION * FRAME_RATE))
    #define FRAME_RATE 24
    #define PIXEL_FORMAT AV_PIX_FMT_YUV420P
    #define STREAM_DURATION 5.0 //seconds
    #define BIT_RATE 400000

    #define AV_CODEC_FLAG_GLOBAL_HEADER (1 &lt;&lt; 22)
    #define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
    #define AVFMT_RAWPICTURE 0x0020

    using namespace std;

    static int sws_flags = SWS_BICUBIC;

    AVFrame *picture, *tmp_picture;
    uint8_t *video_outbuf;
    int frame_count, video_outbuf_size;


    /****** IF LINUX ******/
    inline int sprintf_s(char* buffer, size_t sizeOfBuffer, const char* format, ...)
    {
       va_list ap;
       va_start(ap, format);
       int result = vsnprintf(buffer, sizeOfBuffer, format, ap);
       va_end(ap);
       return result;
    }

    /****** IF LINUX ******/
    template
    inline int sprintf_s(char (&amp;buffer)[sizeOfBuffer], const char* format, ...)
    {
       va_list ap;
       va_start(ap, format);
       int result = vsnprintf(buffer, sizeOfBuffer, format, ap);
       va_end(ap);
       return result;
    }


    static void closeVideo(AVFormatContext *oc, AVStream *st)
    {
       avcodec_close(st->codec);
       av_free(picture->data[0]);
       av_free(picture);
       if (tmp_picture)
       {
           av_free(tmp_picture->data[0]);
           av_free(tmp_picture);
       }
       av_free(video_outbuf);
    }

    static AVFrame *alloc_picture(enum AVPixelFormat pix_fmt, int width, int height)
    {
       AVFrame *picture;
       uint8_t *picture_buf;
       int size;

       picture = av_frame_alloc();
       if(!picture)
           return NULL;
       size = avpicture_get_size(pix_fmt, width, height);
       picture_buf = (uint8_t*)(av_malloc(size));
       if (!picture_buf)
       {
           av_free(picture);
           return NULL;
       }
       avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);
       return picture;
    }

    static void openVideo(AVFormatContext *oc, AVStream *st)
    {
       AVCodec *codec;
       AVCodecContext *c;

       c = st->codec;
       if(c->idct_algo == AV_CODEC_ID_H264)
           av_opt_set(c->priv_data, "preset", "slow", 0);

       codec = avcodec_find_encoder(c->codec_id);
       if(!codec)
       {
           std::cout &lt;&lt; "Codec not found." &lt;&lt; std::endl;
           std::cin.get();std::cin.get();exit(1);
       }

       if(codec->id == AV_CODEC_ID_H264)
           av_opt_set(c->priv_data, "preset", "medium", 0);

       if(avcodec_open2(c, codec, NULL) &lt; 0)
       {
           std::cout &lt;&lt; "Could not open codec." &lt;&lt; std::endl;
           std::cin.get();std::cin.get();exit(1);
       }
       video_outbuf = NULL;
       if(!(oc->oformat->flags &amp; AVFMT_RAWPICTURE))
       {
           video_outbuf_size = 200000;
           video_outbuf = (uint8_t*)(av_malloc(video_outbuf_size));
       }
       picture = alloc_picture(c->pix_fmt, c->width, c->height);
       if(!picture)
       {
           std::cout &lt;&lt; "Could not allocate picture" &lt;&lt; std::endl;
           std::cin.get();exit(1);
       }
       tmp_picture = NULL;
       if(c->pix_fmt != AV_PIX_FMT_YUV420P)
       {
           tmp_picture = alloc_picture(AV_PIX_FMT_YUV420P, WIDTH, HEIGHT);
           if(!tmp_picture)
           {
               std::cout &lt;&lt; " Could not allocate temporary picture" &lt;&lt; std::endl;
               std::cin.get();exit(1);
           }
       }
    }


    static AVStream* addVideoStream(AVFormatContext *context, enum AVCodecID codecID)
    {
       AVCodecContext *codec;
       AVStream *stream;
       stream = avformat_new_stream(context, NULL);
       if(!stream)
       {
           std::cout &lt;&lt; "Could not alloc stream." &lt;&lt; std::endl;
           std::cin.get();exit(1);
       }

       codec = stream->codec;
       codec->codec_id = codecID;
       codec->codec_type = AVMEDIA_TYPE_VIDEO;

       // sample rate
       codec->bit_rate = BIT_RATE;
       // resolution must be a multiple of two
       codec->width = WIDTH;
       codec->height = HEIGHT;
       codec->time_base.den = FRAME_RATE; // stream fps
       codec->time_base.num = 1;
       codec->gop_size = 12; // intra frame every twelve frames at most
       codec->pix_fmt = PIXEL_FORMAT;
       if(codec->codec_id == AV_CODEC_ID_MPEG2VIDEO)
           codec->max_b_frames = 2; // for testing, B frames

       if(codec->codec_id == AV_CODEC_ID_MPEG1VIDEO)
           codec->mb_decision = 2;

       if(context->oformat->flags &amp; AVFMT_GLOBALHEADER)
           codec->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;

       return stream;
    }

    static void fill_yuv_image(AVFrame *pict, int frame_index, int width, int height)
    {
       int x, y, i;
       i = frame_index;

       /* Y */
       for(y=0;ydata[0][y * pict->linesize[0] + x] = x + y + i * 3;
           }
       }

       /* Cb and Cr */
       for(y=0;y<height></height>2;y++) {
           for(x=0;x<width></width>2;x++) {
               pict->data[1][y * pict->linesize[1] + x] = 128 + y + i * 2;
               pict->data[2][y * pict->linesize[2] + x] = 64 + x + i * 5;
           }
       }
    }

    static void write_video_frame(AVFormatContext *oc, AVStream *st)
    {
       int out_size, ret;
       AVCodecContext *c;
       static struct SwsContext *img_convert_ctx;
       c = st->codec;

       if(frame_count >= STREAM_NB_FRAMES)
       {

       }
       else
       {
           if(c->pix_fmt != AV_PIX_FMT_YUV420P)
           {
               if(img_convert_ctx = NULL)
               {
                   img_convert_ctx = sws_getContext(WIDTH, HEIGHT, AV_PIX_FMT_YUV420P, WIDTH, HEIGHT,
                                                   c->pix_fmt, sws_flags, NULL, NULL, NULL);
                   if(img_convert_ctx == NULL)
                   {
                       std::cout &lt;&lt; "Cannot initialize the conversion context" &lt;&lt; std::endl;
                       std::cin.get();exit(1);
                   }
               }
               fill_yuv_image(tmp_picture, frame_count, WIDTH, HEIGHT);
               sws_scale(img_convert_ctx, tmp_picture->data, tmp_picture->linesize, 0, HEIGHT,
                           picture->data, picture->linesize);
           }
           else
           {
               fill_yuv_image(picture, frame_count, WIDTH, HEIGHT);
           }
       }

       if (oc->oformat->flags &amp; AVFMT_RAWPICTURE)
       {
           /* raw video case. The API will change slightly in the near
              futur for that */
           AVPacket pkt;
           av_init_packet(&amp;pkt);

           pkt.flags |= AV_PKT_FLAG_KEY;
           pkt.stream_index= st->index;
           pkt.data= (uint8_t *)picture;
           pkt.size= sizeof(AVPicture);

           ret = av_interleaved_write_frame(oc, &amp;pkt);
       }
       else
       {
           /* encode the image */
           out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, picture);
           /* if zero size, it means the image was buffered */
           if (out_size > 0)
           {
               AVPacket pkt;
               av_init_packet(&amp;pkt);

               if (c->coded_frame->pts != AV_NOPTS_VALUE)
                   pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
               if(c->coded_frame->key_frame)
                   pkt.flags |= AV_PKT_FLAG_KEY;
               pkt.stream_index= st->index;
               pkt.data= video_outbuf;
               pkt.size= out_size;
               /* write the compressed frame in the media file */
               ret = av_interleaved_write_frame(oc, &amp;pkt);
           } else {
               ret = 0;
           }
       }
       if (ret != 0) {
           std::cout &lt;&lt; "Error while writing video frames" &lt;&lt; std::endl;
           std::cin.get();exit(1);
       }
       frame_count++;
    }

    int main ( int argc, char *argv[] )
    {
       const char* filename = "test.h264";
       AVOutputFormat *outputFormat;
       AVFormatContext *context;
       AVCodecContext *codec;
       AVStream *videoStream;
       double videoPTS;

       // init libavcodec, register all codecs and formats
       av_register_all();
       // auto detect the output format from the name
       outputFormat = av_guess_format(NULL, filename, NULL);
       if(!outputFormat)
       {
           std::cout &lt;&lt; "Cannot guess output format! Using mpeg!" &lt;&lt; std::endl;
           std::cin.get();
           outputFormat = av_guess_format(NULL, "h263" , NULL);
       }
       if(!outputFormat)
       {
           std::cout &lt;&lt; "Could not find suitable output format." &lt;&lt; std::endl;
           std::cin.get();exit(1);
       }

       context = avformat_alloc_context();
       if(!context)
       {
           std::cout &lt;&lt; "Cannot allocate avformat memory." &lt;&lt; std::endl;
           std::cin.get();exit(1);
       }
       context->oformat = outputFormat;
       sprintf_s(context->filename, sizeof(context->filename), "%s", filename);
       std::cout &lt;&lt; "Is '" &lt;&lt; context->filename &lt;&lt; "' = '" &lt;&lt; filename &lt;&lt; "'" &lt;&lt; std::endl;


       videoStream = NULL;
       outputFormat->audio_codec = AV_CODEC_ID_NONE;
       videoStream = addVideoStream(context, outputFormat->video_codec);

       /* still needed?
       if(av_set_parameters(context, NULL) &lt; 0)
       {
           std::cout &lt;&lt; "Invalid output format parameters." &lt;&lt; std::endl;
           exit(0);
       }*/

       av_dump_format(context, 0, filename, 1);

       if(videoStream)
           openVideo(context, videoStream);

       if(!outputFormat->flags &amp; AVFMT_NOFILE)
       {
           if(avio_open(&amp;context->pb, filename, AVIO_FLAG_READ_WRITE) &lt; 0)
           {
               std::cout &lt;&lt; "Could not open " &lt;&lt; filename &lt;&lt; std::endl;
               std::cin.get();exit(1);
           }
       }

       avformat_write_header(context, 0);

       while(true)
       {
           if(videoStream)
               videoPTS = (double) videoStream->pts.val * videoStream->time_base.num / videoStream->time_base.den;
           else
               videoPTS = 0.;

           if((!videoStream || videoPTS >= STREAM_DURATION))
           {
               break;
           }
           write_video_frame(context, videoStream);
       }
       av_write_trailer(context);
       if(videoStream)
           closeVideo(context, videoStream);
       for(int i = 0; i &lt; context->nb_streams; i++)
       {
           av_freep(&amp;context->streams[i]->codec);
           av_freep(&amp;context->streams[i]);
       }

       if(!(outputFormat->flags &amp; AVFMT_NOFILE))
       {
           avio_close(context->pb);
       }
       av_free(context);
       std::cin.get();
       return 0;
    }
    </string></iostream>

    Compile :

    g++ -I ./FFmpeg/ video.cpp -L fflibs -lavcodec -lavformat

    The code comes with two errors :

    video.cpp:249:84: error: ‘avcodec_encode_video’ was not declared in this scope
            out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, picture);
                                                                                       ^


    video.cpp: In function ‘int main(int, char**)’:
    video.cpp:342:46: error: ‘AVStream {aka struct AVStream}’ has no member named ‘pts’
                videoPTS = (double) videoStream->pts.val * videoStream->time_base.num / videoStream->time_base.den;
                                                 ^

    and a huge number of warnings for deprecation.

    video.cpp: In function ‘void closeVideo(AVFormatContext*, AVStream*)’:
    video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        avcodec_close(st->codec);
                          ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        avcodec_close(st->codec);
                          ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        avcodec_close(st->codec);
                          ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp: In function ‘AVFrame* alloc_picture(AVPixelFormat, int, int)’:
    video.cpp:80:12: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        size = avpicture_get_size(pix_fmt, width, height);
               ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here
    int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
        ^
    video.cpp:80:12: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        size = avpicture_get_size(pix_fmt, width, height);
               ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here
    int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
        ^
    video.cpp:80:53: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        size = avpicture_get_size(pix_fmt, width, height);
                                                        ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here
    int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
        ^
    video.cpp:87:5: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);
        ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here
    int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
        ^
    video.cpp:87:5: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);
        ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here
    int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
        ^
    video.cpp:87:78: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);
                                                                                 ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here
    int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
        ^
    video.cpp: In function ‘void openVideo(AVFormatContext*, AVStream*)’:
    video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp: In function ‘AVStream* addVideoStream(AVFormatContext*, AVCodecID)’:
    video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        codec = stream->codec;
                        ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        codec = stream->codec;
                        ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        codec = stream->codec;
                        ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp: In function ‘void write_video_frame(AVFormatContext*, AVStream*)’:
    video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if (c->coded_frame->pts != AV_NOPTS_VALUE)
                       ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if (c->coded_frame->pts != AV_NOPTS_VALUE)
                       ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if (c->coded_frame->pts != AV_NOPTS_VALUE)
                       ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                    pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
                                             ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                    pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
                                             ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                    pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
                                             ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if(c->coded_frame->key_frame)
                      ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if(c->coded_frame->key_frame)
                      ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if(c->coded_frame->key_frame)
                      ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
            av_freep(&amp;context->streams[i]->codec);
                                           ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
            av_freep(&amp;context->streams[i]->codec);
                                           ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
            av_freep(&amp;context->streams[i]->codec);
                                           ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:337:38: warning: ignoring return value of ‘int avformat_write_header(AVFormatContext*, AVDictionary**)’, declared with attribute warn_unused_result [-Wunused-result]
        avformat_write_header(context, 0);
                                         ^

    I have also defined a few macros to redefine those who have been omited. In a modern ffmpeg API, they must be replaced.

    Could someone please help me solving errors and deprecation warnings to comply with recent ffmpeg API ?