title: Using libVLC as a video decoder
body: <p>I'm attempting to use libVLC as a video decoder for a motion detection project. Previously I was using ffmpeg libraries, but some issues with Matroska files brought me here. Along with playing video back at the correct rate, I also want to be able to get one frame after another at the fastest rate my system can handle, as once the user sets up some parameters, I want the motion detection algorithm to run through the video as quickly as it can. My libVLC setup code looks like this (error handling and minor details omitted for brevity):</p>
  
  <pre><code>const char* vlc_argv[] =
  {
      "--no-audio", /* skip any audio track */
  };
  libvlc_instance_t* inst = libvlc_new(sizeof(vlc_argv) / sizeof(*vlc_argv), vlc_argv);
  auto media = libvlc_media_new_path (inst, filename.c_str());
  player = libvlc_media_player_new_from_media(media);
  libvlc_media_release(media);
  
  // Needed to initialize the player ?
  libvlc_media_player_play(player);
  libvlc_media_player_pause(player);
  
  fps = libvlc_media_player_get_fps(player);
  length = libvlc_media_player_get_length(player);
  width = libvlc_video_get_width(player);
  height = libvlc_video_get_height(player);
  
  // TODO: Add libvlc_video_set_callbacks to set up callbacks to render to memory buffer
  </code></pre>
  
  <p>However, I am left with the following questions:</p>
  
  <ol>
  <li>Is there a more straightforward way to initialize the media player without starting playback besides calling <code>libvlc_media_player_play</code> then <code>libvlc_media_player_pause</code>?</li>
  <li>All of the <code>get</code> functions (<code>fps, length, width, height</code>) all return zero. Do I need to do something like read the first frame to get these values, and if so, how am I supposed to know how large my decoded frame buffer must be?</li>
  </ol>