Attached are .info/.patch files to update video-oct to use newer versions of ffmpeg and not the really old libavcodec53 library.

The patch is primarily from here (unreleased upstream):
https://sourceforge.net/p/octave/video/ci/7caa40bb8a47ba943d63f16896b4771854ebfd68/

But I also added the chunk around line 124 from here:
https://github.com/tufei/octave-forge-video/commit/19119e2ec936285c6e7e4fc903d97d7f3efc8648#diff-ee390d07771903074cab05b278a4bf4aL123

because av_set_parameters no longer exists and I couldn't find a replacement for that function

I also removed -D__STDC_CONSTANT_MACROS from CXXFLAGS because it was giving a lot of "__STDC_CONSTANT_MACROS macro redefined" warnings. There are still UINT64_C redefined issues which might be taken care of with https://sourceforge.net/p/octave/video/ci/c341586726c96ca5aa5821b38792b1bf7fe8adc0/#diff-8 from a later commit, but I didn't test it in order to minimize the cherry picking.

This built with ffmpeg-1.2, -2.0, and -2.4, but I have no way of knowing if the resulting build actually works and doesn't cause total protonic reversal.

Hanspeter
Info2: <<
Package: video-oct%type_pkg[oct]
Version: 1.0.2
Type: oct (3.0.5 3.2.4 3.4.3 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4), forge (video), gcc 
(4.9)
Revision: 6
Distribution: (%type_pkg[oct] << 364) 10.7, (%type_pkg[oct] << 364) 10.8

Maintainer: Alexander Hansen <alexkhan...@users.sourceforge.net>
Homepage: http://octave.sourceforge.net/video/index.html 
Description: FFmpeg interface for Octave
DescDetail: <<
Implements addframe, avifile, aviinfo, and aviread, using ffmpeg. (and
approximately conforms to the Matlab interface)

This package provides the following functions:
        addframe
        avifile
        aviinfo
        aviread
<<

License: BSD

# reported to have issues with ffmpeg suite newer than avcodec53
# possible fixes:
#   https://github.com/tufei/octave-forge-video
#   http://lists.gnu.org/archive/html/help-octave/2011-12/msg00405.html
BuildDepends: <<
  ( %type_pkg[oct] << 360 ) liboctave%type_pkg[oct]-gcc%type_pkg[gcc]-dev, 
  ( %type_pkg[oct] >= 360 ) liboctave%type_pkg[oct]-dev,
  fftw3,
  ( %type_pkg[oct] = 305 ) hdf5.9-oldapi,
  ( %type_pkg[oct] != 305 ) hdf5.9,
  libavcodec56-2.4-dev,
  libavformat56-2.4-dev,
  libavutil54-2.4-dev,
  libswscale3-2.4-dev,
  pkgconfig,
  fink-octave-scripts (>= 0.3.0-1)
<<
Depends: <<
  octave%type_pkg[oct]-interpreter,
  libavcodec56-2.4-shlibs,
  libavformat56-2.4-shlibs,
  libavutil54-2.4-shlibs,
  libswscale3-2.4-shlibs,
  ( %type_pkg[oct] << 360 ) gcc%type_pkg[gcc]-shlibs
<<
Conflicts: octave-forge

Source: 
mirror:sourceforge:octave/Octave%%20Forge%%20Packages/R2009-05-08/%type_raw[forge]-%v.tar.gz
Source-MD5: e45e827ce5f409191aa9e9a61058e4ce

PatchFile: %{ni}.patch
PatchFile-MD5: b50739043be90e99f33ae10de3b8c7be
PatchScript: <<
%{default_script}
<<

NoSetCPPFLAGS: true
NoSetLDFLAGS: true
UseMaxBuildJobs: false
BuildAsNobody: false

CompileScript: <<
#!/bin/sh -ev
pkgsrc=%type_raw[forge]-%v

##### Invariant stuff begins here #####
%p/share/fink-octave-scripts/octave-forge-patch.sh %type_raw[forge] %v 
%type_raw[oct] %b %i $pkgsrc
export PKG_CONFIG_PATH=%p/lib/ffmpeg-2.4/lib/pkgconfig:$PKG_CONFIG_PATH
./octave-forge-compile.sh
<<

InstallScript: ./octave-forge-install.sh
PostInstScript:  
%p/share/octave/%type_raw[oct]/%type_raw[forge]/octave-forge-postinst.sh
PreRmScript: 
%p/share/octave/%type_raw[oct]/%type_raw[forge]/octave-forge-prerm.sh

DescPackaging: <<
For this package:
Numerous patches to use ffmpeg-0.8.4.

Common for all octave-forge packages:
Preinst and postinst scripts are dynamically set up via 
%p/share/fink-octave-scripts/octave-forge-patch.sh because Octave's package 
manager 
can't cope with non-literal arguments.

The Type: forge (pkgname) is used to minimize what needs to be changed when
using this .info file as a template, or when the package name contains 
underscores.
<<
<<
diff -Nurd video-1.0.2/src/AVHandler.cc video-1.0.2.patched/src/AVHandler.cc
--- video-1.0.2/src/AVHandler.cc        2009-05-08 08:17:36.000000000 -0500
+++ video-1.0.2.patched/src/AVHandler.cc        2015-02-14 05:56:20.000000000 
-0600
@@ -64,7 +64,7 @@
        if (av_output->pb->buf_ptr) {
            while (write_frame() > 0) {}
            av_write_trailer(av_output);
-           if (url_fclose( av_output->pb ) < 0)
+           if (avio_close( av_output->pb ) < 0)
                (*out) << "AVHandler: cannot close output file" << std::endl;
        }
        av_free(av_output);
@@ -78,7 +78,7 @@
     }
 
     if (av_input) {
-       av_close_input_file(av_input);
+       avformat_close_input(&av_input);
     } else {
        // close output stream
        if (vstream) av_freep(&vstream);    
@@ -94,8 +94,8 @@
 AVHandler::setup_write() {
     av_register_all();
 
-    AVOutputFormat *avifmt;   
-    for (avifmt = first_oformat; avifmt != NULL; avifmt = avifmt->next) {
+    AVOutputFormat *avifmt = NULL;   
+    while (NULL != (avifmt = av_oformat_next(avifmt))) {
        if (std::string(avifmt->name) == "avi") {
            break;
        }
@@ -106,7 +106,7 @@
        return -1;
     }
     
-    av_output = av_alloc_format_context();
+    av_output = avformat_alloc_context();
     if (!av_output) {
        (*out) << "AVHandler: Memory error allocating format context" << 
std::endl;
        return -1;
@@ -120,18 +120,12 @@
        if (add_video_stream() != 0) return -1;
     }
     
-    /* av_set_parameters is mandatory */
-    if (av_set_parameters(av_output, NULL) < 0) {
-       (*out) << "AVHandler: Error setting output format parameters" << 
std::endl;
-       return -1;
-    }
-
     snprintf(av_output->filename, sizeof(av_output->filename), "%s", 
filename.c_str());
-    snprintf(av_output->title, sizeof(av_output->title), "%s", title.c_str());
-    snprintf(av_output->author, sizeof(av_output->author), "%s", 
author.c_str());
-    snprintf(av_output->comment, sizeof(av_output->comment), "%s", 
comment.c_str());
+// FIXME:    snprintf(av_output->title, sizeof(av_output->title), "%s", 
title.c_str());
+// FIXME:    snprintf(av_output->author, sizeof(av_output->author), "%s", 
author.c_str());
+// FIXME:    snprintf(av_output->comment, sizeof(av_output->comment), "%s", 
comment.c_str());
     
-    if (url_fopen(&av_output->pb, filename.c_str(), URL_WRONLY) < 0) {
+    if (avio_open(&av_output->pb, filename.c_str(), AVIO_FLAG_WRITE) < 0) {
        (*out) << "AVHandler: Could not open \"" << filename << "\" for output" 
<< std::endl;
        return -1;
     }
@@ -141,8 +135,8 @@
     frame = create_frame(vstream->codec->pix_fmt);
     rgbframe = create_frame(PIX_FMT_RGB24);
     if (!frame || !rgbframe) return -1;
-    
-    av_write_header(av_output);
+
+    avformat_write_header(av_output, NULL);
     
     return 0;
 }
@@ -151,18 +145,18 @@
 AVHandler::setup_read() {
     av_register_all();
 
-    if (av_open_input_file(&av_input, filename.c_str(), NULL, 0, NULL) != 0) {
+    if (avformat_open_input(&av_input, filename.c_str(), NULL, NULL) != 0) {
        (*out) << "AVHandler: Could not open \"" << filename << "\" for 
reading" << std::endl;
        return -1;
     }
 
-    if (av_find_stream_info(av_input) < 0) {
+    if (avformat_find_stream_info(av_input, NULL) < 0) {
        (*out) << "AVHandler: No stream information available" << std::endl;
        return -1;
     }
 
     for (int i=0; i < av_input->nb_streams; i++) {
-       if (av_input->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO) {
+       if (av_input->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
            vstream = av_input->streams[i];
            break;
        }
@@ -173,7 +167,7 @@
     }
 
     for (int i=0; i < av_input->nb_streams; i++) {
-       if (av_input->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO) {
+       if (av_input->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
            astream = av_input->streams[i];
            break;
        }
@@ -192,7 +186,7 @@
     if (codec->capabilities & CODEC_CAP_TRUNCATED)
        vstream->codec->flags |= CODEC_FLAG_TRUNCATED;
 
-    if (avcodec_open(vstream->codec, codec) < 0) {
+    if (avcodec_open2(vstream->codec, codec, NULL) < 0) {
        (*out) << "AVHandler: Cannot open codec " << codec_name << std::endl;
        vstream->codec->codec = NULL;
        return -1;
@@ -204,9 +198,9 @@
     width = vstream->codec->width;
     height = vstream->codec->height;
 
-    title = av_input->title;
-    author = av_input->author;
-    comment = av_input->comment;
+// FIXME:    title = av_input->title;
+// FIXME:    author = av_input->author;
+// FIXME:    comment = av_input->comment;
 
     rgbframe = create_frame(PIX_FMT_RGB24);
     if (!rgbframe) return -1;
@@ -258,7 +252,7 @@
        if (c->coded_frame)
            pkt.pts = c->coded_frame->pts;
        if (c->coded_frame && c->coded_frame->key_frame)
-           pkt.flags |= PKT_FLAG_KEY;
+           pkt.flags |= AV_PKT_FLAG_KEY;
        /// XXX FIXME XXX does this ensure that the first frame is always a key 
frame?
        
        if (av_write_frame(av_output, &pkt) != 0) {
@@ -296,7 +290,7 @@
                (*out) << "AVHandler: Error seeking to " << target_timestamp << 
std::endl;
                return -1;
     }
-    cc->hurry_up = 1;
+    cc->skip_frame;
 
     // Flush stream buffers after seek
     avcodec_flush_buffers(cc);
@@ -324,14 +318,18 @@
                return -1;
            }
 
-           if (url_feof(av_input->pb)) {
+           if (av_input->pb->eof_reached) {
                (*out) << "AVHandler: EOF reached" << std::endl;
            }
        }
 
        // Decode the packet into a frame
        int frameFinished;
-       if (avcodec_decode_video(cc, frame, &frameFinished, packet.data, 
packet.size) < 0) {
+
+    // HACK for CorePNG to decode as normal PNG by default
+    packet.flags = AV_PKT_FLAG_KEY;
+       
+       if (avcodec_decode_video2(cc, frame, &frameFinished, &packet) < 0) {
            (*out) << "AVHandler: Error decoding video stream" << std::endl;
            av_free_packet(&packet);
            av_free(frame); frame = NULL;
@@ -342,7 +340,9 @@
            current_timestamp = (uint64_t)(vstream->cur_dts * AV_TIME_BASE * 
(long double)stream_time_base);
        }
     }
-    cc->hurry_up = 0;
+// http://ffmpeg.org/pipermail/ffmpeg-cvslog/2011-April/035933.html
+// FIXME maybe use: cc->skip_frame;
+//    cc->hurry_up = 0;
 
     SwsContext *sc = sws_getContext(cc->width, cc->height, cc->pix_fmt, 
                                    cc->width, cc->height, PIX_FMT_BGR24, 
@@ -361,9 +361,9 @@
     (*out) << "Supported file formats:" << std::endl;
     av_register_all();
 
-    AVOutputFormat *ofmt;
-    for (ofmt = first_oformat; ofmt != NULL; ofmt = ofmt->next) {
-       (*out) << ofmt->name << " ";
+    AVOutputFormat *ofmt = NULL;
+    while (NULL != (ofmt = av_oformat_next(ofmt))) {
+       (*out) << ofmt->name << " ";
     }
     (*out) << std::endl << std::endl;
 }
@@ -375,8 +375,8 @@
 
     AVCodec *codec;
     for (codec = av_codec_next(0); codec != NULL; codec = 
av_codec_next(codec)) {
-       if ((codec->type == CODEC_TYPE_VIDEO) &&
-           (codec->encode)) {      
+       if ((codec->type == AVMEDIA_TYPE_VIDEO) &&
+           (codec->encode2)) {     
            (*out) << codec->name << " ";
        }
     }
@@ -386,8 +386,9 @@
 int
 AVHandler::add_video_stream() {
     AVCodecContext *cc;
-    
-    vstream = av_new_stream(av_output, 0);
+
+    // FIXME: vstream = avformat_new_stream(av_output, 
av_find_default_stream_index(av_output));
+    vstream = avformat_new_stream(av_output, NULL);
     if (!vstream) {
        (*out) << "AVHandler: error opening video output stream" << std::endl;
        return -1;
@@ -395,8 +396,8 @@
     
     cc = vstream->codec;
 
-    cc->codec_type = CODEC_TYPE_VIDEO;
-    
+    cc->codec_type = AVMEDIA_TYPE_VIDEO;
+
     cc->bit_rate = bitrate;
     cc->width = width;
     cc->height = height;
@@ -426,7 +427,7 @@
        return -1;
     }
 
-    if (avcodec_open(cc, codec) < 0) {
+    if (avcodec_open2(cc, codec, NULL) < 0) {
        (*out) << "AVHandler: cannot open codec" << std::endl;
        cc->codec = NULL;
        return -1;
diff -Nurd video-1.0.2/src/AVHandler.h video-1.0.2.patched/src/AVHandler.h
--- video-1.0.2/src/AVHandler.h 2009-05-08 08:17:36.000000000 -0500
+++ video-1.0.2.patched/src/AVHandler.h 2015-02-14 05:34:02.000000000 -0600
@@ -27,8 +27,11 @@
 
 #define VIDEO_OUTBUF_SIZE 200000
 
+// FIXME: should define -D__STDC_CONSTANT_MACROS instead of the following
 #define INT64_C
+#define UINT64_C
 #define __STDC_CONSTANT_MACROS
+
 #include <errno.h>
 extern "C" {
 #if defined (HAVE_FFMPEG_AVFORMAT_H)
@@ -165,7 +168,7 @@
 
   unsigned int get_total_frames() const {
     if (vstream) {
-      return (unsigned int)((double)framerate * vstream->duration / 
AV_TIME_BASE);
+      return (unsigned int) vstream->nb_frames;
     } else {
       return 0;
     }
@@ -173,7 +176,7 @@
 
   unsigned int get_filesize() const {
     if (av_input) {
-      return av_input->file_size;
+      return avio_size(av_input->pb);
     } else {
       return 0;
     }
------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Fink-devel mailing list
Fink-devel@lists.sourceforge.net
List archive:
http://news.gmane.org/gmane.os.apple.fink.devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel

Reply via email to