Browse Source

ogsf: support also older FFMPEG API (see https://trac.osgeo.org/grass/changeset/53854)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@53880 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 12 years ago
parent
commit
bc493fb553
1 changed files with 47 additions and 18 deletions
  1. 47 18
      lib/ogsf/gsd_img_mpeg.c

+ 47 - 18
lib/ogsf/gsd_img_mpeg.c

@@ -5,15 +5,14 @@
 
    GRASS OpenGL gsurf OGSF Library 
 
-   (C) 1999-2008 by the GRASS Development Team
+   (C) 1999-2008, 2012 by the GRASS Development Team
 
-   This program is free software under the 
-   GNU General Public License (>=v2). 
-   Read the file COPYING that comes with GRASS
-   for details.
+   This program is free software under the GNU General Public License
+   (>=v2).  Read the file COPYING that comes with GRASS for details.
 
    \author Bill Brown USACERL, GMSL/University of Illinois
-   \author Doxygenized by Martin Landa <landa.martin gmail.com> (May 2008)
+   \author Doxygenized (May 2008) and update for FFMPEG >= 0.7
+   (November 2012) by Martin Landa <landa.martin gmail.com>
  */
 
 #include <stdlib.h>
@@ -58,7 +57,11 @@ static AVStream *add_video_stream(AVFormatContext * oc, int codec_id, int w,
     AVCodecContext *c;
     AVStream *st;
 
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52, 100, 0)
+    st = av_new_stream(oc, 0);
+#else
     st = avformat_new_stream(oc, NULL);
+#endif
     if (!st) {
 	G_warning(_("Unable to allocate stream"));
 	return NULL;
@@ -97,12 +100,13 @@ static AVStream *add_video_stream(AVFormatContext * oc, int codec_id, int w,
 	c->flags |= CODEC_FLAG_GLOBAL_HEADER;
 
     c->flags |= CODEC_FLAG_QSCALE;
-    /* Quality, as it has been removed from AVCodecContext and put in AVVideoFrame.
-       
-       \todo use AVVideoFrame
-       c->global_quality = st->quality = FF_QP2LAMBDA * 10;
-    */
+    
+    /* Quality, as it has been removed from AVCodecContext and put in AVVideoFrame. */
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52, 100, 0)
+    c->global_quality = st->quality = FF_QP2LAMBDA * 10;
+#else
     c->global_quality = FF_QP2LAMBDA * 10;
+#endif
 
     return st;
 }
@@ -163,7 +167,11 @@ static void open_video(AVFormatContext * oc, AVStream * st)
     }
 
     /* open the codec */
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52, 100, 0)
+    if (avcodec_open(c, codec) < 0) { 
+#else
     if (avcodec_open2(c, codec, NULL) < 0) {
+#endif
 	G_warning(_("Unable to open codec"));
 	return;
     }
@@ -338,12 +346,20 @@ int gsd_init_mpeg(const char *filename)
     }
 
     /* set the output parameters (must be done even if no parameters). */
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52, 100, 0)
+    if (av_set_parameters(oc, NULL) < 0) { 
+#else
     if (avformat_write_header(oc, NULL) < 0) {
+#endif
 	G_warning(_("Invalid output format parameters"));
-	return (-1);
+	return -1;
     }
 
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52, 100, 0)
+    dump_format(oc, 0, filename, 1); 
+#else
     av_dump_format(oc, 0, filename, 1);
+#endif
 
     /* now that all the parameters are set, we can open the audio and
        video codecs and allocate the necessary encode buffers */
@@ -352,21 +368,28 @@ int gsd_init_mpeg(const char *filename)
 
     /* open the output file, if needed */
     if (!(fmt->flags & AVFMT_NOFILE)) {
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52, 100, 0)
+        if (url_fopen(&oc->pb, filename, URL_WRONLY) < 0) { 
+#else
 	if (avio_open(&oc->pb, filename, AVIO_FLAG_WRITE) < 0) {
+#endif
 	    G_warning(_("Unable to open <%s>"), filename);
 	    return (-1);
 	}
     }
 
     /* write the stream header, if any */
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52, 100, 0)
+    av_write_header(oc);
+#else
     avformat_write_header(oc, NULL);
-
+#endif
 
 #else
-    G_warning(_("NVIZ has not been built with MPEG output support"));
-    return (-1);
+    G_warning(_("OGSF library has not been built with MPEG output support"));
+    return -1;
 #endif
-    return (0);
+    return 0;
 }
 
 /*!
@@ -441,7 +464,13 @@ int gsd_close_mpeg(void)
 
     if (!(fmt->flags & AVFMT_NOFILE)) {
 	/* close the output file */
-	avio_close(oc->pb);
+#if (LIBAVFORMAT_VERSION_INT>>16) < 52
+      url_fclose(&oc->pb);
+#elif LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52, 100, 0)
+      url_fclose(oc->pb);
+#else
+      avio_close(oc->pb);
+#endif 
     }
 
     /* free the stream */
@@ -451,5 +480,5 @@ int gsd_close_mpeg(void)
     G_debug(3, "Closed MPEG stream");
 #endif
 
-    return (0);
+    return 0;
 }