Recherche avancée

Médias (1)

Mot : - Tags -/epub

Autres articles (45)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

Sur d’autres sites (7943)

  • FFMPEG : cannot play MPEG4 video encoded from images. Duration and bitrate undefined

    17 juin 2013, par KaiK

    I've been trying to set a H264 video stream created from images, into an MPEG4 container. I've been able to get the video stream from images successfully. But when muxing it in the container, I must do something wrong because no player is able to reproduce it, despite ffplay - that plays the video until the end and after that, the image gets frozen until the eternity -.

    The ffplay cannot identify Duration neither bitrate, so I supose it might be an issue related with dts and pts, but I've searched about how to solve it with no success.

    Here's the ffplay output :

    ~$ ffplay testContainer.mp4
    ffplay version git-2012-01-31-c673671 Copyright (c) 2003-2012 the FFmpeg developers
     built on Feb  7 2012 20:32:12 with gcc 4.4.3
     configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-        libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvpx --enable-libmp3lame --enable-debug=3
     libavutil      51. 36.100 / 51. 36.100
     libavcodec     54.  0.102 / 54.  0.102
     libavformat    54.  0.100 / 54.  0.100
     libavdevice    53.  4.100 / 53.  4.100
     libavfilter     2. 60.100 /  2. 60.100
     libswscale      2.  1.100 /  2.  1.100
     libswresample   0.  6.100 /  0.  6.100
     libpostproc    52.  0.100 / 52.  0.100
    [h264 @ 0xa4849c0] max_analyze_duration 5000000 reached at 5000000
    [h264 @ 0xa4849c0] Estimating duration from bitrate, this may be inaccurate
    Input #0, h264, from 'testContainer.mp4':
     Duration: N/A, bitrate: N/A
       Stream #0:0: Video: h264 (High), yuv420p, 512x512, 25 fps, 25 tbr, 1200k tbn, 50 tbc
          2.74 A-V:  0.000 fd=   0 aq=    0KB vq=  160KB sq=    0B f=0/0   0/0

    Structure

    My code is C++ styled, so I've a class that handles all the encoding, and then a main that initilize it, passes some images in a bucle, and finally notify the end of the process as following :

    int main (int argc, const char * argv[])
    {

    MyVideoEncoder* videoEncoder = new MyVideoEncoder(512, 512, 512, 512, "output/testContainer.mp4", 25, 20);
    if(!videoEncoder->initWithCodec(MyVideoEncoder::H264))
    {
       std::cout << "something really bad happened. Exit!!" << std::endl;
       exit(-1);
    }

    /* encode 1 second of video */
    for(int i=0;i<228;i++) {

       std::stringstream filepath;
       filepath << "input2/image" << i << ".jpg";

       videoEncoder->encodeFrameFromJPG(const_cast(filepath.str().c_str()));

    }

    videoEncoder->endEncoding();

    }

    Hints

    I've seen a lot of examples about decoding of a video and encoding into another, but no working example of muxing a video from the scratch, so I'm not sure how to proceed with the pts and dts packet values. That's the reason why I suspect the issue must be in the following method :

    bool MyVideoEncoder::encodeImageAsFrame(){
       bool res = false;


       pTempFrame->pts = frameCount * frameRate * 90; //90Hz by the standard for PTS-values
       frameCount++;

       /* encode the image */
       out_size = avcodec_encode_video(pVideoStream->codec, outbuf, outbuf_size, pTempFrame);


       if (out_size > 0) {
           AVPacket pkt;
           av_init_packet(&pkt);
           pkt.pts = pkt.dts = 0;

           if (pVideoStream->codec->coded_frame->pts != AV_NOPTS_VALUE) {
               pkt.pts = av_rescale_q(pVideoStream->codec->coded_frame->pts,
                       pVideoStream->codec->time_base, pVideoStream->time_base);
               pkt.dts = pTempFrame->pts;

           }
           if (pVideoStream->codec->coded_frame->key_frame) {
               pkt.flags |= AV_PKT_FLAG_KEY;
           }
           pkt.stream_index = pVideoStream->index;
           pkt.data = outbuf;
           pkt.size = out_size;

           res = (av_interleaved_write_frame(pFormatContext, &pkt) == 0);
       }


       return res;
    }

    Any help or insight would be appreciated. Thanks in advance !!

    P.S. The rest of the code, where config is done, is the following :

    // MyVideoEncoder.cpp

    #include "MyVideoEncoder.h"
    #include "Image.hpp"
    #include <cstring>
    #include <sstream>
    #include

    #define MAX_AUDIO_PACKET_SIZE (128 * 1024)



    MyVideoEncoder::MyVideoEncoder(int inwidth, int inheight,
           int outwidth, int outheight, char* fileOutput, int framerate,
           int compFactor) {
       inWidth = inwidth;
       inHeight = inheight;
       outWidth = outwidth;
       outHeight = outheight;
       pathToMovie = fileOutput;
       frameRate = framerate;
       compressionFactor = compFactor;
       frameCount = 0;

    }

    MyVideoEncoder::~MyVideoEncoder() {

    }

    bool MyVideoEncoder::initWithCodec(
           MyVideoEncoder::encoderType type) {
       if (!initializeEncoder(type))
           return false;

       if (!configureFrames())
           return false;

       return true;

    }

    bool MyVideoEncoder::encodeFrameFromJPG(char* filepath) {

       setJPEGImage(filepath);
       return encodeImageAsFrame();
    }



    bool MyVideoEncoder::encodeDelayedFrames(){
       bool res = false;

       while(out_size > 0)
       {
           pTempFrame->pts = frameCount * frameRate * 90; //90Hz by the standard for PTS-values
           frameCount++;

           out_size = avcodec_encode_video(pVideoStream->codec, outbuf, outbuf_size, NULL);

           if (out_size > 0)
           {
               AVPacket pkt;
               av_init_packet(&amp;pkt);
               pkt.pts = pkt.dts = 0;

               if (pVideoStream->codec->coded_frame->pts != AV_NOPTS_VALUE) {
                   pkt.pts = av_rescale_q(pVideoStream->codec->coded_frame->pts,
                           pVideoStream->codec->time_base, pVideoStream->time_base);
                   pkt.dts = pTempFrame->pts;
               }
               if (pVideoStream->codec->coded_frame->key_frame) {
                   pkt.flags |= AV_PKT_FLAG_KEY;
               }
               pkt.stream_index = pVideoStream->index;
               pkt.data = outbuf;
               pkt.size = out_size;


               res = (av_interleaved_write_frame(pFormatContext, &amp;pkt) == 0);
           }

       }

       return res;
    }






    void MyVideoEncoder::endEncoding() {
       encodeDelayedFrames();
       closeEncoder();
    }

    bool MyVideoEncoder::setJPEGImage(char* imgFilename) {
       Image* rgbImage = new Image();
       rgbImage->read_jpeg_image(imgFilename);

       bool ret = setImageFromRGBArray(rgbImage->get_data());

       delete rgbImage;

       return ret;
    }

    bool MyVideoEncoder::setImageFromRGBArray(unsigned char* data) {

       memcpy(pFrameRGB->data[0], data, 3 * inWidth * inHeight);

       int ret = sws_scale(img_convert_ctx, pFrameRGB->data, pFrameRGB->linesize,
               0, inHeight, pTempFrame->data, pTempFrame->linesize);

       pFrameRGB->pts++;
       if (ret)
           return true;
       else
           return false;
    }

    bool MyVideoEncoder::initializeEncoder(encoderType type) {

       av_register_all();

       pTempFrame = avcodec_alloc_frame();
       pTempFrame->pts = 0;
       pOutFormat = NULL;
       pFormatContext = NULL;
       pVideoStream = NULL;
       pAudioStream = NULL;
       bool res = false;

       // Create format
       switch (type) {
           case MyVideoEncoder::H264:
               pOutFormat = av_guess_format("h264", NULL, NULL);
               break;
           case MyVideoEncoder::MPEG1:
               pOutFormat = av_guess_format("mpeg", NULL, NULL);
               break;
           default:
               pOutFormat = av_guess_format(NULL, pathToMovie.c_str(), NULL);
               break;
       }

       if (!pOutFormat) {
           pOutFormat = av_guess_format(NULL, pathToMovie.c_str(), NULL);
           if (!pOutFormat) {
               std::cout &lt;&lt; "output format not found" &lt;&lt; std::endl;
               return false;
           }
       }


       // allocate context
       pFormatContext = avformat_alloc_context();
       if(!pFormatContext)
       {
           std::cout &lt;&lt; "cannot alloc format context" &lt;&lt; std::endl;
           return false;
       }

       pFormatContext->oformat = pOutFormat;

       memcpy(pFormatContext->filename, pathToMovie.c_str(), min( (const int) pathToMovie.length(), (const int)sizeof(pFormatContext->filename)));


       //Add video and audio streams
       pVideoStream = AddVideoStream(pFormatContext,
               pOutFormat->video_codec);

       // Set the output parameters
       av_dump_format(pFormatContext, 0, pathToMovie.c_str(), 1);

       // Open Video stream
       if (pVideoStream) {
           res = openVideo(pFormatContext, pVideoStream);
       }


       if (res &amp;&amp; !(pOutFormat->flags &amp; AVFMT_NOFILE)) {
           if (avio_open(&amp;pFormatContext->pb, pathToMovie.c_str(), AVIO_FLAG_WRITE) &lt; 0) {
               res = false;
               std::cout &lt;&lt; "Cannot open output file" &lt;&lt; std::endl;
           }
       }

       if (res) {
           avformat_write_header(pFormatContext,NULL);
       }
       else{
           freeMemory();
           std::cout &lt;&lt; "Cannot init encoder" &lt;&lt; std::endl;
       }


       return res;

    }



    AVStream *MyVideoEncoder::AddVideoStream(AVFormatContext *pContext, CodecID codec_id)
    {
     AVCodecContext *pCodecCxt = NULL;
     AVStream *st    = NULL;

     st = avformat_new_stream(pContext, NULL);
     if (!st)
     {
         std::cout &lt;&lt; "Cannot add new video stream" &lt;&lt; std::endl;
         return NULL;
     }
     st->id = 0;

     pCodecCxt = st->codec;
     pCodecCxt->codec_id = (CodecID)codec_id;
     pCodecCxt->codec_type = AVMEDIA_TYPE_VIDEO;
     pCodecCxt->frame_number = 0;


     // Put sample parameters.
     pCodecCxt->bit_rate = outWidth * outHeight * 3 * frameRate/ compressionFactor;

     pCodecCxt->width  = outWidth;
     pCodecCxt->height = outHeight;

     /* frames per second */
     pCodecCxt->time_base= (AVRational){1,frameRate};

     /* pixel format must be YUV */
     pCodecCxt->pix_fmt = PIX_FMT_YUV420P;


     if (pCodecCxt->codec_id == CODEC_ID_H264)
     {
         av_opt_set(pCodecCxt->priv_data, "preset", "slow", 0);
         av_opt_set(pCodecCxt->priv_data, "vprofile", "baseline", 0);
         pCodecCxt->max_b_frames = 16;
     }
     if (pCodecCxt->codec_id == CODEC_ID_MPEG1VIDEO)
     {
         pCodecCxt->mb_decision = 1;
     }

     if(pContext->oformat->flags &amp; AVFMT_GLOBALHEADER)
     {
         pCodecCxt->flags |= CODEC_FLAG_GLOBAL_HEADER;
     }

     pCodecCxt->coder_type = 1;  // coder = 1
     pCodecCxt->flags|=CODEC_FLAG_LOOP_FILTER;   // flags=+loop
     pCodecCxt->me_range = 16;   // me_range=16
     pCodecCxt->gop_size = 50;  // g=250
     pCodecCxt->keyint_min = 25; // keyint_min=25


     return st;
    }


    bool MyVideoEncoder::openVideo(AVFormatContext *oc, AVStream *pStream)
    {
       AVCodec *pCodec;
       AVCodecContext *pContext;

       pContext = pStream->codec;

       // Find the video encoder.
       pCodec = avcodec_find_encoder(pContext->codec_id);
       if (!pCodec)
       {
           std::cout &lt;&lt; "Cannot found video codec" &lt;&lt; std::endl;
           return false;
       }

       // Open the codec.
       if (avcodec_open2(pContext, pCodec, NULL) &lt; 0)
       {
           std::cout &lt;&lt; "Cannot open video codec" &lt;&lt; std::endl;
           return false;
       }


       return true;
    }



    bool MyVideoEncoder::configureFrames() {

       /* alloc image and output buffer */
       outbuf_size = outWidth*outHeight*3;
       outbuf = (uint8_t*) malloc(outbuf_size);

       av_image_alloc(pTempFrame->data, pTempFrame->linesize, pVideoStream->codec->width,
               pVideoStream->codec->height, pVideoStream->codec->pix_fmt, 1);

       //Alloc RGB temp frame
       pFrameRGB = avcodec_alloc_frame();
       if (pFrameRGB == NULL)
           return false;
       avpicture_alloc((AVPicture *) pFrameRGB, PIX_FMT_RGB24, inWidth, inHeight);

       pFrameRGB->pts = 0;

       //Set SWS context to convert from RGB images to YUV images
       if (img_convert_ctx == NULL) {
           img_convert_ctx = sws_getContext(inWidth, inHeight, PIX_FMT_RGB24,
                   outWidth, outHeight, pVideoStream->codec->pix_fmt, /*SWS_BICUBIC*/
                   SWS_FAST_BILINEAR, NULL, NULL, NULL);
           if (img_convert_ctx == NULL) {
               fprintf(stderr, "Cannot initialize the conversion context!\n");
               return false;
           }
       }

       return true;

    }

    void MyVideoEncoder::closeEncoder() {
       av_write_frame(pFormatContext, NULL);
       av_write_trailer(pFormatContext);
       freeMemory();
    }


    void MyVideoEncoder::freeMemory()
    {
     bool res = true;

     if (pFormatContext)
     {
       // close video stream
       if (pVideoStream)
       {
         closeVideo(pFormatContext, pVideoStream);
       }

       // Free the streams.
       for(size_t i = 0; i &lt; pFormatContext->nb_streams; i++)
       {
         av_freep(&amp;pFormatContext->streams[i]->codec);
         av_freep(&amp;pFormatContext->streams[i]);
       }

       if (!(pFormatContext->flags &amp; AVFMT_NOFILE) &amp;&amp; pFormatContext->pb)
       {
         avio_close(pFormatContext->pb);
       }

       // Free the stream.
       av_free(pFormatContext);
       pFormatContext = NULL;
     }
    }

    void MyVideoEncoder::closeVideo(AVFormatContext *pContext, AVStream *pStream)
    {
     avcodec_close(pStream->codec);
     if (pTempFrame)
     {
       if (pTempFrame->data)
       {
         av_free(pTempFrame->data[0]);
         pTempFrame->data[0] = NULL;
       }
       av_free(pTempFrame);
       pTempFrame = NULL;
     }

     if (pFrameRGB)
     {
       if (pFrameRGB->data)
       {
         av_free(pFrameRGB->data[0]);
         pFrameRGB->data[0] = NULL;
       }
       av_free(pFrameRGB);
       pFrameRGB = NULL;
     }

    }
    </sstream></cstring>
  • FFMPEG : cannot play MPEG4 video encoded from images. Duration and bitrate undefined

    17 juin 2013, par KaiK

    I've been trying to set a H264 video stream created from images, into an MPEG4 container. I've been able to get the video stream from images successfully. But when muxing it in the container, I must do something wrong because no player is able to reproduce it, despite ffplay - that plays the video until the end and after that, the image gets frozen until the eternity -.

    The ffplay cannot identify Duration neither bitrate, so I supose it might be an issue related with dts and pts, but I've searched about how to solve it with no success.

    Here's the ffplay output :

    ~$ ffplay testContainer.mp4
    ffplay version git-2012-01-31-c673671 Copyright (c) 2003-2012 the FFmpeg developers
     built on Feb  7 2012 20:32:12 with gcc 4.4.3
     configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-        libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvpx --enable-libmp3lame --enable-debug=3
     libavutil      51. 36.100 / 51. 36.100
     libavcodec     54.  0.102 / 54.  0.102
     libavformat    54.  0.100 / 54.  0.100
     libavdevice    53.  4.100 / 53.  4.100
     libavfilter     2. 60.100 /  2. 60.100
     libswscale      2.  1.100 /  2.  1.100
     libswresample   0.  6.100 /  0.  6.100
     libpostproc    52.  0.100 / 52.  0.100
    [h264 @ 0xa4849c0] max_analyze_duration 5000000 reached at 5000000
    [h264 @ 0xa4849c0] Estimating duration from bitrate, this may be inaccurate
    Input #0, h264, from &#39;testContainer.mp4&#39;:
     Duration: N/A, bitrate: N/A
       Stream #0:0: Video: h264 (High), yuv420p, 512x512, 25 fps, 25 tbr, 1200k tbn, 50 tbc
          2.74 A-V:  0.000 fd=   0 aq=    0KB vq=  160KB sq=    0B f=0/0   0/0

    Structure

    My code is C++ styled, so I've a class that handles all the encoding, and then a main that initilize it, passes some images in a bucle, and finally notify the end of the process as following :

    int main (int argc, const char * argv[])
    {

    MyVideoEncoder* videoEncoder = new MyVideoEncoder(512, 512, 512, 512, "output/testContainer.mp4", 25, 20);
    if(!videoEncoder->initWithCodec(MyVideoEncoder::H264))
    {
       std::cout &lt;&lt; "something really bad happened. Exit!!" &lt;&lt; std::endl;
       exit(-1);
    }

    /* encode 1 second of video */
    for(int i=0;i&lt;228;i++) {

       std::stringstream filepath;
       filepath &lt;&lt; "input2/image" &lt;&lt; i &lt;&lt; ".jpg";

       videoEncoder->encodeFrameFromJPG(const_cast(filepath.str().c_str()));

    }

    videoEncoder->endEncoding();

    }

    Hints

    I've seen a lot of examples about decoding of a video and encoding into another, but no working example of muxing a video from the scratch, so I'm not sure how to proceed with the pts and dts packet values. That's the reason why I suspect the issue must be in the following method :

    bool MyVideoEncoder::encodeImageAsFrame(){
       bool res = false;


       pTempFrame->pts = frameCount * frameRate * 90; //90Hz by the standard for PTS-values
       frameCount++;

       /* encode the image */
       out_size = avcodec_encode_video(pVideoStream->codec, outbuf, outbuf_size, pTempFrame);


       if (out_size > 0) {
           AVPacket pkt;
           av_init_packet(&amp;pkt);
           pkt.pts = pkt.dts = 0;

           if (pVideoStream->codec->coded_frame->pts != AV_NOPTS_VALUE) {
               pkt.pts = av_rescale_q(pVideoStream->codec->coded_frame->pts,
                       pVideoStream->codec->time_base, pVideoStream->time_base);
               pkt.dts = pTempFrame->pts;

           }
           if (pVideoStream->codec->coded_frame->key_frame) {
               pkt.flags |= AV_PKT_FLAG_KEY;
           }
           pkt.stream_index = pVideoStream->index;
           pkt.data = outbuf;
           pkt.size = out_size;

           res = (av_interleaved_write_frame(pFormatContext, &amp;pkt) == 0);
       }


       return res;
    }

    Any help or insight would be appreciated. Thanks in advance !!

    P.S. The rest of the code, where config is done, is the following :

    // MyVideoEncoder.cpp

    #include "MyVideoEncoder.h"
    #include "Image.hpp"
    #include <cstring>
    #include <sstream>
    #include

    #define MAX_AUDIO_PACKET_SIZE (128 * 1024)



    MyVideoEncoder::MyVideoEncoder(int inwidth, int inheight,
           int outwidth, int outheight, char* fileOutput, int framerate,
           int compFactor) {
       inWidth = inwidth;
       inHeight = inheight;
       outWidth = outwidth;
       outHeight = outheight;
       pathToMovie = fileOutput;
       frameRate = framerate;
       compressionFactor = compFactor;
       frameCount = 0;

    }

    MyVideoEncoder::~MyVideoEncoder() {

    }

    bool MyVideoEncoder::initWithCodec(
           MyVideoEncoder::encoderType type) {
       if (!initializeEncoder(type))
           return false;

       if (!configureFrames())
           return false;

       return true;

    }

    bool MyVideoEncoder::encodeFrameFromJPG(char* filepath) {

       setJPEGImage(filepath);
       return encodeImageAsFrame();
    }



    bool MyVideoEncoder::encodeDelayedFrames(){
       bool res = false;

       while(out_size > 0)
       {
           pTempFrame->pts = frameCount * frameRate * 90; //90Hz by the standard for PTS-values
           frameCount++;

           out_size = avcodec_encode_video(pVideoStream->codec, outbuf, outbuf_size, NULL);

           if (out_size > 0)
           {
               AVPacket pkt;
               av_init_packet(&amp;pkt);
               pkt.pts = pkt.dts = 0;

               if (pVideoStream->codec->coded_frame->pts != AV_NOPTS_VALUE) {
                   pkt.pts = av_rescale_q(pVideoStream->codec->coded_frame->pts,
                           pVideoStream->codec->time_base, pVideoStream->time_base);
                   pkt.dts = pTempFrame->pts;
               }
               if (pVideoStream->codec->coded_frame->key_frame) {
                   pkt.flags |= AV_PKT_FLAG_KEY;
               }
               pkt.stream_index = pVideoStream->index;
               pkt.data = outbuf;
               pkt.size = out_size;


               res = (av_interleaved_write_frame(pFormatContext, &amp;pkt) == 0);
           }

       }

       return res;
    }






    void MyVideoEncoder::endEncoding() {
       encodeDelayedFrames();
       closeEncoder();
    }

    bool MyVideoEncoder::setJPEGImage(char* imgFilename) {
       Image* rgbImage = new Image();
       rgbImage->read_jpeg_image(imgFilename);

       bool ret = setImageFromRGBArray(rgbImage->get_data());

       delete rgbImage;

       return ret;
    }

    bool MyVideoEncoder::setImageFromRGBArray(unsigned char* data) {

       memcpy(pFrameRGB->data[0], data, 3 * inWidth * inHeight);

       int ret = sws_scale(img_convert_ctx, pFrameRGB->data, pFrameRGB->linesize,
               0, inHeight, pTempFrame->data, pTempFrame->linesize);

       pFrameRGB->pts++;
       if (ret)
           return true;
       else
           return false;
    }

    bool MyVideoEncoder::initializeEncoder(encoderType type) {

       av_register_all();

       pTempFrame = avcodec_alloc_frame();
       pTempFrame->pts = 0;
       pOutFormat = NULL;
       pFormatContext = NULL;
       pVideoStream = NULL;
       pAudioStream = NULL;
       bool res = false;

       // Create format
       switch (type) {
           case MyVideoEncoder::H264:
               pOutFormat = av_guess_format("h264", NULL, NULL);
               break;
           case MyVideoEncoder::MPEG1:
               pOutFormat = av_guess_format("mpeg", NULL, NULL);
               break;
           default:
               pOutFormat = av_guess_format(NULL, pathToMovie.c_str(), NULL);
               break;
       }

       if (!pOutFormat) {
           pOutFormat = av_guess_format(NULL, pathToMovie.c_str(), NULL);
           if (!pOutFormat) {
               std::cout &lt;&lt; "output format not found" &lt;&lt; std::endl;
               return false;
           }
       }


       // allocate context
       pFormatContext = avformat_alloc_context();
       if(!pFormatContext)
       {
           std::cout &lt;&lt; "cannot alloc format context" &lt;&lt; std::endl;
           return false;
       }

       pFormatContext->oformat = pOutFormat;

       memcpy(pFormatContext->filename, pathToMovie.c_str(), min( (const int) pathToMovie.length(), (const int)sizeof(pFormatContext->filename)));


       //Add video and audio streams
       pVideoStream = AddVideoStream(pFormatContext,
               pOutFormat->video_codec);

       // Set the output parameters
       av_dump_format(pFormatContext, 0, pathToMovie.c_str(), 1);

       // Open Video stream
       if (pVideoStream) {
           res = openVideo(pFormatContext, pVideoStream);
       }


       if (res &amp;&amp; !(pOutFormat->flags &amp; AVFMT_NOFILE)) {
           if (avio_open(&amp;pFormatContext->pb, pathToMovie.c_str(), AVIO_FLAG_WRITE) &lt; 0) {
               res = false;
               std::cout &lt;&lt; "Cannot open output file" &lt;&lt; std::endl;
           }
       }

       if (res) {
           avformat_write_header(pFormatContext,NULL);
       }
       else{
           freeMemory();
           std::cout &lt;&lt; "Cannot init encoder" &lt;&lt; std::endl;
       }


       return res;

    }



    AVStream *MyVideoEncoder::AddVideoStream(AVFormatContext *pContext, CodecID codec_id)
    {
     AVCodecContext *pCodecCxt = NULL;
     AVStream *st    = NULL;

     st = avformat_new_stream(pContext, NULL);
     if (!st)
     {
         std::cout &lt;&lt; "Cannot add new video stream" &lt;&lt; std::endl;
         return NULL;
     }
     st->id = 0;

     pCodecCxt = st->codec;
     pCodecCxt->codec_id = (CodecID)codec_id;
     pCodecCxt->codec_type = AVMEDIA_TYPE_VIDEO;
     pCodecCxt->frame_number = 0;


     // Put sample parameters.
     pCodecCxt->bit_rate = outWidth * outHeight * 3 * frameRate/ compressionFactor;

     pCodecCxt->width  = outWidth;
     pCodecCxt->height = outHeight;

     /* frames per second */
     pCodecCxt->time_base= (AVRational){1,frameRate};

     /* pixel format must be YUV */
     pCodecCxt->pix_fmt = PIX_FMT_YUV420P;


     if (pCodecCxt->codec_id == CODEC_ID_H264)
     {
         av_opt_set(pCodecCxt->priv_data, "preset", "slow", 0);
         av_opt_set(pCodecCxt->priv_data, "vprofile", "baseline", 0);
         pCodecCxt->max_b_frames = 16;
     }
     if (pCodecCxt->codec_id == CODEC_ID_MPEG1VIDEO)
     {
         pCodecCxt->mb_decision = 1;
     }

     if(pContext->oformat->flags &amp; AVFMT_GLOBALHEADER)
     {
         pCodecCxt->flags |= CODEC_FLAG_GLOBAL_HEADER;
     }

     pCodecCxt->coder_type = 1;  // coder = 1
     pCodecCxt->flags|=CODEC_FLAG_LOOP_FILTER;   // flags=+loop
     pCodecCxt->me_range = 16;   // me_range=16
     pCodecCxt->gop_size = 50;  // g=250
     pCodecCxt->keyint_min = 25; // keyint_min=25


     return st;
    }


    bool MyVideoEncoder::openVideo(AVFormatContext *oc, AVStream *pStream)
    {
       AVCodec *pCodec;
       AVCodecContext *pContext;

       pContext = pStream->codec;

       // Find the video encoder.
       pCodec = avcodec_find_encoder(pContext->codec_id);
       if (!pCodec)
       {
           std::cout &lt;&lt; "Cannot found video codec" &lt;&lt; std::endl;
           return false;
       }

       // Open the codec.
       if (avcodec_open2(pContext, pCodec, NULL) &lt; 0)
       {
           std::cout &lt;&lt; "Cannot open video codec" &lt;&lt; std::endl;
           return false;
       }


       return true;
    }



    bool MyVideoEncoder::configureFrames() {

       /* alloc image and output buffer */
       outbuf_size = outWidth*outHeight*3;
       outbuf = (uint8_t*) malloc(outbuf_size);

       av_image_alloc(pTempFrame->data, pTempFrame->linesize, pVideoStream->codec->width,
               pVideoStream->codec->height, pVideoStream->codec->pix_fmt, 1);

       //Alloc RGB temp frame
       pFrameRGB = avcodec_alloc_frame();
       if (pFrameRGB == NULL)
           return false;
       avpicture_alloc((AVPicture *) pFrameRGB, PIX_FMT_RGB24, inWidth, inHeight);

       pFrameRGB->pts = 0;

       //Set SWS context to convert from RGB images to YUV images
       if (img_convert_ctx == NULL) {
           img_convert_ctx = sws_getContext(inWidth, inHeight, PIX_FMT_RGB24,
                   outWidth, outHeight, pVideoStream->codec->pix_fmt, /*SWS_BICUBIC*/
                   SWS_FAST_BILINEAR, NULL, NULL, NULL);
           if (img_convert_ctx == NULL) {
               fprintf(stderr, "Cannot initialize the conversion context!\n");
               return false;
           }
       }

       return true;

    }

    void MyVideoEncoder::closeEncoder() {
       av_write_frame(pFormatContext, NULL);
       av_write_trailer(pFormatContext);
       freeMemory();
    }


    void MyVideoEncoder::freeMemory()
    {
     bool res = true;

     if (pFormatContext)
     {
       // close video stream
       if (pVideoStream)
       {
         closeVideo(pFormatContext, pVideoStream);
       }

       // Free the streams.
       for(size_t i = 0; i &lt; pFormatContext->nb_streams; i++)
       {
         av_freep(&amp;pFormatContext->streams[i]->codec);
         av_freep(&amp;pFormatContext->streams[i]);
       }

       if (!(pFormatContext->flags &amp; AVFMT_NOFILE) &amp;&amp; pFormatContext->pb)
       {
         avio_close(pFormatContext->pb);
       }

       // Free the stream.
       av_free(pFormatContext);
       pFormatContext = NULL;
     }
    }

    void MyVideoEncoder::closeVideo(AVFormatContext *pContext, AVStream *pStream)
    {
     avcodec_close(pStream->codec);
     if (pTempFrame)
     {
       if (pTempFrame->data)
       {
         av_free(pTempFrame->data[0]);
         pTempFrame->data[0] = NULL;
       }
       av_free(pTempFrame);
       pTempFrame = NULL;
     }

     if (pFrameRGB)
     {
       if (pFrameRGB->data)
       {
         av_free(pFrameRGB->data[0]);
         pFrameRGB->data[0] = NULL;
       }
       av_free(pFrameRGB);
       pFrameRGB = NULL;
     }

    }
    </sstream></cstring>
  • Build libaacplus 2.0.2 for ios

    23 mai 2013, par Javan

    Does anyone build libaacplus2.0.2(Download here) successed for iOS ? I want ffmpeg support that.It cast me one day to build that, but failed.

    This is libaacplus2.0.2/autogen.sh, It was edited, just let it create configure file :

    #!/bin/sh
    # Run this to set up the build system: configure, makefiles, etc.
    # (based on the version in enlightenment&#39;s cvs)

    package="libaacplus"

    srcdir=`dirname $0`
    test -z "$srcdir" &amp;&amp; srcdir=.

    cd "$srcdir"
    DIE=0

    (autoheader --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
       echo
       echo "You must have autoconf installed to compile $package."
       echo "Download the appropriate package for your distribution,"
       echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
       DIE=1
    }

    (autoreconf --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
       echo
       echo "You must have autoreconf installed to compile $package."
       echo "Download the appropriate package for your distribution,"
       echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
       DIE=1
    }

    (automake --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
       echo
       echo "You must have automake installed to compile $package."
       echo "Download the appropriate package for your system,"
       echo "or get the source from one of the GNU ftp sites"
       echo "listed in http://www.gnu.org/order/ftp.html"
       DIE=1
    }

    if test "$DIE" -eq 1; then
       exit 1
    fi

    if test -z "$*"; then
       echo "I am going to run ./configure with no arguments - if you wish "
       echo "to pass any to it, please specify them on the $0 command line."
    fi

    echo "Generating configuration files for $package, please wait...."

    echo "  aclocal $ACLOCAL_FLAGS"
    aclocal $ACLOCAL_FLAGS
    echo "  autoheader"
    autoheader
    echo "  libtoolize --automake"
    libtoolize --automake
    echo "  automake --add-missing $AUTOMAKE_FLAGS"
    automake --add-missing $AUTOMAKE_FLAGS
    echo "  autoreconf"
    autoreconf

    #$srcdir/configure "$@" &amp;&amp; echo

    After run the autogen.sh script :

    ./autogen.sh

    the configure file has been created in the same path, them i re-compressed the libaacplus folder named with "libaacplus-2.0.2.tar.gz". Bellow is build script(build-libaacplus.sh) wrote by me :

    #!/bin/bash

    SRC_PACK=&#39;libaacplus-2.0.2.tar.gz&#39;

    SRC_ROOT=`pwd`/libaacplus-2.0.2
    BUILD_PATH=`pwd`/build

    DEVELOPER_ROOT=&#39;/Applications/Xcode.app/Contents/Developer&#39;
    IOS_VERSION=&#39;6.1&#39;
    #CC="$DEVELOPER_ROOT/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"

    CPU_CORE_COUNT=`sysctl -n machdep.cpu.core_count` #Check cpu core number
    MAKE_JOBS=$CPU_CORE_COUNT+1

    function build_with_args() {
       local arch=$1
       local platform=$2
       local host=$3
       local cc=$4
       local build=$5
       local cpp=$6
       local ios_dev_root="$DEVELOPER_ROOT/Platforms/iPhone$platform.platform/Developer"
       local sys_root="$ios_dev_root/SDKs/iPhone$platform$IOS_VERSION.sdk"

       if [ -d $SRC_ROOT ]; then
           echo "Cleaning $SRC_ROOT ..."
           rm -rf $SRC_ROOT    
           echo "Clean $SRC_ROOT completed!"
       fi

       echo "Decompressing $SRC_PACK ..."
       tar -xzf $SRC_PACK
       echo "Decompress $SRC_PACK completed!"

       cd $SRC_ROOT

       export PATH="$ios_dev_root/usr/bin:$DEVELOPER_ROOT/usr/bin:$PATH"
       export CC=$cc
       export CFLAGS="-I$sys_root/usr/include"
       export LDFLAGS="--sysroot=$sys_root -L$sys_root/usr/lib/ -L$sys_root/usr/lib/system"
       export CPPFLAGS=$CFLAGS
       export CPP=$cpp
       export TARGET=$build

       ./configure \
       --prefix="$BUILD_PATH/$arch" \
       --host=$host \
       --build=$build \
       --with-sysroot=$sys_root \
       --enable-shared \
       --enable-static

       echo "Building for $arch ..."

    #   make -j$MAKE_JOBS
       make install
       make clean

       echo "Build for $arch completed!"

       cd -
    }

    function build_armv7() {
       local platform=&#39;OS&#39;
       local bin_path="$DEVELOPER_ROOT/Platforms/iPhone$platform.platform/Developer/usr/bin"
       build_with_args \
           &#39;armv7&#39; \
           "$platform" \
           &#39;arm&#39; \
           "$bin_path/arm-apple-darwin10-llvm-gcc-4.2" \
           &#39;arm-apple-darwin10&#39; \
           "$bin_path/arm-apple-darwin10-llvm-g++-4.2"
    }

    function build_armv7s() {
       local platform=&#39;OS&#39;
       local bin_path="$DEVELOPER_ROOT/Platforms/iPhone$platform.platform/Developer/usr/bin"
       build_with_args \
           &#39;armv7s&#39; \
           "$platform" \
           &#39;arm&#39; \
           "$bin_path/arm-apple-darwin10-llvm-gcc-4.2" \
           &#39;arm-apple-darwin10&#39; \
           "$bin_path/arm-apple-darwin10-llvm-g++-4.2"
    }

    function build_i386() {
       local platform=&#39;Simulator&#39;
       local bin_path="$DEVELOPER_ROOT/Platforms/iPhone$platform.platform/Developer/usr/bin"
       build_with_args \
           &#39;i386&#39; \
           "$platform" \
           &#39;i386&#39; \
           "$bin_path/i686-apple-darwin11-llvm-gcc-4.2" \
           &#39;i686-apple-darwin11&#39; \
           "$bin_path/i686-apple-darwin11-llvm-g++-4.2"


    }

    if [ -d $BUILD_PATH ]; then
       echo "Cleaning $BUILD_PATH..."
       rm -rf $BUILD_PATH
    fi

    build_armv7
    #build_armv7s
    #build_i386

    echo &#39;>>>>>>>>>>>>>>>>>All completed!&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&#39;

    It failed again and again. Run script->failed->see config.log->modify->Run script ...

    I don't know what should I can do. Someone can help me ? Thanks a lot !
    The last config.log content is bellow :

    This file contains any messages produced by compilers while
    running configure, to aid debugging if configure makes a mistake.

    It was created by libaacplus configure 2.0.2, which was
    generated by GNU Autoconf 2.65.  Invocation command line was

     $ ./configure --prefix=/Users/md313/Documents/Developer/OpenSource/ffmpef4ios-build-scripts/external-libs/build/armv7 --host=arm --build=arm-apple-darwin10 --with-sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk --enable-shared --enable-static

    ## --------- ##
    ## Platform. ##
    ## --------- ##

    hostname = JieMacBookPro.local
    uname -m = x86_64
    uname -r = 11.4.2
    uname -s = Darwin
    uname -v = Darwin Kernel Version 11.4.2: Thu Aug 23 16:25:48 PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64

    /usr/bin/uname -p = i386
    /bin/uname -X     = unknown

    /bin/arch              = unknown
    /usr/bin/arch -k       = unknown
    /usr/convex/getsysinfo = unknown
    /usr/bin/hostinfo      = Mach kernel version:
        Darwin Kernel Version 11.4.2: Thu Aug 23 16:25:48 PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64
    Kernel configured for up to 4 processors.
    2 processors are physically available.
    4 processors are logically available.
    Processor type: i486 (Intel 80486)
    Processors active: 0 1 2 3
    Primary memory available: 4.00 gigabytes
    Default processor set: 127 tasks, 619 threads, 4 processors
    Load average: 0.97, Mach factor: 3.02
    /bin/machine           = unknown
    /usr/bin/oslevel       = unknown
    /bin/universe          = unknown

    PATH: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
    PATH: /Applications/Xcode.app/Contents/Developer/usr/bin
    PATH: /opt/local/bin
    PATH: /opt/local/sbin
    PATH: /usr/bin
    PATH: /bin
    PATH: /usr/sbin
    PATH: /sbin
    PATH: /usr/local/bin
    PATH: /usr/X11/bin
    PATH: /Library/StartupItems/MySQLCOM
    PATH: /usr/local/mysql/bin


    ## ----------- ##
    ## Core tests. ##
    ## ----------- ##

    configure:2378: checking for a BSD-compatible install
    configure:2446: result: /usr/bin/install -c
    configure:2457: checking whether build environment is sane
    configure:2512: result: yes
    configure:2571: checking for arm-strip
    configure:2601: result: no
    configure:2611: checking for strip
    configure:2627: found /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/strip
    configure:2638: result: strip
    configure:2650: WARNING: using cross tools not prefixed with host triplet
    configure:2663: checking for a thread-safe mkdir -p
    configure:2702: result: ./install-sh -c -d
    configure:2715: checking for gawk
    configure:2745: result: no
    configure:2715: checking for mawk
    configure:2745: result: no
    configure:2715: checking for nawk
    configure:2745: result: no
    configure:2715: checking for awk
    configure:2731: found /usr/bin/awk
    configure:2742: result: awk
    configure:2753: checking whether make sets $(MAKE)
    configure:2775: result: yes
    configure:2868: checking for arm-gcc
    configure:2895: result: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
    configure:3164: checking for C compiler version
    configure:3173: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 --version >&amp;5
    arm-apple-darwin10-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2410.2.00)
    Copyright (C) 2007 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    configure:3184: $? = 0
    configure:3173: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -v >&amp;5
    Using built-in specs.
    Target: arm-apple-darwin10
    Configured with: /private/var/tmp/llvmgcc42_Embedded/llvmgcc42_Embedded-2410.2~111/src/configure --enable-checking --enable-werror --prefix=/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --disable-tls --build=i686-apple-darwin10 --enable-llvm=/private/var/tmp/llvmgcc42_Embedded/llvmgcc42_Embedded-2410.2~111/dst-llvmCore/Developer/usr/local --program-prefix=arm-apple-darwin10- --host=x86_64-apple-darwin10 --target=arm-apple-darwin10 --with-gxx-include-dir=/usr/include/c++/4.2.1 --with-build-sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.Internal.sdk
    Thread model: posix
    gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2410.2.00)
    configure:3184: $? = 0
    configure:3173: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -V >&amp;5
    arm-apple-darwin10-llvm-gcc-4.2: &#39;-V&#39; option must have argument
    configure:3184: $? = 1
    configure:3173: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -qversion >&amp;5
    arm-apple-darwin10-llvm-gcc-4.2: no input files
    configure:3184: $? = 1
    configure:3204: checking whether the C compiler works
    configure:3226: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/ -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/system conftest.c  >&amp;5
    configure:3230: $? = 0
    configure:3279: result: yes
    configure:3282: checking for C compiler default output file name
    configure:3284: result: a.out
    configure:3290: checking for suffix of executables
    configure:3297: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -o conftest -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/ -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/system conftest.c  >&amp;5
    configure:3301: $? = 0
    configure:3323: result:
    configure:3345: checking whether we are cross compiling
    configure:3383: result: yes
    configure:3388: checking for suffix of object files
    configure:3410: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -c -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include conftest.c >&amp;5
    configure:3414: $? = 0
    configure:3435: result: o
    configure:3439: checking whether we are using the GNU C compiler
    configure:3458: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -c -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include conftest.c >&amp;5
    configure:3458: $? = 0
    configure:3467: result: yes
    configure:3476: checking whether /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 accepts -g
    configure:3496: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -c -g -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include conftest.c >&amp;5
    configure:3496: $? = 0
    configure:3537: result: yes
    configure:3554: checking for /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 option to accept ISO C89
    configure:3618: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2  -c -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include conftest.c >&amp;5
    configure:3618: $? = 0
    configure:3631: result: none needed
    configure:3662: checking for style of include used by make
    configure:3690: result: GNU
    configure:3716: checking dependency style of /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
    configure:3827: result: gcc3
    configure:3843: checking whether /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 and cc understand -c and -o together
    configure:3874: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -c conftest.c -o conftest2.o >&amp;5
    configure:3878: $? = 0
    configure:3884: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -c conftest.c -o conftest2.o >&amp;5
    configure:3888: $? = 0
    configure:3899: cc -c conftest.c >&amp;5
    configure:3903: $? = 0
    configure:3911: cc -c conftest.c -o conftest2.o >&amp;5
    configure:3915: $? = 0
    configure:3921: cc -c conftest.c -o conftest2.o >&amp;5
    configure:3925: $? = 0
    configure:3943: result: yes
    configure:3973: checking how to run the C preprocessor
    configure:4043: result: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-g++-4.2
    configure:4063: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-g++-4.2 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include conftest.c
    conftest.c:16: error: &#39;Syntax&#39; does not name a type
    configure:4063: $? = 1
    configure: failed program was:
    | /* confdefs.h */
    | #define PACKAGE_NAME "libaacplus"
    | #define PACKAGE_TARNAME "libaacplus"
    | #define PACKAGE_VERSION "2.0.2"
    | #define PACKAGE_STRING "libaacplus 2.0.2"
    | #define PACKAGE_BUGREPORT "Sergiy Guriev &lt;piratfm@ua.fm&gt;"
    | #define PACKAGE_URL ""
    | #define PACKAGE "libaacplus"
    | #define VERSION "2.0.2"
    | /* end confdefs.h.  */
    | #ifdef __STDC__
    | # include
    | #else
    | # include
    | #endif
    |            Syntax error
    configure:4063: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-g++-4.2 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include conftest.c
    conftest.c:16: error: &#39;Syntax&#39; does not name a type
    configure:4063: $? = 1
    configure: failed program was:
    | /* confdefs.h */
    | #define PACKAGE_NAME "libaacplus"
    | #define PACKAGE_TARNAME "libaacplus"
    | #define PACKAGE_VERSION "2.0.2"
    | #define PACKAGE_STRING "libaacplus 2.0.2"
    | #define PACKAGE_BUGREPORT "Sergiy Guriev &lt;piratfm@ua.fm&gt;"
    | #define PACKAGE_URL ""
    | #define PACKAGE "libaacplus"
    | #define VERSION "2.0.2"
    | /* end confdefs.h.  */
    | #ifdef __STDC__
    | # include
    | #else
    | # include
    | #endif
    |            Syntax error
    configure:4093: error: in `/Users/md313/Documents/Developer/OpenSource/ffmpef4ios-build-scripts/external-libs/libaacplus-2.0.2&#39;:
    configure:4096: error: C preprocessor "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-g++-4.2" fails sanity check
    See `config.log&#39; for more details.

    ## ---------------- ##
    ## Cache variables. ##
    ## ---------------- ##

    ac_cv_c_compiler_gnu=yes
    ac_cv_env_CC_set=set
    ac_cv_env_CC_value=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
    ac_cv_env_CFLAGS_set=set
    ac_cv_env_CFLAGS_value=-I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include
    ac_cv_env_CPPFLAGS_set=set
    ac_cv_env_CPPFLAGS_value=-I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include
    ac_cv_env_CPP_set=set
    ac_cv_env_CPP_value=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-g++-4.2
    ac_cv_env_LDFLAGS_set=set
    ac_cv_env_LDFLAGS_value=&#39;--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/ -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/system&#39;
    ac_cv_env_LIBS_set=
    ac_cv_env_LIBS_value=
    ac_cv_env_build_alias_set=set
    ac_cv_env_build_alias_value=arm-apple-darwin10
    ac_cv_env_host_alias_set=set
    ac_cv_env_host_alias_value=arm
    ac_cv_env_target_alias_set=
    ac_cv_env_target_alias_value=
    ac_cv_objext=o
    ac_cv_path_install=&#39;/usr/bin/install -c&#39;
    ac_cv_prog_AWK=awk
    ac_cv_prog_CC=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
    ac_cv_prog_CPP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-g++-4.2
    ac_cv_prog_ac_ct_STRIP=strip
    ac_cv_prog_cc__Applications_Xcode_app_Contents_Developer_Platforms_iPhoneOS_platform_Developer_usr_bin_arm_apple_darwin10_llvm_gcc_4_2_c_o=yes
    ac_cv_prog_cc_c89=
    ac_cv_prog_cc_g=yes
    ac_cv_prog_make_make_set=yes
    am_cv_CC_dependencies_compiler_type=gcc3

    ## ----------------- ##
    ## Output variables. ##
    ## ----------------- ##

    AACPLUS_CFLAGS=&#39;&#39;
    AACPLUS_CPPFLAGS=&#39;&#39;
    AACPLUS_LIBS=&#39;&#39;
    AACPLUS_REQUIRES=&#39;&#39;
    ACLOCAL=&#39;${SHELL} /Users/md313/Documents/Developer/OpenSource/ffmpef4ios-build-scripts/external-libs/libaacplus-2.0.2/missing --run aclocal-1.12&#39;
    AMDEPBACKSLASH=&#39;\&#39;
    AMDEP_FALSE=&#39;#&#39;
    AMDEP_TRUE=&#39;&#39;
    AMTAR=&#39;$${TAR-tar}&#39;
    AR=&#39;&#39;
    AS=&#39;&#39;
    ASH=&#39;&#39;
    AUTOCONF=&#39;${SHELL} /Users/md313/Documents/Developer/OpenSource/ffmpef4ios-build-scripts/external-libs/libaacplus-2.0.2/missing --run autoconf&#39;
    AUTOHEADER=&#39;${SHELL} /Users/md313/Documents/Developer/OpenSource/ffmpef4ios-build-scripts/external-libs/libaacplus-2.0.2/missing --run autoheader&#39;
    AUTOMAKE=&#39;${SHELL} /Users/md313/Documents/Developer/OpenSource/ffmpef4ios-build-scripts/external-libs/libaacplus-2.0.2/missing --run automake-1.12&#39;
    AWK=&#39;awk&#39;
    BASH=&#39;/bin/sh&#39;
    CC=&#39;/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2&#39;
    CCDEPMODE=&#39;depmode=gcc3&#39;
    CFLAGS=&#39;-I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include&#39;
    CPP=&#39;/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-g++-4.2&#39;
    CPPFLAGS=&#39;-I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include&#39;
    CYGPATH_W=&#39;echo&#39;
    DEBUG=&#39;&#39;
    DEFS=&#39;&#39;
    DEPDIR=&#39;.deps&#39;
    DLLTOOL=&#39;&#39;
    DOWNLOADER_PROG=&#39;&#39;
    DOWNLOADER_PROG_CMD=&#39;&#39;
    DSYMUTIL=&#39;&#39;
    DUMPBIN=&#39;&#39;
    ECHO_C=&#39;\c&#39;
    ECHO_N=&#39;&#39;
    ECHO_T=&#39;&#39;
    EGREP=&#39;&#39;
    EXEEXT=&#39;&#39;
    FFTW3_CFLAGS=&#39;&#39;
    FFTW3_INCFLAGS=&#39;&#39;
    FFTW3_LDFLAGS=&#39;&#39;
    FFTW3_LIB=&#39;&#39;
    FGREP=&#39;&#39;
    GREP=&#39;&#39;
    HAVE_PKGCONFIG_FALSE=&#39;&#39;
    HAVE_PKGCONFIG_TRUE=&#39;&#39;
    INSTALL_DATA=&#39;${INSTALL} -m 644&#39;
    INSTALL_PROGRAM=&#39;${INSTALL}&#39;
    INSTALL_SCRIPT=&#39;${INSTALL}&#39;
    INSTALL_STRIP_PROGRAM=&#39;$(install_sh) -c -s&#39;
    LD=&#39;&#39;
    LDFLAGS=&#39;--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/ -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/system&#39;
    LIBOBJS=&#39;&#39;
    LIBS=&#39;&#39;
    LIBTOOL=&#39;&#39;
    LIBTOOL_DEPS=&#39;&#39;
    LIPO=&#39;&#39;
    LN_S=&#39;&#39;
    LTLIBOBJS=&#39;&#39;
    MAKEINFO=&#39;${SHELL} /Users/md313/Documents/Developer/OpenSource/ffmpef4ios-build-scripts/external-libs/libaacplus-2.0.2/missing --run makeinfo&#39;
    MANIFEST_TOOL=&#39;&#39;
    MKDIR_P=&#39;./install-sh -c -d&#39;
    NM=&#39;&#39;
    NMEDIT=&#39;&#39;
    OBJDUMP=&#39;&#39;
    OBJEXT=&#39;o&#39;
    OPT=&#39;&#39;
    OTOOL64=&#39;&#39;
    OTOOL=&#39;&#39;
    PACKAGE=&#39;libaacplus&#39;
    PACKAGE_BUGREPORT=&#39;Sergiy Guriev &lt;piratfm@ua.fm&gt;&#39;
    PACKAGE_NAME=&#39;libaacplus&#39;
    PACKAGE_STRING=&#39;libaacplus 2.0.2&#39;
    PACKAGE_TARNAME=&#39;libaacplus&#39;
    PACKAGE_URL=&#39;&#39;
    PACKAGE_VERSION=&#39;2.0.2&#39;
    PARAMETER_EXPANSION_STRING_REPLACE_CAPABLE_SHELL=&#39;&#39;
    PATCH=&#39;&#39;
    PATH_SEPARATOR=&#39;:&#39;
    PKGCONFIG=&#39;&#39;
    PROFILE=&#39;&#39;
    RANLIB=&#39;&#39;
    SED=&#39;&#39;
    SET_MAKE=&#39;&#39;
    SHELL=&#39;/bin/sh&#39;
    STRIP=&#39;strip&#39;
    UNZIP=&#39;&#39;
    VERSION=&#39;2.0.2&#39;
    ac_ct_AR=&#39;&#39;
    ac_ct_CC=&#39;&#39;
    ac_ct_DUMPBIN=&#39;&#39;
    am__EXEEXT_FALSE=&#39;&#39;
    am__EXEEXT_TRUE=&#39;&#39;
    am__fastdepCC_FALSE=&#39;#&#39;
    am__fastdepCC_TRUE=&#39;&#39;
    am__include=&#39;include&#39;
    am__isrc=&#39;&#39;
    am__leading_dot=&#39;.&#39;
    am__nodep=&#39;_no&#39;
    am__quote=&#39;&#39;
    am__tar=&#39;$${TAR-tar} chof - "$$tardir"&#39;
    am__untar=&#39;$${TAR-tar} xf -&#39;
    bindir=&#39;${exec_prefix}/bin&#39;
    build=&#39;arm-apple-darwin10&#39;
    build_alias=&#39;arm-apple-darwin10&#39;
    build_cpu=&#39;&#39;
    build_os=&#39;&#39;
    build_vendor=&#39;&#39;
    datadir=&#39;${datarootdir}&#39;
    datarootdir=&#39;${prefix}/share&#39;
    docdir=&#39;${datarootdir}/doc/${PACKAGE_TARNAME}&#39;
    dvidir=&#39;${docdir}&#39;
    exec_prefix=&#39;NONE&#39;
    host=&#39;arm&#39;
    host_alias=&#39;arm&#39;
    host_cpu=&#39;&#39;
    host_os=&#39;&#39;
    host_vendor=&#39;&#39;
    htmldir=&#39;${docdir}&#39;
    includedir=&#39;${prefix}/include&#39;
    infodir=&#39;${datarootdir}/info&#39;
    install_sh=&#39;${SHELL} /Users/md313/Documents/Developer/OpenSource/ffmpef4ios-build-scripts/external-libs/libaacplus-2.0.2/install-sh&#39;
    libdir=&#39;${exec_prefix}/lib&#39;
    libexecdir=&#39;${exec_prefix}/libexec&#39;
    localedir=&#39;${datarootdir}/locale&#39;
    localstatedir=&#39;${prefix}/var&#39;
    mandir=&#39;${datarootdir}/man&#39;
    mkdir_p=&#39;$(top_builddir)/./install-sh -c -d&#39;
    oldincludedir=&#39;/usr/include&#39;
    pdfdir=&#39;${docdir}&#39;
    prefix=&#39;/Users/md313/Documents/Developer/OpenSource/ffmpef4ios-build-scripts/external-libs/build/armv7&#39;
    program_transform_name=&#39;s,x,x,&#39;
    psdir=&#39;${docdir}&#39;
    sbindir=&#39;${exec_prefix}/sbin&#39;
    sharedstatedir=&#39;${prefix}/com&#39;
    sysconfdir=&#39;${prefix}/etc&#39;
    target_alias=&#39;&#39;

    ## ----------- ##
    ## confdefs.h. ##
    ## ----------- ##

    /* confdefs.h */
    #define PACKAGE_NAME "libaacplus"
    #define PACKAGE_TARNAME "libaacplus"
    #define PACKAGE_VERSION "2.0.2"
    #define PACKAGE_STRING "libaacplus 2.0.2"
    #define PACKAGE_BUGREPORT "Sergiy Guriev &lt;piratfm@ua.fm&gt;"
    #define PACKAGE_URL ""
    #define PACKAGE "libaacplus"
    #define VERSION "2.0.2"

    configure: exit 1