Commit d87a56a6 authored by Andrey Morozov's avatar Andrey Morozov

added support new ffmpeg (0.8.X)

parent 680ec04b
rem gcc -Wall -shared -o opencv_ffmpeg.dll -O3 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat -lavcodec -lavdevice -lswscale -lavutil -lwsock32 -lpthreadGE2
gcc -Wall -shared -o opencv_ffmpeg.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat -lavcodec -lavdevice -lswscale -lavutil -lwsock32 gcc -Wall -shared -o opencv_ffmpeg.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat -lavcodec -lavdevice -lswscale -lavutil -lwsock32
set path=c:\apps\mingw64\bin;%path% & gcc -Wall -shared -o opencv_ffmpeg_64.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat64 -lavcodec64 -lavdevice64 -lswscale64 -lavutil64 -lavcore64 -lwsock32 set path=c:\apps\mingw64\bin;%path% & gcc -Wall -shared -o opencv_ffmpeg_64.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat64 -lavcodec64 -lavdevice64 -lswscale64 -lavutil64 -lavcore64 -lwsock32
\ No newline at end of file
...@@ -54,16 +54,16 @@ extern "C" { ...@@ -54,16 +54,16 @@ extern "C" {
//YV //YV
//-----------New for Qt //-----------New for Qt
/* For font */ /* For font */
enum { CV_FONT_LIGHT = 25,//QFont::Light, enum { CV_FONT_LIGHT = 25,//QFont::Light,
CV_FONT_NORMAL = 50,//QFont::Normal, CV_FONT_NORMAL = 50,//QFont::Normal,
CV_FONT_DEMIBOLD = 63,//QFont::DemiBold, CV_FONT_DEMIBOLD = 63,//QFont::DemiBold,
CV_FONT_BOLD = 75,//QFont::Bold, CV_FONT_BOLD = 75,//QFont::Bold,
CV_FONT_BLACK = 87 //QFont::Black CV_FONT_BLACK = 87 //QFont::Black
}; };
enum { CV_STYLE_NORMAL = 0,//QFont::StyleNormal, enum { CV_STYLE_NORMAL = 0,//QFont::StyleNormal,
CV_STYLE_ITALIC = 1,//QFont::StyleItalic, CV_STYLE_ITALIC = 1,//QFont::StyleItalic,
CV_STYLE_OBLIQUE = 2 //QFont::StyleOblique CV_STYLE_OBLIQUE = 2 //QFont::StyleOblique
}; };
/* ---------*/ /* ---------*/
...@@ -98,23 +98,23 @@ CVAPI(int) cvStartWindowThread(); ...@@ -98,23 +98,23 @@ CVAPI(int) cvStartWindowThread();
// --------- YV --------- // --------- YV ---------
enum enum
{ {
//These 3 flags are used by cvSet/GetWindowProperty //These 3 flags are used by cvSet/GetWindowProperty
CV_WND_PROP_FULLSCREEN = 0,//to change/get window's fullscreen property CV_WND_PROP_FULLSCREEN = 0,//to change/get window's fullscreen property
CV_WND_PROP_AUTOSIZE = 1,//to change/get window's autosize property CV_WND_PROP_AUTOSIZE = 1,//to change/get window's autosize property
CV_WND_PROP_ASPECTRATIO= 2,//to change/get window's aspectratio property CV_WND_PROP_ASPECTRATIO= 2,//to change/get window's aspectratio property
// //
//These 2 flags are used by cvNamedWindow and cvSet/GetWindowProperty //These 2 flags are used by cvNamedWindow and cvSet/GetWindowProperty
CV_WINDOW_NORMAL = 0x00000000,//the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size CV_WINDOW_NORMAL = 0x00000000,//the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size
CV_WINDOW_AUTOSIZE = 0x00000001,//the user cannot resize the window, the size is constrainted by the image displayed CV_WINDOW_AUTOSIZE = 0x00000001,//the user cannot resize the window, the size is constrainted by the image displayed
// //
//Those flags are only for Qt //Those flags are only for Qt
CV_GUI_EXPANDED = 0x00000000,//status bar and tool bar CV_GUI_EXPANDED = 0x00000000,//status bar and tool bar
CV_GUI_NORMAL = 0x00000010,//old fashious way CV_GUI_NORMAL = 0x00000010,//old fashious way
// //
//These 3 flags are used by cvNamedWindow and cvSet/GetWindowProperty //These 3 flags are used by cvNamedWindow and cvSet/GetWindowProperty
CV_WINDOW_FULLSCREEN = 1,//change the window to fullscreen CV_WINDOW_FULLSCREEN = 1,//change the window to fullscreen
CV_WINDOW_FREERATIO = 0x00000100,//the image expends as much as it can (no ratio constraint) CV_WINDOW_FREERATIO = 0x00000100,//the image expends as much as it can (no ratio constraint)
CV_WINDOW_KEEPRATIO = 0x00000000//the ration image is respected. CV_WINDOW_KEEPRATIO = 0x00000000//the ration image is respected.
}; };
/* create window */ /* create window */
...@@ -162,26 +162,26 @@ CVAPI(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name ...@@ -162,26 +162,26 @@ CVAPI(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name
enum enum
{ {
CV_EVENT_MOUSEMOVE =0, CV_EVENT_MOUSEMOVE =0,
CV_EVENT_LBUTTONDOWN =1, CV_EVENT_LBUTTONDOWN =1,
CV_EVENT_RBUTTONDOWN =2, CV_EVENT_RBUTTONDOWN =2,
CV_EVENT_MBUTTONDOWN =3, CV_EVENT_MBUTTONDOWN =3,
CV_EVENT_LBUTTONUP =4, CV_EVENT_LBUTTONUP =4,
CV_EVENT_RBUTTONUP =5, CV_EVENT_RBUTTONUP =5,
CV_EVENT_MBUTTONUP =6, CV_EVENT_MBUTTONUP =6,
CV_EVENT_LBUTTONDBLCLK =7, CV_EVENT_LBUTTONDBLCLK =7,
CV_EVENT_RBUTTONDBLCLK =8, CV_EVENT_RBUTTONDBLCLK =8,
CV_EVENT_MBUTTONDBLCLK =9 CV_EVENT_MBUTTONDBLCLK =9
}; };
enum enum
{ {
CV_EVENT_FLAG_LBUTTON =1, CV_EVENT_FLAG_LBUTTON =1,
CV_EVENT_FLAG_RBUTTON =2, CV_EVENT_FLAG_RBUTTON =2,
CV_EVENT_FLAG_MBUTTON =4, CV_EVENT_FLAG_MBUTTON =4,
CV_EVENT_FLAG_CTRLKEY =8, CV_EVENT_FLAG_CTRLKEY =8,
CV_EVENT_FLAG_SHIFTKEY =16, CV_EVENT_FLAG_SHIFTKEY =16,
CV_EVENT_FLAG_ALTKEY =32 CV_EVENT_FLAG_ALTKEY =32
}; };
typedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags, void* param); typedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags, void* param);
...@@ -193,15 +193,15 @@ CVAPI(void) cvSetMouseCallback( const char* window_name, CvMouseCallback on_mous ...@@ -193,15 +193,15 @@ CVAPI(void) cvSetMouseCallback( const char* window_name, CvMouseCallback on_mous
enum enum
{ {
/* 8bit, color or not */ /* 8bit, color or not */
CV_LOAD_IMAGE_UNCHANGED =-1, CV_LOAD_IMAGE_UNCHANGED =-1,
/* 8bit, gray */ /* 8bit, gray */
CV_LOAD_IMAGE_GRAYSCALE =0, CV_LOAD_IMAGE_GRAYSCALE =0,
/* ?, color */ /* ?, color */
CV_LOAD_IMAGE_COLOR =1, CV_LOAD_IMAGE_COLOR =1,
/* any depth, ? */ /* any depth, ? */
CV_LOAD_IMAGE_ANYDEPTH =2, CV_LOAD_IMAGE_ANYDEPTH =2,
/* ?, any color */ /* ?, any color */
CV_LOAD_IMAGE_ANYCOLOR =4 CV_LOAD_IMAGE_ANYCOLOR =4
}; };
/* load image from file /* load image from file
...@@ -215,9 +215,9 @@ CVAPI(CvMat*) cvLoadImageM( const char* filename, int iscolor CV_DEFAULT(CV_LOAD ...@@ -215,9 +215,9 @@ CVAPI(CvMat*) cvLoadImageM( const char* filename, int iscolor CV_DEFAULT(CV_LOAD
enum enum
{ {
CV_IMWRITE_JPEG_QUALITY =1, CV_IMWRITE_JPEG_QUALITY =1,
CV_IMWRITE_PNG_COMPRESSION =16, CV_IMWRITE_PNG_COMPRESSION =16,
CV_IMWRITE_PXM_BINARY =32 CV_IMWRITE_PXM_BINARY =32
}; };
/* save image to file */ /* save image to file */
...@@ -234,8 +234,8 @@ CVAPI(CvMat*) cvEncodeImage( const char* ext, const CvArr* image, ...@@ -234,8 +234,8 @@ CVAPI(CvMat*) cvEncodeImage( const char* ext, const CvArr* image,
enum enum
{ {
CV_CVTIMG_FLIP =1, CV_CVTIMG_FLIP =1,
CV_CVTIMG_SWAP_RB =2 CV_CVTIMG_SWAP_RB =2
}; };
/* utility function: convert one image to another with optional vertical flip */ /* utility function: convert one image to another with optional vertical flip */
...@@ -256,38 +256,38 @@ CVAPI(CvCapture*) cvCreateFileCapture( const char* filename ); ...@@ -256,38 +256,38 @@ CVAPI(CvCapture*) cvCreateFileCapture( const char* filename );
enum enum
{ {
CV_CAP_ANY =0, // autodetect CV_CAP_ANY =0, // autodetect
CV_CAP_MIL =100, // MIL proprietary drivers CV_CAP_MIL =100, // MIL proprietary drivers
CV_CAP_VFW =200, // platform native CV_CAP_VFW =200, // platform native
CV_CAP_V4L =200, CV_CAP_V4L =200,
CV_CAP_V4L2 =200, CV_CAP_V4L2 =200,
CV_CAP_FIREWARE =300, // IEEE 1394 drivers CV_CAP_FIREWARE =300, // IEEE 1394 drivers
CV_CAP_FIREWIRE =300, CV_CAP_FIREWIRE =300,
CV_CAP_IEEE1394 =300, CV_CAP_IEEE1394 =300,
CV_CAP_DC1394 =300, CV_CAP_DC1394 =300,
CV_CAP_CMU1394 =300, CV_CAP_CMU1394 =300,
CV_CAP_STEREO =400, // TYZX proprietary drivers CV_CAP_STEREO =400, // TYZX proprietary drivers
CV_CAP_TYZX =400, CV_CAP_TYZX =400,
CV_TYZX_LEFT =400, CV_TYZX_LEFT =400,
CV_TYZX_RIGHT =401, CV_TYZX_RIGHT =401,
CV_TYZX_COLOR =402, CV_TYZX_COLOR =402,
CV_TYZX_Z =403, CV_TYZX_Z =403,
CV_CAP_QT =500, // QuickTime CV_CAP_QT =500, // QuickTime
CV_CAP_UNICAP =600, // Unicap drivers CV_CAP_UNICAP =600, // Unicap drivers
CV_CAP_DSHOW =700, // DirectShow (via videoInput) CV_CAP_DSHOW =700, // DirectShow (via videoInput)
CV_CAP_PVAPI =800, // PvAPI, Prosilica GigE SDK CV_CAP_PVAPI =800, // PvAPI, Prosilica GigE SDK
CV_CAP_OPENNI =900, // OpenNI (for Kinect) CV_CAP_OPENNI =900, // OpenNI (for Kinect)
CV_CAP_ANDROID =1000 // Android CV_CAP_ANDROID =1000 // Android
}; };
/* start capturing frames from camera: index = camera_index + domain_offset (CV_CAP_*) */ /* start capturing frames from camera: index = camera_index + domain_offset (CV_CAP_*) */
...@@ -318,26 +318,26 @@ enum ...@@ -318,26 +318,26 @@ enum
CV_CAP_PROP_DC1394_MODE_MANUAL = -3, //set automatically when a value of the feature is set by the user CV_CAP_PROP_DC1394_MODE_MANUAL = -3, //set automatically when a value of the feature is set by the user
CV_CAP_PROP_DC1394_MODE_AUTO = -2, CV_CAP_PROP_DC1394_MODE_AUTO = -2,
CV_CAP_PROP_DC1394_MODE_ONE_PUSH_AUTO = -1, CV_CAP_PROP_DC1394_MODE_ONE_PUSH_AUTO = -1,
CV_CAP_PROP_POS_MSEC =0, CV_CAP_PROP_POS_MSEC =0,
CV_CAP_PROP_POS_FRAMES =1, CV_CAP_PROP_POS_FRAMES =1,
CV_CAP_PROP_POS_AVI_RATIO =2, CV_CAP_PROP_POS_AVI_RATIO =2,
CV_CAP_PROP_FRAME_WIDTH =3, CV_CAP_PROP_FRAME_WIDTH =3,
CV_CAP_PROP_FRAME_HEIGHT =4, CV_CAP_PROP_FRAME_HEIGHT =4,
CV_CAP_PROP_FPS =5, CV_CAP_PROP_FPS =5,
CV_CAP_PROP_FOURCC =6, CV_CAP_PROP_FOURCC =6,
CV_CAP_PROP_FRAME_COUNT =7, CV_CAP_PROP_FRAME_COUNT =7,
CV_CAP_PROP_FORMAT =8, CV_CAP_PROP_FORMAT =8,
CV_CAP_PROP_MODE =9, CV_CAP_PROP_MODE =9,
CV_CAP_PROP_BRIGHTNESS =10, CV_CAP_PROP_BRIGHTNESS =10,
CV_CAP_PROP_CONTRAST =11, CV_CAP_PROP_CONTRAST =11,
CV_CAP_PROP_SATURATION =12, CV_CAP_PROP_SATURATION =12,
CV_CAP_PROP_HUE =13, CV_CAP_PROP_HUE =13,
CV_CAP_PROP_GAIN =14, CV_CAP_PROP_GAIN =14,
CV_CAP_PROP_EXPOSURE =15, CV_CAP_PROP_EXPOSURE =15,
CV_CAP_PROP_CONVERT_RGB =16, CV_CAP_PROP_CONVERT_RGB =16,
CV_CAP_PROP_WHITE_BALANCE_BLUE_U =17, CV_CAP_PROP_WHITE_BALANCE_BLUE_U =17,
CV_CAP_PROP_RECTIFICATION =18, CV_CAP_PROP_RECTIFICATION =18,
CV_CAP_PROP_MONOCROME =19, CV_CAP_PROP_MONOCROME =19,
CV_CAP_PROP_SHARPNESS =20, CV_CAP_PROP_SHARPNESS =20,
CV_CAP_PROP_AUTO_EXPOSURE =21, // exposure control done by camera, CV_CAP_PROP_AUTO_EXPOSURE =21, // exposure control done by camera,
// user can adjust refernce level // user can adjust refernce level
...@@ -351,7 +351,7 @@ enum ...@@ -351,7 +351,7 @@ enum
CV_CAP_PROP_AUTOGRAB =1024, // property for highgui class CvCapture_Android only CV_CAP_PROP_AUTOGRAB =1024, // property for highgui class CvCapture_Android only
CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING=1025, // readonly, tricky property, returns cpnst char* indeed CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING=1025, // readonly, tricky property, returns cpnst char* indeed
CV_CAP_PROP_PREVIEW_FORMAT=1026, // readonly, tricky property, returns cpnst char* indeed CV_CAP_PROP_PREVIEW_FORMAT=1026, // readonly, tricky property, returns cpnst char* indeed
// OpenNI map generators // OpenNI map generators
CV_CAP_OPENNI_DEPTH_GENERATOR = 0, CV_CAP_OPENNI_DEPTH_GENERATOR = 0,
CV_CAP_OPENNI_IMAGE_GENERATOR = 1 << 31, CV_CAP_OPENNI_IMAGE_GENERATOR = 1 << 31,
CV_CAP_OPENNI_GENERATORS_MASK = 1 << 31, CV_CAP_OPENNI_GENERATORS_MASK = 1 << 31,
...@@ -371,8 +371,10 @@ enum ...@@ -371,8 +371,10 @@ enum
CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_REGISTRATION_ON, CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_REGISTRATION_ON,
// Properties of cameras available through GStreamer interface // Properties of cameras available through GStreamer interface
CV_CAP_GSTREAMER_QUEUE_LENGTH = 200, // default is 1 CV_CAP_GSTREAMER_QUEUE_LENGTH = 200, // default is 1
CV_CAP_PROP_PVAPI_MULTICASTIP = 300 // ip for anable multicast master mode. 0 for disable multicast CV_CAP_PROP_PVAPI_MULTICASTIP = 300, // ip for anable multicast master mode. 0 for disable multicast
CV_CAP_PROP_THREADS = 400
}; };
enum enum
...@@ -419,7 +421,7 @@ typedef struct CvVideoWriter CvVideoWriter; ...@@ -419,7 +421,7 @@ typedef struct CvVideoWriter CvVideoWriter;
CV_INLINE int CV_FOURCC(char c1, char c2, char c3, char c4) CV_INLINE int CV_FOURCC(char c1, char c2, char c3, char c4)
{ {
return (c1 & 255) + ((c2 & 255) << 8) + ((c3 &255) << 16) + ((c4 & 255) << 24); return (c1 & 255) + ((c2 & 255) << 8) + ((c3 &255) << 16) + ((c4 & 255) << 24);
} }
#define CV_FOURCC_PROMPT -1 /* Open Codec Selection Dialog (Windows only) */ #define CV_FOURCC_PROMPT -1 /* Open Codec Selection Dialog (Windows only) */
......
...@@ -21,7 +21,8 @@ enum ...@@ -21,7 +21,8 @@ enum
CV_FFMPEG_CAP_PROP_FRAME_HEIGHT=4, CV_FFMPEG_CAP_PROP_FRAME_HEIGHT=4,
CV_FFMPEG_CAP_PROP_FPS=5, CV_FFMPEG_CAP_PROP_FPS=5,
CV_FFMPEG_CAP_PROP_FOURCC=6, CV_FFMPEG_CAP_PROP_FOURCC=6,
CV_FFMPEG_CAP_PROP_FRAME_COUNT=7 CV_FFMPEG_CAP_PROP_FRAME_COUNT=7,
CV_FFMPEG_CAP_PROP_THREADS=8
}; };
......
...@@ -135,7 +135,7 @@ extern "C" { ...@@ -135,7 +135,7 @@ extern "C" {
#define PIX_FMT_RGBA32 PIX_FMT_RGB32 #define PIX_FMT_RGBA32 PIX_FMT_RGB32
#endif #endif
#define CALC_FFMPEG_VERSION(a,b,c) ( a<<16 | b<<8 | c )
char * FOURCC2str( int fourcc ) char * FOURCC2str( int fourcc )
{ {
...@@ -365,6 +365,7 @@ struct CvCapture_FFMPEG ...@@ -365,6 +365,7 @@ struct CvCapture_FFMPEG
and so the filename is needed to reopen the file on backward seeking. and so the filename is needed to reopen the file on backward seeking.
*/ */
char * filename; char * filename;
int count_threads;
}; };
...@@ -379,6 +380,7 @@ void CvCapture_FFMPEG::init() ...@@ -379,6 +380,7 @@ void CvCapture_FFMPEG::init()
memset( &frame, 0, sizeof(frame) ); memset( &frame, 0, sizeof(frame) );
filename = 0; filename = 0;
packet.data = NULL; packet.data = NULL;
count_threads = 1;
#if defined(HAVE_FFMPEG_SWSCALE) #if defined(HAVE_FFMPEG_SWSCALE)
img_convert_ctx = 0; img_convert_ctx = 0;
#endif #endif
...@@ -489,8 +491,14 @@ bool CvCapture_FFMPEG::open( const char* _filename ) ...@@ -489,8 +491,14 @@ bool CvCapture_FFMPEG::open( const char* _filename )
AVCodecContext *enc = &ic->streams[i]->codec; AVCodecContext *enc = &ic->streams[i]->codec;
#endif #endif
if( CODEC_TYPE_VIDEO == enc->codec_type && video_stream < 0) { avcodec_thread_init(enc, count_threads);
AVCodec *codec = avcodec_find_decoder(enc->codec_id);
//#ifndef AVMEDIA_TYPE_VIDEO
// #define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO
//#endif
if( AVMEDIA_TYPE_VIDEO == enc->codec_type && video_stream < 0) {
AVCodec *codec = avcodec_find_decoder(enc->codec_id);
if (!codec || if (!codec ||
avcodec_open(enc, codec) < 0) avcodec_open(enc, codec) < 0)
goto exit_func; goto exit_func;
...@@ -576,14 +584,18 @@ bool CvCapture_FFMPEG::grabFrame() ...@@ -576,14 +584,18 @@ bool CvCapture_FFMPEG::grabFrame()
continue; continue;
} }
#if LIBAVFORMAT_BUILD > 4628 #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 4, 0)
avcodec_decode_video(video_st->codec, avcodec_decode_video2(video_st->codec, picture, &got_picture, &packet);
picture, &got_picture,
packet.data, packet.size);
#else #else
avcodec_decode_video(&video_st->codec, #if LIBAVFORMAT_BUILD > 4628
picture, &got_picture, avcodec_decode_video(video_st->codec,
packet.data, packet.size); picture, &got_picture,
packet.data, packet.size);
#else
avcodec_decode_video(&video_st->codec,
picture, &got_picture,
packet.data, packet.size);
#endif
#endif #endif
if (got_picture) { if (got_picture) {
...@@ -702,12 +714,14 @@ double CvCapture_FFMPEG::getProperty( int property_id ) ...@@ -702,12 +714,14 @@ double CvCapture_FFMPEG::getProperty( int property_id )
return (double)video_st->codec.codec_tag; return (double)video_st->codec.codec_tag;
#endif #endif
break; break;
case CV_FFMPEG_CAP_PROP_THREADS:
return count_threads;
break;
} }
return 0; return 0;
} }
// this is a VERY slow fallback function, ONLY used if ffmpeg's av_seek_frame delivers no correct result! // this is a VERY slow fallback function, ONLY used if ffmpeg's av_seek_frame delivers no correct result!
bool CvCapture_FFMPEG::slowSeek( int framenumber ) bool CvCapture_FFMPEG::slowSeek( int framenumber )
{ {
...@@ -787,6 +801,12 @@ bool CvCapture_FFMPEG::setProperty( int property_id, double value ) ...@@ -787,6 +801,12 @@ bool CvCapture_FFMPEG::setProperty( int property_id, double value )
picture_pts=(int64_t)value; picture_pts=(int64_t)value;
} }
break; break;
case CV_FFMPEG_CAP_PROP_THREADS:
{
count_threads = (int)value;
}
break;
default: default:
return false; return false;
...@@ -824,6 +844,38 @@ struct CvVideoWriter_FFMPEG ...@@ -824,6 +844,38 @@ struct CvVideoWriter_FFMPEG
static const char * icvFFMPEGErrStr(int err) static const char * icvFFMPEGErrStr(int err)
{ {
#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 4, 0)
switch(err) {
case AVERROR_BSF_NOT_FOUND:
return "Bitstream filter not found";
case AVERROR_DECODER_NOT_FOUND:
return "Decoder not found";
case AVERROR_DEMUXER_NOT_FOUND:
return "Demuxer not found";
case AVERROR_ENCODER_NOT_FOUND:
return "Encoder not found";
case AVERROR_EOF:
return "End of file";
case AVERROR_EXIT:
return "Immediate exit was requested; the called function should not be restarted";
case AVERROR_FILTER_NOT_FOUND:
return "Filter not found";
case AVERROR_INVALIDDATA:
return "Invalid data found when processing input";
case AVERROR_MUXER_NOT_FOUND:
return "Muxer not found";
case AVERROR_OPTION_NOT_FOUND:
return "Option not found";
case AVERROR_PATCHWELCOME:
return "Not yet implemented in FFmpeg, patches welcome";
case AVERROR_PROTOCOL_NOT_FOUND:
return "Protocol not found";
case AVERROR_STREAM_NOT_FOUND:
return "Stream not found";
default:
break;
}
#else
switch(err) { switch(err) {
case AVERROR_NUMEXPECTED: case AVERROR_NUMEXPECTED:
return "Incorrect filename syntax"; return "Incorrect filename syntax";
...@@ -838,7 +890,9 @@ static const char * icvFFMPEGErrStr(int err) ...@@ -838,7 +890,9 @@ static const char * icvFFMPEGErrStr(int err)
default: default:
break; break;
} }
return "Unspecified error"; #endif
return "Unspecified error";
} }
/* function internal to FFMPEG (libavformat/riff.c) to lookup codec id by fourcc tag*/ /* function internal to FFMPEG (libavformat/riff.c) to lookup codec id by fourcc tag*/
...@@ -918,7 +972,7 @@ static AVStream *icv_add_video_stream_FFMPEG(AVFormatContext *oc, ...@@ -918,7 +972,7 @@ static AVStream *icv_add_video_stream_FFMPEG(AVFormatContext *oc,
#endif #endif
#if LIBAVFORMAT_BUILD > 4621 #if LIBAVFORMAT_BUILD > 4621
c->codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL, CODEC_TYPE_VIDEO); c->codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL, AVMEDIA_TYPE_VIDEO);
#else #else
c->codec_id = oc->oformat->video_codec; c->codec_id = oc->oformat->video_codec;
#endif #endif
...@@ -930,7 +984,7 @@ static AVStream *icv_add_video_stream_FFMPEG(AVFormatContext *oc, ...@@ -930,7 +984,7 @@ static AVStream *icv_add_video_stream_FFMPEG(AVFormatContext *oc,
//if(codec_tag) c->codec_tag=codec_tag; //if(codec_tag) c->codec_tag=codec_tag;
codec = avcodec_find_encoder(c->codec_id); codec = avcodec_find_encoder(c->codec_id);
c->codec_type = CODEC_TYPE_VIDEO; c->codec_type = AVMEDIA_TYPE_VIDEO;
/* put sample parameters */ /* put sample parameters */
c->bit_rate = bitrate; c->bit_rate = bitrate;
...@@ -1015,7 +1069,11 @@ int icv_av_write_frame_FFMPEG( AVFormatContext * oc, AVStream * video_st, uint8_ ...@@ -1015,7 +1069,11 @@ int icv_av_write_frame_FFMPEG( AVFormatContext * oc, AVStream * video_st, uint8_
AVPacket pkt; AVPacket pkt;
av_init_packet(&pkt); av_init_packet(&pkt);
pkt.flags |= PKT_FLAG_KEY; #ifndef PKT_FLAG_KEY
#define PKT_FLAG_KEY AV_PKT_FLAG_KEY
#endif
pkt.flags |= PKT_FLAG_KEY;
pkt.stream_index= video_st->index; pkt.stream_index= video_st->index;
pkt.data= (uint8_t *)picture; pkt.data= (uint8_t *)picture;
pkt.size= sizeof(AVPicture); pkt.size= sizeof(AVPicture);
...@@ -1237,7 +1295,13 @@ bool CvVideoWriter_FFMPEG::open( const char * filename, int fourcc, ...@@ -1237,7 +1295,13 @@ bool CvVideoWriter_FFMPEG::open( const char * filename, int fourcc,
av_register_all (); av_register_all ();
/* auto detect the output format from the name and fourcc code. */ /* auto detect the output format from the name and fourcc code. */
#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 4, 0)
fmt = av_guess_format(NULL, filename, NULL);
#else
fmt = guess_format(NULL, filename, NULL); fmt = guess_format(NULL, filename, NULL);
#endif
if (!fmt) if (!fmt)
return false; return false;
...@@ -1260,7 +1324,11 @@ bool CvVideoWriter_FFMPEG::open( const char * filename, int fourcc, ...@@ -1260,7 +1324,11 @@ bool CvVideoWriter_FFMPEG::open( const char * filename, int fourcc,
#endif #endif
// alloc memory for context // alloc memory for context
#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 4, 0)
oc = avformat_alloc_context();
#else
oc = av_alloc_format_context(); oc = av_alloc_format_context();
#endif
assert (oc); assert (oc);
/* set file name */ /* set file name */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment