jpeglib and FFmpeg updated

This commit is contained in:
Joachim Schoeberl 2009-04-05 15:10:33 +00:00
parent 42e72d3bb6
commit 24ec58f024
3 changed files with 56 additions and 14 deletions

View File

@ -58,10 +58,26 @@ AC_ARG_ENABLE([parallel],
] ]
) )
# [AC_SUBST([MPI_INCLUDES], "-I/opt/mpich/include -DPARALLEL -I/home/joachim/download/metis-4.0/Lib -DMETIS") # [AC_SUBST([MPI_INCLUDES], "-I/opt/mpich/include -DPARALLEL -I/home/joachim/download/metis-4.0/Lib -DMETIS")
# AC_SUBST([MPI_LIBS], "-L/home/joachim/download/metis-4.0 -lmetis -L/opt/mpich/ch-p4/lib64 -lmpich") # AC_SUBST([MPI_LIBS], "-L/home/joachim/download/metis-4.0 -lmetis -L/opt/mpich/ch-p4/lib64 -lmpich")
AC_ARG_ENABLE([jpeglib],
[ --enable-jpeglib enable snapshots using jpeglib],
[AC_SUBST([JPEGLIB_INCLUDES], "-DJPEGLIB")
AC_SUBST([JPEGLIB_LIBS], "-ljpeg")
]
)
AC_ARG_ENABLE([ffmpeg],
[ --enable-ffmpeg enable video recording with FFmpeg, uses libavcodec],
[AC_SUBST([FFMPEG_INCLUDES], "-DFFMPEG")
AC_SUBST([FFMPEG_LIBS], "-lavutil -lavformat -lavcodec -lavutil -lswscale -lz -lbz2")
]
)
# AC_HEADER_STDC # AC_HEADER_STDC
AC_CONFIG_HEADERS(config.h) AC_CONFIG_HEADERS(config.h)

View File

@ -1,6 +1,6 @@
include_HEADERS = include_HEADERS =
AM_CPPFLAGS = -I$(top_srcdir)/libsrc/include -I$(top_srcdir)/libsrc/interface -DOPENGL -D$(TOGL_WINDOWINGSYSTEM) $(OCCFLAGS) $(TCL_INCLUDES) $(MPI_INCLUDES) AM_CPPFLAGS = -I$(top_srcdir)/libsrc/include -I$(top_srcdir)/libsrc/interface -DOPENGL -D$(TOGL_WINDOWINGSYSTEM) $(OCCFLAGS) $(TCL_INCLUDES) $(MPI_INCLUDES) $(FFMPEG_INCLUDES) $(JPEGLIB_INCLUDES)
bin_PROGRAMS = netgen bin_PROGRAMS = netgen
netgen_SOURCES = demoview.cpp ngappinit.cpp ngpkg.cpp onetcl.cpp nginterface.cpp nginterface_v2.cpp parallelfunc.cpp parallelinterface.cpp demoview.hpp parallelfunc.hpp togl_1_7.h netgen_SOURCES = demoview.cpp ngappinit.cpp ngpkg.cpp onetcl.cpp nginterface.cpp nginterface_v2.cpp parallelfunc.cpp parallelinterface.cpp demoview.hpp parallelfunc.hpp togl_1_7.h
@ -16,7 +16,7 @@ netgen_LDADD = $(top_builddir)/libsrc/visualization/libvisual.a \
$(top_builddir)/libsrc/gprim/libgprim.la \ $(top_builddir)/libsrc/gprim/libgprim.la \
$(top_builddir)/libsrc/linalg/libla.la \ $(top_builddir)/libsrc/linalg/libla.la \
$(top_builddir)/libsrc/general/libgeneral.la \ $(top_builddir)/libsrc/general/libgeneral.la \
$(OCCLIBS) -L$(TK_BIN_DIR)/Togl1.7 $(TOGLLIBDIR) -lTogl1.7 $(LIBGLU) $(TK_LIB_SPEC) $(TCL_LIB_SPEC) $(MPI_LIBS) $(PKG_LIBS) $(OCCLIBS) -L$(TK_BIN_DIR)/Togl1.7 $(TOGLLIBDIR) -lTogl1.7 $(LIBGLU) $(TK_LIB_SPEC) $(TCL_LIB_SPEC) $(MPI_LIBS) $(FFMPEG_LIBS) $(JPEGLIB_LIBS) $(PKG_LIBS)
# #

View File

@ -57,10 +57,15 @@ namespace netgen
#endif #endif
#ifdef VIDEOCLIP #ifdef JPEGLIB
#include <jpeglib.h> #include <jpeglib.h>
#endif
#ifdef FFMPEG
extern "C" { extern "C" {
#include <ffmpeg/avcodec.h> #include <ffmpeg/avcodec.h>
#include <ffmpeg/avformat.h>
#include <ffmpeg/swscale.h>
} }
#endif #endif
@ -3335,7 +3340,7 @@ namespace netgen
#if TOGL_MAJOR_VERSION==1 #if TOGL_MAJOR_VERSION==1
#ifndef VIDEOCLIP #ifndef JPEGLIB
static int Ng_SnapShot (struct Togl * togl, static int Ng_SnapShot (struct Togl * togl,
int argc, tcl_const char *argv[]) int argc, tcl_const char *argv[])
{ {
@ -3459,12 +3464,16 @@ namespace netgen
#endif #endif
#ifdef VIDEOCLIP
// VIDEO CLIP:
#define INBUF_SIZE 4096
#ifdef FFMPEG
#define STATE_READY 0 #define STATE_READY 0
#define STATE_STARTED 1 #define STATE_STARTED 1
#define INBUF_SIZE 4096
#define DEFAULT_B_FRAMES 3 #define DEFAULT_B_FRAMES 3
// #define DEFAULT_B_FRAMES 0 // #define DEFAULT_B_FRAMES 0
#define DEFAULT_GOP_SIZE 200 #define DEFAULT_GOP_SIZE 200
@ -3474,7 +3483,6 @@ namespace netgen
// #define DEFAULT_MPG_BUFSIZE 500000 // #define DEFAULT_MPG_BUFSIZE 500000
#define DEFAULT_MPG_BUFSIZE 500000 #define DEFAULT_MPG_BUFSIZE 500000
typedef struct buffer_s { typedef struct buffer_s {
uint8_t *MPG; uint8_t *MPG;
uint8_t *YUV; uint8_t *YUV;
@ -3504,6 +3512,8 @@ namespace netgen
cout << " size=" << bytes << " PSNR(Y)=" << Ypsnr << " dB q=" << (float)quality << endl; cout << " size=" << bytes << " PSNR(Y)=" << Ypsnr << " dB q=" << (float)quality << endl;
} }
static int Ng_VideoClip (struct Togl * togl, static int Ng_VideoClip (struct Togl * togl,
int argc, tcl_const char *argv[]) int argc, tcl_const char *argv[])
{ {
@ -3523,6 +3533,7 @@ namespace netgen
static CodecID codec_id = CODEC_ID_MPEG1VIDEO; static CodecID codec_id = CODEC_ID_MPEG1VIDEO;
static FILE *MPGfile; static FILE *MPGfile;
static buffer_t buff; static buffer_t buff;
static struct SwsContext *img_convert_ctx;
if (strcmp (argv[2], "init") == 0) if (strcmp (argv[2], "init") == 0)
@ -3534,6 +3545,8 @@ namespace netgen
return TCL_ERROR; return TCL_ERROR;
} }
// Open output file: // Open output file:
//------------------- //-------------------
const char * filename = argv[3]; const char * filename = argv[3];
@ -3560,8 +3573,7 @@ namespace netgen
// Initialize libavcodec: // Initialize libavcodec:
//----------------------- //-----------------------
if( !initialized ) { if( !initialized ) {
avcodec_init(); av_register_all();
avcodec_register_all();
initialized = 1; initialized = 1;
} }
@ -3622,6 +3634,8 @@ namespace netgen
return TCL_OK; return TCL_OK;
} }
else if (strcmp (argv[2], "addframe") == 0) else if (strcmp (argv[2], "addframe") == 0)
{ {
// Can't compress if status != started: // Can't compress if status != started:
@ -3647,8 +3661,19 @@ namespace netgen
// Convert to YUV: // Convert to YUV:
//---------------- //----------------
img_convert( (AVPicture*)YUVpicture, PIX_FMT_YUV420P, if( img_convert_ctx == NULL )
(AVPicture*)RGBpicture, PIX_FMT_RGB24, nx, ny ); img_convert_ctx = sws_getContext( nx, ny, PIX_FMT_RGB24,
nx, ny, PIX_FMT_YUV420P,
SWS_BICUBIC, NULL, NULL, NULL );
if( img_convert_ctx == NULL ) {
cout << "can't initialize scaler context" << endl;
return TCL_ERROR;
}
sws_scale( img_convert_ctx, RGBpicture->data, RGBpicture->linesize,
0, ny, YUVpicture->data, YUVpicture->linesize );
// Encode frame: // Encode frame:
//-------------- //--------------
@ -3662,6 +3687,7 @@ namespace netgen
} }
else if (strcmp (argv[2], "finalize") == 0) else if (strcmp (argv[2], "finalize") == 0)
{ {
// Can't stop if status != started: // Can't stop if status != started:
@ -3703,9 +3729,9 @@ namespace netgen
cout << "finalized" << endl; cout << "finalized" << endl;
return TCL_OK; return TCL_OK;
}
}
}
}
#else #else