title: FFmpeg: Jpeg file to AVFrame
body: <p>I need to join several jpg files into video using FFmpeg library. But I have a problem with reading this files. Here is a function which reads image file and makes AVFrame:</p>
  
  <pre><code>AVFrame* OpenImage(const char* imageFileName)
  {
      AVFormatContext *pFormatCtx;
  
      if(av_open_input_file(&amp;pFormatCtx, imageFileName, NULL, 0, NULL)!=0)
      {
          printf("Can't open image file '%s'\n", imageFileName);
          return NULL;
      }       
  
      dump_format(pFormatCtx, 0, imageFileName, false);
  
      AVCodecContext *pCodecCtx;
  
      pCodecCtx = pFormatCtx-&gt;streams[0]-&gt;codec;
      pCodecCtx-&gt;width = W_VIDEO;
      pCodecCtx-&gt;height = H_VIDEO;
      pCodecCtx-&gt;pix_fmt = PIX_FMT_YUV420P;
  
      // Find the decoder for the video stream
      AVCodec *pCodec = avcodec_find_decoder(pCodecCtx-&gt;codec_id);
      if (!pCodec)
      {
          printf("Codec not found\n");
          return NULL;
      }
  
      // Open codec
      if(avcodec_open(pCodecCtx, pCodec)&lt;0)
      {
          printf("Could not open codec\n");
          return NULL;
      }
  
      // 
      AVFrame *pFrame;
  
      pFrame = avcodec_alloc_frame();
  
      if (!pFrame)
      {
          printf("Can't allocate memory for AVFrame\n");
          return NULL;
      }
  
      int frameFinished;
      int numBytes;
  
      // Determine required buffer size and allocate buffer
      numBytes = avpicture_get_size(PIX_FMT_YUVJ420P, pCodecCtx-&gt;width, pCodecCtx-&gt;height);
      uint8_t *buffer = (uint8_t *) av_malloc(numBytes * sizeof(uint8_t));
  
      avpicture_fill((AVPicture *) pFrame, buffer, PIX_FMT_YUVJ420P, pCodecCtx-&gt;width, pCodecCtx-&gt;height);
  
      // Read frame
  
      AVPacket packet;
  
      int framesNumber = 0;
      while (av_read_frame(pFormatCtx, &amp;packet) &gt;= 0)
      {
          if(packet.stream_index != 0)
              continue;
  
          int ret = avcodec_decode_video2(pCodecCtx, pFrame, &amp;frameFinished, &amp;packet);
          if (ret &gt; 0)
          {
              printf("Frame is decoded, size %d\n", ret);
              pFrame-&gt;quality = 4;
              return pFrame;
          }
          else
              printf("Error [%d] while decoding frame: %s\n", ret, strerror(AVERROR(ret)));
      }
  }
  </code></pre>
  
  <p>This causes no error but creates only black frame, no image. What is wrong?</p>