LibVLC SampleCode Thumbnailer

From VideoLAN Wiki
Revision as of 23:21, 3 December 2007 by Pdherbemont (talk | contribs) (Initial Creation.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This sample code will generate a thumbnail from any media.

/* Copyright Rafael Carre (licence WTFPL) */
#include <stdio.h>
#include <vlc/libvlc.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

static libvlc_exception_t ex;

static void catch (void)
{
   if (libvlc_exception_raised (&ex))
   {
       fprintf (stderr, "Exception: %s\n",
                libvlc_exception_get_message (&ex));
       exit(1);
   }

   libvlc_exception_clear (&ex);
}

#define usage() \
       fprintf( stderr, \
           "Usage: %s input output\n" \
           "input being any video VLC can read, and output a png file" \
           , argv[0] )

int main( int argc, const char **argv )
{
   if( argc != 3 )
   {
       usage();
       if( argc == 2 && ( !strcmp( argv[1], "-h" ) || strcmp( argv[1], "--help") ) )
           return 0;
       else
           return 1;
   }

   const char *input = argv[1];
   const char *output = argv[2];

   libvlc_exception_init( &ex );

   const char* const args[] = {
       "-I", "dummy",                      /* no interface */
       "--vout", "dummy",                  /* we don't want video */
       "--no-audio",                       /* we don't want audio */
       "--verbose=1",                      /* show only errors & warnings */
       "--no-media-library",               /* don't want that */
       "--services-discovery", "",         /* nor that */
       "--no-video-title-show",            /* nor the filename displayed */
       "--no-sub-autodetect",              /* don't want subtitles */
       "--control", "",                    /* don't want interface */
       "--extraintf", ""                   /* AT ALL ! */
   };
 
   int nargs = sizeof(args) / sizeof(args[0]);
   libvlc_instance_t *libvlc = libvlc_new( nargs, args, &ex );
   catch();

   libvlc_media_instance_t *mi;
   libvlc_media_descriptor_t *md;

   md = libvlc_media_descriptor_new( libvlc, input, &ex );
   catch();
   
   mi = libvlc_media_instance_new_from_media_descriptor( md, &ex );
   catch();
   
   libvlc_media_descriptor_release( md );

   libvlc_media_instance_play( mi, &ex );
   catch();
   
   /* go to position 30% to avoid introductions */
   libvlc_media_instance_set_position( mi, 0.30, &ex );
   catch();
   
   /* leave vlc some time to start playing */
   sleep(1);
   
   libvlc_video_take_snapshot( mi, (char*)output, &ex );
   catch();
   
   libvlc_media_instance_stop( mi, &ex );
   catch();
   
   libvlc_media_instance_release( mi );
   
   libvlc_release( libvlc, &ex );
   catch();
   
   return 0;
}