[packages/mythtv] Version: 0.24.3

jajcus jajcus at pld-linux.org
Mon Oct 8 18:31:20 CEST 2012


commit 75bb787c27ce89247b72c969774dc827a9c500b4
Author: Jacek Konieczny <jajcus at jajcus.net>
Date:   Mon Oct 8 18:30:55 2012 +0200

    Version: 0.24.3

 mythtv-dshowserver_trunk.patch | 425 -----------------------------------------
 mythtv.spec                    |  19 +-
 2 files changed, 14 insertions(+), 430 deletions(-)
---
diff --git a/mythtv.spec b/mythtv.spec
index fab68e1..1c51a10 100644
--- a/mythtv.spec
+++ b/mythtv.spec
@@ -58,12 +58,12 @@
 Summary:	A personal video recorder (PVR) application
 Summary(pl.UTF-8):	Osobista aplikacja do nagrywania obrazu (PVR)
 Name:		mythtv
-Version:	0.24.1
+Version:	0.24.3
 Release:	0.2
 License:	GPL v2
 Group:		Applications/Multimedia
-Source0:	ftp://ftp.osuosl.org/pub/mythtv/%{name}-%{version}.tar.bz2
-# Source0-md5:	6870c679619ec58456e76839745411d8
+Source0:	ftp://ftp.osuosl.org/pub/mythtv/old_releases/%{name}-%{version}.tar.bz2
+# Source0-md5:	fe7b072df30f09940a1038268b9ca23e
 Source1:	mythbackend.sysconfig
 Source2:	mythbackend.init
 Source3:	mythbackend.logrotate
@@ -494,6 +494,10 @@ for p in mythfrontend; do
 	done > $p.lang
 done
 
+for l in $RPM_BUILD_ROOT%{_datadir}/mythtv/locales/*.xml; do
+	echo $l | sed -e "s,^$RPM_BUILD_ROOT\(.*/\(.*\).xml\),%%lang(\2) \1,"
+done > mythbackend.lang
+
 # glibc language codes. attempt was made to change it on libmyth side,
 # but that was just asking for trouble due large coverage of
 # language.lower() usage.
@@ -547,10 +551,10 @@ fi
 %files
 %defattr(644,root,root,755)
 %doc README* UPGRADING AUTHORS FAQ
-%doc docs contrib config
+%doc docs contrib
 %doc keys.txt mythtvosd mythwelcome mythlcdserver
 
-%files backend
+%files backend -f mythbackend.lang
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_sbindir}/mythbackend
 %attr(755,root,root) %{_sbindir}/mythcommflag
@@ -559,6 +563,8 @@ fi
 %attr(755,root,root) %{_sbindir}/mythlcdserver
 %attr(755,root,root) %{_bindir}/mythtranscode
 %attr(755,root,root) %{_bindir}/mythreplex
+%attr(755,root,root) %{_bindir}/mythffmpeg
+%attr(755,root,root) %{_bindir}/mythpreviewgen
 %attr(775,root,mythtv) %dir /var/lib/mythtv
 %attr(700,root,mythtv) %dir /var/lib/mythtv/tmp
 %attr(775,root,mythtv) %dir /var/cache/mythtv
@@ -576,8 +582,11 @@ fi
 %attr(755,root,root) %{_bindir}/mythavtest
 %attr(755,root,root) %{_bindir}/mythtvosd
 %attr(755,root,root) %{_bindir}/mythwelcome
+%attr(755,root,root) %{_bindir}/mythffplay
 %dir %{_datadir}/mythtv
 %dir %{_datadir}/mythtv/themes
+%{_datadir}/mythtv/internetcontent
+%{_datadir}/mythtv/metadata
 %dir %{_libdir}/mythtv
 %{_datadir}/mythtv/*.xml
 %dir %{_libdir}/mythtv/filters
diff --git a/mythtv-dshowserver_trunk.patch b/mythtv-dshowserver_trunk.patch
deleted file mode 100644
index 3dce9e1..0000000
--- a/mythtv-dshowserver_trunk.patch
+++ /dev/null
@@ -1,425 +0,0 @@
-diff -urN mythtv-0.22.orig/libs/libmythtv/avformatdecoder.cpp mythtv-0.22/libs/libmythtv/avformatdecoder.cpp
---- mythtv-0.22.orig/libs/libmythtv/avformatdecoder.cpp	2009-02-17 19:57:44.000000000 +0100
-+++ mythtv-0.22/libs/libmythtv/avformatdecoder.cpp	2009-03-02 20:04:25.000000000 +0100
-@@ -2,12 +2,16 @@
- #include <cassert>
- #include <unistd.h>
- #include <cmath>
-+#include <fcntl.h>
- 
- // C++ headers
- #include <algorithm>
- #include <iostream>
- using namespace std;
- 
-+// QT headers
-+#include "qdir.h"
-+
- // MythTV headers
- #include "mythconfig.h"
- #include "avformatdecoder.h"
-@@ -53,6 +57,7 @@
- #include "avio.h"
- #include "../libmythmpeg2/mpeg2.h"
- #include "ivtv_myth.h"
-+#include "libavformat/riff.h"
- }
- 
- #define LOC QString("AFD: ")
-@@ -149,21 +154,56 @@
- 
- typedef MythDeque<AVFrame*> avframe_q;
- 
-+struct vd_struct {
-+  union {
-+  uint32_t ret;
-+  uint32_t cmd;
-+  };
-+  uint32_t buflen;
-+  uint64_t pts;
-+  uint32_t unused[8];
-+} __attribute__((__packed__));
-+
-+enum {
-+  VD_END = 1,
-+  VD_DECODE = 2,
-+  VD_SEEK = 3,
-+  VD_HAS_BIH = 0x10000,
-+  VD_VERSION_MASK = 0xFFFF,
-+};
-+
-+#include <semaphore.h>
-+#include <sys/mman.h>
-+typedef struct {
-+     int fd;
-+     void *mem;
-+     char *data;
-+     char *picture;
-+     int picsize;
-+     sem_t *sem_rd;
-+     sem_t *sem_wr;
-+     struct vd_struct *vd;
-+} ds_mpi_t;
-+
- /**
-  * Management of libmpeg2 decoding
-  */
- class AvFormatDecoderPrivate
- {
-   public:
--    AvFormatDecoderPrivate(bool allow_libmpeg2)
--        : mpeg2dec(NULL), dvdvdec(NULL), allow_mpeg2dec(allow_libmpeg2) { ; }
--   ~AvFormatDecoderPrivate() { DestroyMPEG2(); }
-+    AvFormatDecoderPrivate(bool allow_libmpeg2, bool allow_directshow)
-+        : mpeg2dec(NULL), dvdvdec(NULL), allow_mpeg2dec(allow_libmpeg2),
-+          ds_mpi(NULL), allow_dshow(allow_directshow) { ; }
-+   ~AvFormatDecoderPrivate() { DestroyMPEG2(); DestroyDirectShow();}
- 
-     bool InitMPEG2(const QString &dec);
-     bool HasMPEG2Dec(void) const { return (bool)(mpeg2dec); }
-     bool HasDVDVDec(void) const { return (bool)(dvdvdec); }
-     bool HasDecoder(void) const { return HasMPEG2Dec() || HasDVDVDec(); }
- 
-+    bool InitDirectShow(AVCodecContext *enc);
-+    bool HasDirectShow() const { return (bool)(ds_mpi); }
-+
-     void DestroyMPEG2();
-     void ResetMPEG2();
-     int DecodeMPEG2Video(AVCodecContext *avctx, AVFrame *picture,
-@@ -173,13 +213,259 @@
-     bool SetVideoSize(const QSize &video_dim);
-     DVDV *GetDVDVDecoder(void) { return dvdvdec; }
- 
-+    void DestroyDirectShow();
-+    void ResetDirectShow();
-+    int DecodeDirectShowVideo(AVCodecContext *avctx, AVFrame *picture,
-+                         int *got_picture_ptr, uint8_t *buf, int buf_size,
-+                         long long *pts);
-+
-   private:
-     mpeg2dec_t *mpeg2dec;
-     DVDV       *dvdvdec;
-     bool        allow_mpeg2dec;
-+    ds_mpi_t   *ds_mpi;
-+    bool        allow_dshow;
-     avframe_q   partialFrames;
- };
- 
-+static int sem_twait(sem_t *sem, int t) {
-+    struct timespec ts;
-+    clock_gettime(CLOCK_REALTIME, &ts);
-+    ts.tv_sec += t;
-+    return(sem_timedwait(sem, &ts));
-+}
-+bool AvFormatDecoderPrivate::InitDirectShow(AVCodecContext *enc)
-+{
-+    typedef struct {
-+        uint32_t f1;
-+        uint16_t f2;
-+        uint16_t f3;
-+        uint8_t  f4[8];
-+    } GUID;
-+
-+    const struct AVCodecTag *bmp_taglists[] = {codec_bmp_tags, 0};
-+
-+    if(enc->codec_tag == 0)
-+        enc->codec_tag = av_codec_get_tag(bmp_taglists, enc->codec_id);
-+    VERBOSE(VB_IMPORTANT, LOC + QString("Trying DirectShow for FOURCC 0x%1")
-+            .arg(enc->codec_tag, 8, 16));
-+    if (!allow_dshow)
-+        return false;
-+    DestroyDirectShow();
-+    if (enc->codec_tag == 0) {
-+        allow_dshow = false;
-+        return false;
-+    }
-+//    QString dec = gContext->GetSetting("UseDirectShowVideoDecoder", "no");
-+    QString dec = "yes";
-+
-+    if (dec == "yes")
-+    {
-+        bool found = false;
-+        QString codec;
-+        GUID guid = {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}};
-+        QString codec_file = QDir::homePath() +
-+                            QString("/.mythtv/dshowcodecs");
-+        if (! QFileInfo(codec_file).isFile()) {
-+            allow_dshow = false;
-+            return false;
-+        }
-+        QString videotype;
-+        AVCodec *avc = avcodec_find_decoder(enc->codec_id);
-+        if (! avc) {
-+           allow_dshow = false;
-+           return false;
-+        }
-+        videotype = avc->name;
-+        QFile fh (codec_file);
-+        QString line;
-+        fh.open(QIODevice::ReadOnly);
-+        while (! fh.atEnd() && ! found) {
-+            QStringList fourc, guidlist;
-+            line = fh.readLine(1024);
-+            codec = line.section(':', 0, 0).simplified();
-+            fourc = line.section(':', 1, 1).split(",");
-+            guidlist  = line.section(':', 2, 2).split(",");
-+            if (guidlist.count() != 11)
-+                continue;
-+            for (QStringList::Iterator it = fourc.begin();
-+                 it != fourc.end(); it++)
-+            {
-+                if ((*it).simplified() == videotype)
-+                {
-+                    guid.f1 = guidlist[0].toUInt(0, 0);
-+                    guid.f2 = guidlist[1].toUShort(0, 0);
-+                    guid.f3 = guidlist[2].toUShort(0, 0);
-+                    for (int i = 0; i < 8; i++)
-+                        guid.f4[i] = guidlist[i + 3].toUShort(0, 0);
-+                    found = true;
-+                }
-+            }
-+            if (found)
-+                break;
-+        }
-+        fh.close();
-+        if (found) {
-+            int ret;
-+            char cmd[255], shm[80], sem1[80], sem2[80];
-+            uint32_t out_fmt;
-+            int bpp;
-+            //out_fmt = 0x30323449; bpp = 12; //I420 12bpp
-+            out_fmt = 0x32595559; bpp = 16; //YUY2 16bpp
-+            snprintf(cmd, 255, "dshowserver -c %s -s %dx%d "
-+                     "-g %08x-%04x-%04x-%02x%02x%02x%02x%02x%02x%02x%02x "
-+                     "-f 0x%08x -b %d -o 0x%08x -p %d -i %x %s&",
-+                codec.toAscii().constData(), enc->width, enc->height,
-+                guid.f1, guid.f2, guid.f3,
-+                      guid.f4[0], guid.f4[1], guid.f4[2], guid.f4[3],
-+                      guid.f4[4], guid.f4[5], guid.f4[6], guid.f4[7],
-+                enc->codec_tag, bpp, out_fmt, getpid(), *(int *)pthread_self(),
-+                ((print_verbose_messages & VB_PLAYBACK) == VB_PLAYBACK ?
-+                            "-d" : ""));
-+            ds_mpi = new ds_mpi_t;
-+            snprintf(shm, 80, "/dshow_shm.%x", *(int *)pthread_self());
-+            snprintf(sem1, 80, "/dshow_sem1.%x", *(int *)pthread_self());
-+            snprintf(sem2, 80, "/dshow_sem2.%x", *(int *)pthread_self());
-+            ds_mpi->fd = shm_open(shm, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
-+            ds_mpi->picsize =  enc->width * enc->height * bpp / 8;
-+            int extra = 0;
-+            if (enc->height % 16)
-+                extra = (16 - enc->height % 16) * bpp / 8;
-+            int memsize = sizeof(struct vd_struct) + enc->width * enc->height +
-+                          ds_mpi->picsize + extra;
-+            ftruncate(ds_mpi->fd, memsize);
-+            ds_mpi->mem = mmap(NULL, memsize, PROT_READ | PROT_WRITE,
-+                               MAP_SHARED, ds_mpi->fd, 0);
-+            if(ds_mpi->mem == MAP_FAILED) {
-+              perror("mmap");
-+              allow_dshow = false;
-+              return false;
-+            }
-+            memset((char *)ds_mpi->mem, 0, sizeof(struct vd_struct));
-+
-+            if (extra)
-+                memset((char *)ds_mpi->mem + (memsize - extra), 0, extra);
-+            ds_mpi->vd = (struct vd_struct *)ds_mpi->mem;
-+            ds_mpi->data = ((char *)ds_mpi->mem) + sizeof(struct vd_struct);
-+            ds_mpi->picture = ds_mpi->data + enc->width * enc->height;
-+            //Create read/write semaphores in locked state
-+            ds_mpi->sem_wr = sem_open(sem1, O_CREAT, 0644, 0);
-+            ds_mpi->sem_rd = sem_open(sem2, O_CREAT, 0644, 0);
-+            myth_system(cmd);
-+            ret = sem_twait(ds_mpi->sem_rd, 10);
-+            shm_unlink(shm);
-+            sem_unlink(sem1);
-+            sem_unlink(sem2);
-+            if(ret != 0) {
-+                VERBOSE(VB_IMPORTANT, LOC + "DirectShow filter failed");
-+            } else {
-+                VERBOSE(VB_IMPORTANT, LOC + "Found DirectShow filter");
-+                return true;
-+            }
-+       }
-+    }
-+    allow_dshow = false;
-+    return false;
-+}
-+
-+void AvFormatDecoderPrivate::DestroyDirectShow()
-+{
-+    if (ds_mpi)
-+    {
-+        VERBOSE(VB_PLAYBACK, LOC + "Destroying filter");
-+        ds_mpi->vd->cmd = VD_END; //'1' is cmd for terminating
-+        sem_post(ds_mpi->sem_wr);
-+        close(ds_mpi->fd);
-+        sem_close(ds_mpi->sem_wr);
-+        sem_close(ds_mpi->sem_rd);
-+        delete ds_mpi;
-+        ds_mpi = NULL;
-+    }
-+}
-+
-+void AvFormatDecoderPrivate::ResetDirectShow()
-+{
-+    if (ds_mpi) {
-+      ds_mpi->vd->cmd = VD_SEEK; //'3' is cmd for seek
-+      sem_post(ds_mpi->sem_wr);
-+      sem_twait(ds_mpi->sem_rd, 10);
-+    }
-+}
-+
-+void yuy2i420(AVFrame *dst, char *src, int w, int l)
-+{
-+  uint8_t *y, *u, *v;
-+  y = dst->data[0];
-+  u = dst->data[1];
-+  v = dst->data[2];
-+  int i,j;
-+  for(i=0; i < l; i++) {
-+    for(j=0; j < w; j+=2) {
-+      *(y++) = *(src++);
-+      *(u++) = *(src++);
-+      *(y++) = *(src++);
-+      *(v++) = *(src++);
-+    }
-+    i++;
-+    for(j=0; j < w; j+=2) {
-+      *(y++) = *src;
-+      src+=2;
-+      *(y++) = *src;
-+      src+=2;
-+   }
-+  }
-+}
-+
-+int AvFormatDecoderPrivate::DecodeDirectShowVideo(AVCodecContext *avctx,
-+                                             AVFrame *picture,
-+                                             int *got_picture_ptr,
-+                                             uint8_t *buf, int buf_size,
-+                                             long long *pts)
-+{
-+    int ret;
-+    ds_mpi->vd->cmd = VD_DECODE; //'1' is cmd for decoding
-+    memcpy(ds_mpi->data, buf, buf_size);
-+    ds_mpi->vd->buflen = buf_size;
-+    ds_mpi->vd->pts = (uint64_t)*pts;
-+    sem_post(ds_mpi->sem_wr);
-+    ret = sem_twait(ds_mpi->sem_rd, 10);
-+    if (ret == 0 && ds_mpi->vd->ret && ! (ds_mpi->vd->ret & (1<<31))) {
-+        *got_picture_ptr = 1;
-+        if (ds_mpi->vd->pts) {
-+            *pts = (long long)ds_mpi->vd->pts;
-+        }
-+        picture->interlaced_frame = (ds_mpi->vd->ret & 10) ? true : false;
-+        avctx->get_buffer(avctx, picture);
-+#if 0  //Using YV12
-+        if(avctx->height & 0x0f) {
-+           unsigned long pos, pos1, siz = avctx->height * avctx->width;
-+           memcpy(picture->data[0], ds_mpi->picture, siz);
-+           pos = siz;
-+           pos1 = siz + avctx->width * (16 - avctx->height % 16);
-+           siz /= 4;
-+           memcpy(picture->data[0]+pos1, ds_mpi->picture+pos, siz);
-+           pos+=siz;
-+           pos1+=siz + avctx->width * ( 16 - avctx->height % 16) / 4;
-+           memcpy(picture->data[0]+pos1, ds_mpi->picture+pos, siz);
-+        } else {
-+          memcpy(picture->data[0], ds_mpi->picture, ds_mpi->picsize);
-+        }
-+#else //Using YUY2
-+        //YUY2 is a packed format so padding is easier
-+        //int extra = 0;
-+        //if(avctx->height % 16)
-+            //extra = (16 - avctx->height % 16);
-+        yuy2i420(picture, ds_mpi->picture,
-+                 avctx->width, avctx->height);
-+#endif
-+    } else {
-+      *got_picture_ptr = 0;
-+    }
-+    return buf_size;
-+}
-+
-+/*************************************************/
-+
- /**
-  * \brief Initialise either libmpeg2, or DVDV (Mac HW accel), to do decoding
-  *
-@@ -401,7 +687,7 @@
-                                  bool use_null_videoout,
-                                  bool allow_libmpeg2)
-     : DecoderBase(parent, pginfo),
--      d(new AvFormatDecoderPrivate(allow_libmpeg2)),
-+      d(new AvFormatDecoderPrivate(allow_libmpeg2, true)),
-       is_db_ignored(gContext->IsDatabaseIgnored()),
-       m_h264_parser(new H264Parser()),
-       ic(NULL),
-@@ -684,6 +970,7 @@
-                 avcodec_flush_buffers(enc);
-         }
-         d->ResetMPEG2();
-+        d->ResetDirectShow();
-     }
- 
-     // Discard all the queued up decoded frames
-@@ -1584,6 +1871,9 @@
-                         }
-                     }
- 
-+                    if (CODEC_ID_H264 == enc->codec_id)
-+                      force_xv = true;
-+
-                     MythCodecID mcid;
-                     mcid = VideoOutputXv::GetBestSupportedCodec(
-                         /* disp dim     */ width, height,
-@@ -1593,6 +1883,7 @@
-                         /* test surface */ kCodec_NORMAL_END > video_codec_id,
-                         /* force_xv     */ force_xv);
-                     bool vcd, idct, mc, vdpau;
-+
-                     enc->codec_id = (CodecID)
-                         myth2av_codecid(mcid, vcd, idct, mc, vdpau);
- 
-@@ -1668,6 +1959,7 @@
-                 }
- 
-                 // Initialize alternate decoders when needed...
-+              if (! d->InitDirectShow(enc))
-                 if (((dec == "libmpeg2") &&
-                      (CODEC_ID_MPEG1VIDEO == enc->codec_id ||
-                       CODEC_ID_MPEG2VIDEO == enc->codec_id)) ||
-@@ -3756,7 +4048,21 @@
-                     int gotpicture = 0;
- 
-                     avcodeclock.lock();
--                    if (d->HasDecoder())
-+/*                    printf("Trying: %d\n",len);
-+                    if (0) {
-+                      static int fnum = 0;
-+                      char str[80];
-+                      int fh;
-+                      sprintf(str,"enc%d", fnum++);;
-+                      fh = open(str, 01101,00777);
-+                      write(fh, ptr, len);
-+                      close(fh);
-+                    }
-+*/
-+                    if (d->HasDirectShow())
-+                        ret = d->DecodeDirectShowVideo(context, &mpa_pic,
-+                                                  &gotpicture, ptr, len, &pts);
-+                    else if (d->HasDecoder())
-                     {
-                         if (decodeStillFrame)
-                         {
-diff -urN mythtv-0.22.orig/libs/libmythtv/libmythtv.pro mythtv-0.22/libs/libmythtv/libmythtv.pro
---- mythtv-0.22.orig/libs/libmythtv/libmythtv.pro	2009-02-17 19:57:44.000000000 +0100
-+++ mythtv-0.22/libs/libmythtv/libmythtv.pro	2009-03-02 19:54:23.000000000 +0100
-@@ -57,6 +57,7 @@
- }
- using_backend: LIBS += -lmp3lame
- LIBS += -lz $$EXTRA_LIBS $$QMAKE_LIBS_DYNLOAD
-+LIBS += -lrt
- 
- TARGETDEPS += ../libmyth/libmyth-$${MYTH_SHLIB_EXT}
- TARGETDEPS += ../libavutil/libmythavutil-$${MYTH_SHLIB_EXT}
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/mythtv.git/commitdiff/75bb787c27ce89247b72c969774dc827a9c500b4



More information about the pld-cvs-commit mailing list