~ubuntu-branches/ubuntu/oneiric/opencv/oneiric

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
Author: Gal Shalif <gal@fourier-sys.com>
Debian BTS: N/A
Bug-Ubuntu: https://launchpad.net/bugs/756154
Description: Fix opencv-2.1.0 compilation errors when copiled with libav-0.7 (a.k.a. ffmpeg 0.7) - as applicable for Ubuntu 11.10 Oneiric
 Note: Ubuntu 11.04 Natty use libav-0.6.2 with:
       #define LIBAVCODEC_VERSION_MAJOR 52
       #define LIBAVUTIL_VERSION_MAJOR  50
       #define LIBAVFORMAT_BUILD       (52<<16 | 64<<8 | 2)
 Note: Ubuntu 11.10 Oneiric use libav-0.7 with:
       #define LIBAVCODEC_VERSION_MAJOR 53 
       #define LIBAVUTIL_VERSION_MAJOR  51
       #define LIBAVFORMAT_BUILD       (53<<16 | 2<<8 | 0)
--- a/src/highgui/cvcap_ffmpeg.cpp	2011-07-06 12:44:09.585566733 +0300
+++ b/src/highgui/cvcap_ffmpeg.cpp	2011-07-06 13:09:43.261010471 +0300
@@ -464,7 +464,7 @@
         AVCodecContext *enc = &ic->streams[i]->codec;
 #endif
 
-        if( CODEC_TYPE_VIDEO == enc->codec_type && video_stream < 0) {
+        if( AVMEDIA_TYPE_VIDEO == enc->codec_type && video_stream < 0) {
             AVCodec *codec = avcodec_find_decoder(enc->codec_id);
             if (!codec ||
             avcodec_open(enc, codec) < 0)
@@ -514,6 +514,24 @@
 }
 
 
+#if LIBAVFORMAT_BUILD >= (53<<16 | 0<<8 | 0) /* As defined when compiled against libav-0.7 from Ubuntu 11.10 Oneiric */
+/* Gal Shalif: temporary add a backward compatible function - till OpenCV is properly ported to compile against ffmpeg 0.7 */
+/* Gal Shalif: code is copy from Ubuntu 11.04 Natty libav-0.6.2/libavcodec/utils.c */
+int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
+                         int *got_picture_ptr,
+                         uint8_t *buf, int buf_size)
+{
+    AVPacket avpkt;
+    av_init_packet(&avpkt);
+    avpkt.data = buf;
+    avpkt.size = buf_size;
+    // HACK for CorePNG to decode as normal PNG by default
+    avpkt.flags = AV_PKT_FLAG_KEY;
+
+    return avcodec_decode_video2(avctx, picture, got_picture_ptr, &avpkt);
+}
+#endif /* LIBAVFORMAT_BUILD >= (53<<16 | 0<<8 | 0) */
+
 bool CvCapture_FFMPEG::grabFrame()
 {
     bool valid = false;
@@ -795,6 +813,17 @@
 #endif
 };
 
+#if LIBAVFORMAT_BUILD >= (53<<16 | 0<<8 | 0) /* As defined when compiled against libav-0.7 from Ubuntu 11.10 Oneiric */
+/* Gal Shalif: temporary add a backward compatible define - till OpenCV is properly ported to compile against ffmpeg 0.7 */
+
+/* Gal Shalif: code is copy from Ubuntu 11.04 Natty libav-0.6.2/libavutil/error.h and is enclosed within LIBAVUTIL_VERSION_MAJOR < 51 ... #endif */
+#define AVERROR_NUMEXPECTED AVERROR(EDOM)    ///< Number syntax expected in filename
+#define AVERROR_NOFMT       AVERROR(EILSEQ)  ///< Unknown format
+#define AVERROR_IO          AVERROR(EIO)     ///< I/O error
+#define AVERROR_NOMEM       AVERROR(ENOMEM)  ///< Not enough memory
+
+#endif /* LIBAVFORMAT_BUILD >= (53<<16 | 0<<8 | 0) */
+
 static const char * icvFFMPEGErrStr(int err)
 {
     switch(err) {
@@ -891,7 +920,7 @@
 #endif
 
 #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
 	c->codec_id = oc->oformat->video_codec;
 #endif
@@ -903,7 +932,7 @@
     //if(codec_tag) c->codec_tag=codec_tag;
 	codec = avcodec_find_encoder(c->codec_id);
 
-	c->codec_type = CODEC_TYPE_VIDEO;
+	c->codec_type = AVMEDIA_TYPE_VIDEO;
 
 	/* put sample parameters */
 	c->bit_rate = bitrate;
@@ -990,7 +1019,7 @@
         AVPacket pkt;
         av_init_packet(&pkt);
 
-        pkt.flags |= PKT_FLAG_KEY;
+        pkt.flags |= AV_PKT_FLAG_KEY;
         pkt.stream_index= video_st->index;
         pkt.data= (uint8_t *)picture;
         pkt.size= sizeof(AVPicture);
@@ -1010,7 +1039,7 @@
 			pkt.pts = c->coded_frame->pts;
 #endif
             if(c->coded_frame->key_frame)
-                pkt.flags |= PKT_FLAG_KEY;
+                pkt.flags |= AV_PKT_FLAG_KEY;
             pkt.stream_index= video_st->index;
             pkt.data= outbuf;
             pkt.size= out_size;
@@ -1210,7 +1239,7 @@
 	av_register_all ();
 
 	/* auto detect the output format from the name and fourcc code. */
-	fmt = guess_format(NULL, filename, NULL);
+	fmt = av_guess_format(NULL, filename, NULL);
 	if (!fmt)
         return false;
 
@@ -1233,7 +1262,7 @@
 #endif
 
     // alloc memory for context
-	oc = av_alloc_format_context();
+	oc = avformat_alloc_context();
 	assert (oc);
 
 	/* set file name */