This is a static archive of the old Zorin Forum.

The information below may be outdated. Visit the new Zorin Forum here ›

If you have registered on the old forum, you will need to create an account on the new forum.

Compile GLmixer error

dvsapp

Tue Apr 17, 2012 12:32:31 am

Hello,
New Zorin user, long-time Debian user with a problem. I'm building a machine to use for video editing (video-mixer?) and found a nice live editing tool called Glmixer http://code.google.com/p/glmixer/. I need to compile it http://code.google.com/p/glmixer/wiki/Compilation

I run cmake, no errors, my output from make as follows:

Code:
dave@sjl:~$ cd build
dave@sjl:~/build$ make
[  1%] Generating qrc_qtpropertybrowser.cxx
[  2%] Generating qtbuttonpropertybrowser.moc
[  3%] Generating qtgroupboxpropertybrowser.moc
[  4%] Generating qtpropertybrowserutils_p.moc
[  5%] Generating qttreepropertybrowser.moc
[  6%] Generating qteditorfactory.moc
[  7%] Generating qtpropertybrowser.moc
[  8%] Generating qtpropertymanager.moc
[  9%] Generating qtvariantproperty.moc
Scanning dependencies of target QtProperty
[ 10%] Building CXX object libQtProperty/CMakeFiles/QtProperty.dir/qtbuttonpropertybrowser.cpp.o
[ 11%] Building CXX object libQtProperty/CMakeFiles/QtProperty.dir/qtgroupboxpropertybrowser.cpp.o
[ 12%] Building CXX object libQtProperty/CMakeFiles/QtProperty.dir/qtpropertybrowserutils.cpp.o
[ 13%] Building CXX object libQtProperty/CMakeFiles/QtProperty.dir/qttreepropertybrowser.cpp.o
[ 14%] Building CXX object libQtProperty/CMakeFiles/QtProperty.dir/qteditorfactory.cpp.o
[ 15%] Building CXX object libQtProperty/CMakeFiles/QtProperty.dir/qtpropertybrowser.cpp.o
[ 16%] Building CXX object libQtProperty/CMakeFiles/QtProperty.dir/qtpropertymanager.cpp.o
[ 17%] Building CXX object libQtProperty/CMakeFiles/QtProperty.dir/qtvariantproperty.cpp.o
[ 18%] Building CXX object libQtProperty/CMakeFiles/QtProperty.dir/qrc_qtpropertybrowser.cxx.o
Linking CXX static library libQtProperty.a
[ 18%] Built target QtProperty
[ 19%] Generating qrc_images.cxx
[ 20%] Generating CameraDialog.moc
[ 21%] Generating VideoFileDialogPreview.moc
[ 22%] Generating VideoFileDialog.moc
[ 23%] Generating VideoFileDisplayWidget.moc
[ 24%] Generating VideoFile.moc
[ 25%] Generating VideoSource.moc
[ 26%] Generating AlgorithmSource.moc
[ 27%] Generating AlgorithmSelectionDialog.moc
[ 28%] Generating SharedMemorySource.moc
[ 29%] Generating SharedMemoryDialog.moc
[ 30%] Generating SourceDisplayWidget.moc
[ 31%] Generating ViewRenderWidget.moc
[ 32%] Generating RenderingManager.moc
[ 33%] Generating RenderingEncoder.moc
[ 34%] Generating OutputRenderWindow.moc
[ 35%] Generating SourcePropertyBrowser.moc
[ 36%] Generating SpringCursor.moc
[ 37%] Generating DelayCursor.moc
[ 38%] Generating AxisCursor.moc
[ 39%] Generating LineCursor.moc
[ 40%] Generating FuzzyCursor.moc
[ 41%] Generating UserPreferencesDialog.moc
[ 42%] Generating GammaLevelsWidget.moc
[ 43%] Generating SessionSwitcher.moc
[ 44%] Generating SessionSwitcherWidget.moc
[ 45%] Generating glmixer.moc
[ 46%] Generating testbuttonframe.moc
[ 47%] Generating testwheelframe.moc
[ 48%] Generating ui_glmixer.h
[ 49%] Generating ui_VideoFileDialog.h
[ 50%] Generating ui_CameraDialog.h
[ 51%] Generating ui_AlgorithmSelectionDialog.h
[ 52%] Generating ui_UserPreferencesDialog.h
[ 53%] Generating ui_GammaLevelsDialog.h
[ 54%] Generating ui_SharedMemoryDialog.h
[ 55%] Generating qrc_icons.cxx
[ 56%] Generating qrc_textures.cxx
Scanning dependencies of target glmixer
[ 57%] Building CXX object src/CMakeFiles/glmixer.dir/glRenderWidget.cpp.o
[ 58%] Building CXX object src/CMakeFiles/glmixer.dir/CameraDialog.cpp.o
[ 59%] Building CXX object src/CMakeFiles/glmixer.dir/VideoFileDialogPreview.cpp.o
[ 60%] Building CXX object src/CMakeFiles/glmixer.dir/VideoFileDialog.cpp.o
[ 61%] Building CXX object src/CMakeFiles/glmixer.dir/VideoFileDisplayWidget.cpp.o
[ 62%] Building CXX object src/CMakeFiles/glmixer.dir/VideoFile.cpp.o
[ 63%] Building CXX object src/CMakeFiles/glmixer.dir/Source.cpp.o
[ 64%] Building CXX object src/CMakeFiles/glmixer.dir/VideoSource.cpp.o
[ 65%] Building CXX object src/CMakeFiles/glmixer.dir/CaptureSource.cpp.o
[ 66%] Building CXX object src/CMakeFiles/glmixer.dir/SvgSource.cpp.o
[ 67%] Building CXX object src/CMakeFiles/glmixer.dir/AlgorithmSource.cpp.o
[ 68%] Building CXX object src/CMakeFiles/glmixer.dir/AlgorithmSelectionDialog.cpp.o
[ 69%] Building CXX object src/CMakeFiles/glmixer.dir/SharedMemoryManager.cpp.o
[ 70%] Building CXX object src/CMakeFiles/glmixer.dir/SharedMemorySource.cpp.o
[ 71%] Building CXX object src/CMakeFiles/glmixer.dir/SharedMemoryDialog.cpp.o
[ 72%] Building CXX object src/CMakeFiles/glmixer.dir/SourceDisplayWidget.cpp.o
[ 73%] Building CXX object src/CMakeFiles/glmixer.dir/View.cpp.o
[ 74%] Building CXX object src/CMakeFiles/glmixer.dir/MixerView.cpp.o
[ 75%] Building CXX object src/CMakeFiles/glmixer.dir/GeometryView.cpp.o
[ 76%] Building CXX object src/CMakeFiles/glmixer.dir/LayersView.cpp.o
[ 77%] Building CXX object src/CMakeFiles/glmixer.dir/CatalogView.cpp.o
[ 78%] Building CXX object src/CMakeFiles/glmixer.dir/ViewRenderWidget.cpp.o
[ 79%] Building CXX object src/CMakeFiles/glmixer.dir/RenderingManager.cpp.o
[ 80%] Building CXX object src/CMakeFiles/glmixer.dir/RenderingEncoder.cpp.o
[ 81%] Building CXX object src/CMakeFiles/glmixer.dir/OutputRenderWindow.cpp.o
[ 82%] Building CXX object src/CMakeFiles/glmixer.dir/SourcePropertyBrowser.cpp.o
[ 83%] Building CXX object src/CMakeFiles/glmixer.dir/SpringCursor.cpp.o
[ 84%] Building CXX object src/CMakeFiles/glmixer.dir/DelayCursor.cpp.o
[ 85%] Building CXX object src/CMakeFiles/glmixer.dir/AxisCursor.cpp.o
[ 86%] Building CXX object src/CMakeFiles/glmixer.dir/LineCursor.cpp.o
[ 87%] Building CXX object src/CMakeFiles/glmixer.dir/FuzzyCursor.cpp.o
[ 88%] Building CXX object src/CMakeFiles/glmixer.dir/UserPreferencesDialog.cpp.o
[ 89%] Building CXX object src/CMakeFiles/glmixer.dir/GammaLevelsWidget.cpp.o
[ 90%] Building CXX object src/CMakeFiles/glmixer.dir/SessionSwitcher.cpp.o
[ 91%] Building CXX object src/CMakeFiles/glmixer.dir/SessionSwitcherWidget.cpp.o
[ 92%] Building CXX object src/CMakeFiles/glmixer.dir/glmixer.cpp.o
[ 93%] Building CXX object src/CMakeFiles/glmixer.dir/main.cpp.o
[ 94%] Building C object src/CMakeFiles/glmixer.dir/video_rec.c.o
/home/dave/glmixer/glmixer-read-only/src/video_rec.c: In function ‘video_rec_init’:
/home/dave/glmixer/glmixer-read-only/src/video_rec.c:189:5: error: ‘AVDictionary’ undeclared (first use in this function)
/home/dave/glmixer/glmixer-read-only/src/video_rec.c:189:5: note: each undeclared identifier is reported only once for each function it appears in
/home/dave/glmixer/glmixer-read-only/src/video_rec.c:189:19: error: ‘codec_opts’ undeclared (first use in this function)
/home/dave/glmixer/glmixer-read-only/src/video_rec.c:193:6: warning: implicit declaration of function ‘av_dict_set’
/home/dave/glmixer/glmixer-read-only/src/video_rec.c:200:6: warning: implicit declaration of function ‘av_get_pix_fmt_name’
/home/dave/glmixer/glmixer-read-only/src/video_rec.c:203:3: warning: format ‘%s’ expects type ‘char *’, but argument 6 has type ‘int’
/home/dave/glmixer/glmixer-read-only/src/video_rec.c:203:3: warning: format ‘%s’ expects type ‘char *’, but argument 6 has type ‘int’
/home/dave/glmixer/glmixer-read-only/src/video_rec.c:219:2: warning: implicit declaration of function ‘avformat_write_header’
/home/dave/glmixer/glmixer-read-only/src/video_rec.c: In function ‘sws_rec_deliver_vframe’:
/home/dave/glmixer/glmixer-read-only/src/video_rec.c:363:2: warning: passing argument 2 of ‘sws_scale’ from incompatible pointer type
/usr/include/libswscale/swscale.h:195:5: note: expected ‘const uint8_t * const*’ but argument is of type ‘uint8_t **’
make[2]: *** [src/CMakeFiles/glmixer.dir/video_rec.c.o] Error 1
make[1]: *** [src/CMakeFiles/glmixer.dir/all] Error 2
make: *** [all] Error 2
dave@sjl:~/build$


I got this to build and run in Debian, so I know it works. Here is a copy of the video_rec.c file that errors:

Code:
/*
* video_rec.c
*
*  Created on: Mar 16, 2011
*      Author: bh
*
*  This file is part of GLMixer.
*
*   GLMixer is free software: you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation, either version 3 of the License, or
*   (at your option) any later version.
*
*   GLMixer is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU General Public License for more details.
*
*   You should have received a copy of the GNU General Public License
*   along with GLMixer.  If not, see <http://www.gnu.org/licenses/>.
*
*   Copyright 2009, 2010 Bruno Herbelin
*
*/

#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
#include <libavutil/pixdesc.h>

#include "video_rec.h"
#include <stdio.h>

struct encoder {
   AVOutputFormat *fmt;
   AVFormatContext *oc;
   AVCodecContext *v_ctx;
   AVStream *v_st;
   void *vbuf_ptr;
   size_t vbuf_size;
};

struct converter {
   AVFrame *picture;
   uint8_t *picture_buf;
   struct SwsContext *img_convert_ctx;
};



video_rec_t *
video_rec_init(const char *filename, encodingformat f, int width, int height, int fps, char *errormessage)
{
   AVCodec *c = NULL;
    char buf[1024];

   video_rec_t *rec = calloc(1, sizeof(video_rec_t));
   rec->enc = calloc(1, sizeof(struct encoder));

   // fill in basic info
   rec->width = width;
   rec->height = height;
   rec->fps = fps;
   rec->framenum = 0;

   // setup according to format
   char f_name[9] = "";
   enum CodecID f_codec_id = CODEC_ID_NONE;
   enum PixelFormat f_pix_fmt =  PIX_FMT_NONE;
   switch (f){
   case FORMAT_MPG_MPEG1:
      snprintf(f_name, 9, "mpeg");
      f_codec_id = CODEC_ID_MPEG1VIDEO;
      f_pix_fmt =  PIX_FMT_YUV420P;
      rec->pt2RecordingFunction = &sws_rec_deliver_vframe;
      rec->conv = calloc(1, sizeof(struct converter));
      snprintf(rec->suffix, 6, "mpg");
      snprintf(rec->description, 64, "MPEG Video (*.mpg *.mpeg)");
      break;
   case FORMAT_WMV_WMV2:
      snprintf(f_name, 9, "avi");
      f_codec_id = CODEC_ID_WMV2;
      f_pix_fmt =  PIX_FMT_YUV420P;
      rec->pt2RecordingFunction = &sws_rec_deliver_vframe;
      rec->conv = calloc(1, sizeof(struct converter));
      snprintf(rec->suffix, 6, "wmv");
      snprintf(rec->description, 64, "Windows Media Video (*.wmv)");
      break;
   case FORMAT_FLV_FLV1:
      snprintf(f_name, 9, "flv");
      f_codec_id = CODEC_ID_FLV1;
      f_pix_fmt =  PIX_FMT_YUV420P;
      rec->pt2RecordingFunction = &sws_rec_deliver_vframe;
      rec->conv = calloc(1, sizeof(struct converter));
      snprintf(rec->suffix, 6, "flv");
      snprintf(rec->description, 64, "Flash Video (*.flv)");
      break;
   case FORMAT_MP4_MPEG4:
      snprintf(f_name, 9, "mp4");
      f_codec_id = CODEC_ID_MPEG4;
      f_pix_fmt =  PIX_FMT_YUV420P;
      rec->pt2RecordingFunction = &sws_rec_deliver_vframe;
      rec->conv = calloc(1, sizeof(struct converter));
      snprintf(rec->suffix, 6, "mp4");
      snprintf(rec->description, 64, "MPEG 4 Video (*.mp4)");
      break;
   case FORMAT_MPG_MPEG2:
      snprintf(f_name, 9, "mpeg");
      f_codec_id = CODEC_ID_MPEG2VIDEO;
      f_pix_fmt =  PIX_FMT_YUV420P;
      rec->pt2RecordingFunction = &sws_rec_deliver_vframe;
      rec->conv = calloc(1, sizeof(struct converter));
      snprintf(rec->suffix, 6, "mpg");
      snprintf(rec->description, 64, "MPEG Video (*.mpg *.mpeg)");
      break;
   case FORMAT_AVI_FFVHUFF:
      snprintf(f_name, 9, "avi");
      f_codec_id = CODEC_ID_FFVHUFF;
      f_pix_fmt =  PIX_FMT_BGRA;
      rec->pt2RecordingFunction = &rec_deliver_vframe;
      rec->conv = NULL;
      snprintf(rec->suffix, 6, "avi");
      snprintf(rec->description, 64, "AVI Video (*.avi)");
      break;
   default:
   case FORMAT_AVI_RAW:
      snprintf(f_name, 9, "avi");
//      snprintf(f_name, 9, "rawvideo");
      f_codec_id = CODEC_ID_RAWVIDEO;
      f_pix_fmt =  PIX_FMT_BGRA;
      rec->pt2RecordingFunction = &rec_deliver_vframe;
      rec->conv = NULL;
      snprintf(rec->suffix, 6, "avi");
      snprintf(rec->description, 64, "AVI Video (*.avi)");
      break;
   }

   //
   // create avcodec encoding objects
   //

    av_register_all();
   avcodec_register_all();

#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,60,0)
   rec->enc->fmt = guess_stream_format(f_name, NULL, NULL);
#else
   rec->enc->fmt = av_guess_format(f_name, NULL, NULL);
#endif

   if(rec->enc->fmt == NULL) {
      snprintf(errormessage, 256, "File format %s not supported.\nUnable to start recording %s.", f_name, filename);
      video_rec_free(rec);
      return NULL;
   }

   rec->enc->oc = avformat_alloc_context();
   rec->enc->oc->oformat = rec->enc->fmt;
   snprintf(rec->enc->oc->filename, sizeof(rec->enc->oc->filename), "%s", filename);


   // create the stream for the encoder
   rec->enc->v_st = av_new_stream(rec->enc->oc, 0);
   rec->enc->v_ctx = rec->enc->v_st->codec;

#if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(53,0,0)
   rec->enc->v_ctx->codec_type = AVMEDIA_TYPE_VIDEO;
#else
   rec->enc->v_ctx->codec_type = CODEC_TYPE_VIDEO;
#endif
   rec->enc->v_ctx->codec_id = f_codec_id;

   rec->enc->v_ctx->width = width;
   rec->enc->v_ctx->height = height;
   rec->enc->v_ctx->time_base.den = fps;

   rec->enc->v_ctx->time_base.num = 1;
   rec->enc->v_ctx->pix_fmt = f_pix_fmt;
   rec->enc->v_ctx->coder_type = 1;

   c = avcodec_find_encoder(f_codec_id);
   if (c == NULL) {
      snprintf(errormessage, 256, "Cannot find video codec for %s file.\nUnable to start recording.", f_name);
      video_rec_free(rec);
      return NULL;
   }

    // options for AVCodecContext
    AVDictionary *codec_opts = NULL;

    // parameters given
     snprintf(buf, sizeof(buf), "%d/%d", 1, fps);
     av_dict_set(&codec_opts, "time_base", buf, 0);
     snprintf(buf, sizeof(buf), "%d", width);
     av_dict_set(&codec_opts, "width", buf, 0);
     snprintf(buf, sizeof(buf), "%d", height);
     av_dict_set(&codec_opts, "height", buf, 0);

     av_dict_set(&codec_opts, "codec_type", "AVMEDIA_TYPE_VIDEO", 0);
     av_dict_set(&codec_opts, "pix_fmt", av_get_pix_fmt_name(f_pix_fmt), 0 );

   if(avcodec_open(rec->enc->v_ctx, c) < 0) {
      snprintf(errormessage, 256, "Cannot open video codec %s (at %d fps).\nUnable to start recording. \n%s", c->name, fps, av_get_pix_fmt_name( f_pix_fmt ));
      video_rec_free(rec);
      return NULL;
   }

#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,80,0)
   if(url_fopen(&rec->enc->oc->pb, filename, URL_WRONLY) < 0) {
#else
   if(avio_open(&rec->enc->oc->pb, filename, URL_WRONLY) < 0) {
#endif
      snprintf(errormessage, 256, "Cannot create temporary file %s.\nUnable to start recording.", filename);
      video_rec_free(rec);
      return NULL;
   }

    // no options for AVFormatContext
   avformat_write_header(rec->enc->oc, NULL);

   // if converter was created, we will need it !
   if (rec->conv != NULL) {
      // create picture bufffer and frame to store converted YUV image
      int size = rec->enc->v_ctx->width * rec->enc->v_ctx->height;
      rec->conv->picture_buf = (uint8_t *) malloc((size * 3) / 2); /* size for YUV 420 */
      rec->conv->picture= avcodec_alloc_frame();
      rec->conv->picture->data[0] = rec->conv->picture_buf;
      rec->conv->picture->data[1] = rec->conv->picture->data[0] + size;
      rec->conv->picture->data[2] = rec->conv->picture->data[1] + size / 4;
      rec->conv->picture->linesize[0] = rec->enc->v_ctx->width;
      rec->conv->picture->linesize[1] = rec->enc->v_ctx->width / 2;
      rec->conv->picture->linesize[2] = rec->enc->v_ctx->width / 2;

      // create conversion context
      rec->conv->img_convert_ctx = sws_getCachedContext(NULL, rec->width, rec->height, PIX_FMT_BGRA,
                                       rec->enc->v_ctx->width, rec->enc->v_ctx->height, f_pix_fmt,
                                       SWS_POINT, NULL, NULL, NULL);
      if (rec->conv->img_convert_ctx == NULL){
         snprintf(errormessage, 256, "Could not create conversion context.\nUnable to record to %s.", filename);
         video_rec_free(rec);
         return NULL;
      }

   }
   // encoder buffer
   rec->enc->vbuf_size = 2000000;
   rec->enc->vbuf_ptr = av_malloc(rec->enc->vbuf_size);

   return rec;
}


/**
*
*/

int video_rec_stop(video_rec_t *rec)
{
   if (rec == NULL)
      return 0;

   // end file
   av_write_trailer(rec->enc->oc);
   // close file

#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,80,0)
   url_fclose(rec->enc->oc->pb);
#else
   avio_close(rec->enc->oc->pb);
#endif

   int i = 0;
   for(; i < rec->enc->oc->nb_streams; i++) {
      AVStream *st = rec->enc->oc->streams[i];
      avcodec_close(st->codec);
      av_free(st->codec);
      av_free(st);
   }

   return rec->framenum;
}

void video_rec_free(video_rec_t *rec)
{
   if (rec) {
      // free data structures
      if (rec->enc->oc)
         av_free(rec->enc->oc);
      if (rec->enc->vbuf_ptr)
         av_free(rec->enc->vbuf_ptr);
      if (rec->enc)
         free(rec->enc);
      if (rec->conv) {
         free(rec->conv->picture_buf);
         av_free(rec->conv->picture);
         if (rec->conv->img_convert_ctx)
            sws_freeContext(rec->conv->img_convert_ctx);
         free(rec->conv);
      }
      free(rec);
   }
}

/**
*
*/
void
rec_deliver_vframe(video_rec_t *rec, void *data)
{
   int r;
   AVPacket pkt;

   AVFrame frame;
   memset(&frame, 0, sizeof(frame));
   int linesize = rec->width * 4;
   frame.data[0] = data + linesize * (rec->height - 1);
   frame.linesize[0] = -linesize;
   frame.pts = 1000000LL * rec->framenum / rec->fps;

   r = avcodec_encode_video(rec->enc->v_ctx, rec->enc->vbuf_ptr, rec->enc->vbuf_size, &frame);
   if(r == 0)
      return;

   av_init_packet(&pkt);

   if(rec->enc->v_ctx->coded_frame->pts != AV_NOPTS_VALUE)
      pkt.pts = av_rescale_q(rec->enc->v_ctx->coded_frame->pts,  AV_TIME_BASE_Q, rec->enc->v_st->time_base);

   if(rec->enc->v_ctx->coded_frame->key_frame)
#if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(53,0,0)
      pkt.flags |= AV_PKT_FLAG_KEY;
#else
      pkt.flags |= PKT_FLAG_KEY;
#endif

   pkt.stream_index = rec->enc->v_st->index;
   pkt.data = rec->enc->vbuf_ptr;
   pkt.size = r;

   av_interleaved_write_frame(rec->enc->oc, &pkt);

   // one more frame done !
   rec->framenum++;
}


/**
*
*/
void
sws_rec_deliver_vframe(video_rec_t *rec, void *data)
{
   int r;
   AVPacket pkt;

   AVFrame frame;
   memset(&frame, 0, sizeof(frame));
   int linesize = rec->width * 4;
   frame.data[0] = data + linesize * (rec->height - 1);
   frame.linesize[0] = -linesize;

   // convert buffer to avcodec frame
   sws_scale(rec->conv->img_convert_ctx, frame.data, frame.linesize, 0, rec->height, rec->conv->picture->data, rec->conv->picture->linesize);
   rec->conv->picture->pts = 1000000LL * rec->framenum / rec->fps;

   r = avcodec_encode_video(rec->enc->v_ctx, rec->enc->vbuf_ptr, rec->enc->vbuf_size, rec->conv->picture);
   if(r == 0)
      return;

   av_init_packet(&pkt);

   if(rec->enc->v_ctx->coded_frame->pts != AV_NOPTS_VALUE)
      pkt.pts = av_rescale_q(rec->enc->v_ctx->coded_frame->pts,  AV_TIME_BASE_Q, rec->enc->v_st->time_base);

   if(rec->enc->v_ctx->coded_frame->key_frame)
#if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(53,0,0)
      pkt.flags |= AV_PKT_FLAG_KEY;
#else
      pkt.flags |= PKT_FLAG_KEY;
#endif

   pkt.stream_index = rec->enc->v_st->index;
   pkt.data = rec->enc->vbuf_ptr;
   pkt.size = r;

   av_interleaved_write_frame(rec->enc->oc, &pkt);

   // one more frame done !
   rec->framenum++;

}




I still new with compiling, but tried to find something to no avail. Most of the versions of the libs used are the same as Debian Stable, where it compiled no problem.
Any ideas appreciated.

Wolfman

Tue Apr 17, 2012 5:25:00 am

Hi,

I don't do it myself but you can try a different editor:

http://techcityinc.com/2009/02/04/top-1 ... ntu-linux/

and/or:

http://www.pitivi.org/manual/

I have used kdenlive which is in the repo (Pitivi too!) and you won't have to scratch your head trying to install it!!.

Regards Wolfman :D

dvsapp

Wed Apr 18, 2012 1:53:01 pm

Thanks for the input, but what I need is more of a video mixer, not an editor. Glmixer allows live mixing of video sources (capture cards, webcams, etc) similar to Webcamstudio, but allows live previewing of the sources while mixing them. The best example from the "Windows World" is http://vidblaster.com/