commit:     5af06626ddac2bdc28d9eeb557a231c0e1ff1b81
Author:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
AuthorDate: Thu Apr 19 08:26:19 2018 +0000
Commit:     Ian Whyman <thev00d00 <AT> gentoo <DOT> org>
CommitDate: Fri Apr 20 19:11:14 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5af06626

media-video/handbrake: Fixed build with USE="-libav".

Also add xdg_desktop_database_update calls.

Closes: https://bugs.gentoo.org/653254
Package-Manager: Portage-2.3.30, Repoman-2.3.9
Closes: https://github.com/gentoo/gentoo/pull/8065

 .../handbrake/files/handbrake-1.1.0-nolibav.patch  | 235 +++++++++++++++++++++
 media-video/handbrake/handbrake-1.1.0.ebuild       |   6 +-
 2 files changed, 239 insertions(+), 2 deletions(-)

diff --git a/media-video/handbrake/files/handbrake-1.1.0-nolibav.patch 
b/media-video/handbrake/files/handbrake-1.1.0-nolibav.patch
new file mode 100644
index 00000000000..bb7e17bdde5
--- /dev/null
+++ b/media-video/handbrake/files/handbrake-1.1.0-nolibav.patch
@@ -0,0 +1,235 @@
+From 9e1f245708a157231c427c0ef9b91729d59a30e1 Mon Sep 17 00:00:00 2001
+From: John Stebbins <jstebbins...@gmail.com>
+Date: Tue, 28 Nov 2017 08:22:54 -0800
+Subject: [PATCH] add sdtp (sample dependency) box to mp4 (#1006)
+
+* add sdtp (sample dependency) box to mp4
+
+The AppleTV 4K requires this box in order to play 2160p60 video.
+---
+ contrib/ffmpeg/A21-mp4-sdtp.patch | 126 ++++++++++++++++++++++++++++++++++++++
+ libhb/encavcodec.c                |   8 ++-
+ libhb/encx264.c                   |   7 +--
+ libhb/encx265.c                   |   3 +
+ libhb/muxavformat.c               |   4 ++
+ 5 files changed, 140 insertions(+), 8 deletions(-)
+ create mode 100644 contrib/ffmpeg/A21-mp4-sdtp.patch
+
+diff --git a/contrib/ffmpeg/A21-mp4-sdtp.patch 
b/contrib/ffmpeg/A21-mp4-sdtp.patch
+new file mode 100644
+index 000000000..5d2221c47
+--- /dev/null
++++ b/contrib/ffmpeg/A21-mp4-sdtp.patch
+@@ -0,0 +1,126 @@
++From c2204c579c8411771b53a4bc66324c7c5d07698a Mon Sep 17 00:00:00 2001
++From: John Stebbins <stebb...@jetheaddev.com>
++Date: Thu, 16 Nov 2017 14:40:12 -0800
++Subject: [PATCH] movenc: add sdtp (sample dependency) box to mp4
++
++The AppleTV 4K requires this box in order to play 2160p60 video.
++---
++ libavcodec/avcodec.h |  9 +++++++--
++ libavformat/movenc.c | 34 +++++++++++++++++++++++++++++++++-
++ libavformat/movenc.h |  6 ++++++
++ 3 files changed, 46 insertions(+), 3 deletions(-)
++
++diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
++index 5624835023..48e9d23679 100644
++--- a/libavcodec/avcodec.h
+++++ b/libavcodec/avcodec.h
++@@ -1161,8 +1161,13 @@ typedef struct AVPacket {
++     int64_t convergence_duration;
++ #endif
++ } AVPacket;
++-#define AV_PKT_FLAG_KEY     0x0001 ///< The packet contains a keyframe
++-#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
+++#define AV_PKT_FLAG_KEY         0x0001 ///< The packet contains a keyframe
+++#define AV_PKT_FLAG_CORRUPT     0x0002 ///< The packet content is corrupted
+++/**
+++ * Flag is used to indicate packets that contain frames that can
+++ * be discarded by the decoder.  I.e. Non-reference frames.
+++ */
+++#define AV_PKT_FLAG_DISPOSABLE  0x0004
++ 
++ enum AVSideDataParamChangeFlags {
++     AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT  = 0x0001,
++diff --git a/libavformat/movenc.c b/libavformat/movenc.c
++index a546fdfead..d263f444f4 100644
++--- a/libavformat/movenc.c
+++++ b/libavformat/movenc.c
++@@ -227,6 +227,30 @@ static int mov_write_stss_tag(AVIOContext *pb, MOVTrack 
*track, uint32_t flag)
++     return update_size(pb, pos);
++ }
++ 
+++/* Sample dependency atom */
+++static int mov_write_sdtp_tag(AVIOContext *pb, MOVTrack *track)
+++{
+++    int i;
+++    uint8_t leading, dependent, reference, redundancy;
+++    int64_t pos = avio_tell(pb);
+++    avio_wb32(pb, 0); // size
+++    ffio_wfourcc(pb, "sdtp");
+++    avio_wb32(pb, 0); // version & flags
+++    for (i = 0; i < track->entry; i++) {
+++        dependent = MOV_SAMPLE_DEPENDENCY_YES;
+++        leading = reference = redundancy = MOV_SAMPLE_DEPENDENCY_UNKNOWN;
+++        if (track->cluster[i].flags & MOV_DISPOSABLE_SAMPLE) {
+++            reference = MOV_SAMPLE_DEPENDENCY_NO;
+++        }
+++        if (track->cluster[i].flags & MOV_SYNC_SAMPLE) {
+++            dependent = MOV_SAMPLE_DEPENDENCY_NO;
+++        }
+++        avio_w8(pb, (leading << 6)   | (dependent << 4) |
+++                    (reference << 2) | redundancy);
+++    }
+++    return update_size(pb, pos);
+++}
+++
++ static int mov_write_amr_tag(AVIOContext *pb, MOVTrack *track)
++ {
++     avio_wb32(pb, 0x11); /* size */
++@@ -1211,8 +1235,12 @@ static int mov_write_stbl_tag(AVFormatContext *s, 
AVIOContext *pb, MOVTrack *tra
++     mov_write_stts_tag(pb, track);
++     if ((track->par->codec_type == AVMEDIA_TYPE_VIDEO ||
++          track->par->codec_tag == MKTAG('r','t','p',' ')) &&
++-        track->has_keyframes && track->has_keyframes < track->entry)
+++        track->has_keyframes && track->has_keyframes < track->entry) {
++         mov_write_stss_tag(pb, track, MOV_SYNC_SAMPLE);
+++    }
+++    if (track->par->codec_type == AVMEDIA_TYPE_VIDEO && 
track->has_disposable) {
+++        mov_write_sdtp_tag(pb, track);
+++    }
++     if (track->mode == MODE_MOV && track->flags & MOV_TRACK_STPS)
++         mov_write_stss_tag(pb, track, MOV_PARTIAL_SYNC_SAMPLE);
++     if (track->par->codec_type == AVMEDIA_TYPE_VIDEO &&
++@@ -3647,6 +3675,10 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket 
*pkt)
++         if (trk->cluster[trk->entry].flags & MOV_SYNC_SAMPLE)
++             trk->has_keyframes++;
++     }
+++    if (pkt->flags & AV_PKT_FLAG_DISPOSABLE) {
+++        trk->cluster[trk->entry].flags |= MOV_DISPOSABLE_SAMPLE;
+++        trk->has_disposable++;
+++    }
++     trk->entry++;
++     trk->sample_count += samples_in_chunk;
++     mov->mdat_size    += size;
++diff --git a/libavformat/movenc.h b/libavformat/movenc.h
++index 008f4671c6..f4eb4e8078 100644
++--- a/libavformat/movenc.h
+++++ b/libavformat/movenc.h
++@@ -51,6 +51,7 @@ typedef struct MOVIentry {
++     int          cts;
++ #define MOV_SYNC_SAMPLE         0x0001
++ #define MOV_PARTIAL_SYNC_SAMPLE 0x0002
+++#define MOV_DISPOSABLE_SAMPLE   0x0004
++     uint32_t     flags;
++ } MOVIentry;
++ 
++@@ -85,6 +86,7 @@ typedef struct MOVTrack {
++     long        sample_count;
++     long        sample_size;
++     int         has_keyframes;
+++    int         has_disposable;
++ #define MOV_TRACK_CTTS         0x0001
++ #define MOV_TRACK_STPS         0x0002
++ #define MOV_TRACK_ENABLED      0x0004
++@@ -180,6 +182,10 @@ typedef struct MOVMuxContext {
++     int missing_duration_warned;
++ } MOVMuxContext;
++ 
+++#define MOV_SAMPLE_DEPENDENCY_UNKNOWN 0x0
+++#define MOV_SAMPLE_DEPENDENCY_YES     0x1
+++#define MOV_SAMPLE_DEPENDENCY_NO      0x2
+++
++ #define FF_MOV_FLAG_RTP_HINT              (1 <<  0)
++ #define FF_MOV_FLAG_FRAGMENT              (1 <<  1)
++ #define FF_MOV_FLAG_EMPTY_MOOV            (1 <<  2)
++-- 
++2.13.6
++
+diff --git a/libhb/encavcodec.c b/libhb/encavcodec.c
+index 59d491148..9960a21b4 100644
+--- a/libhb/encavcodec.c
++++ b/libhb/encavcodec.c
+@@ -532,12 +532,14 @@ static void get_packets( hb_work_object_t * w, 
hb_buffer_list_t * list )
+         out->s.duration = get_frame_duration(pv, frameno);
+         out->s.stop     = out->s.stop + out->s.duration;
+         // libav 12 deprecated context->coded_frame, so we can't determine
+-        // the exact frame type any more.  Luckily for us, we really don't
+-        // require it.
++        // the exact frame type any more. So until I can completely
++        // wire up ffmpeg with AV_PKT_DISPOSABLE_FRAME, all frames
++        // must be considered to potentially be reference frames
++        out->s.flags     = HB_FLAG_FRAMETYPE_REF;
+         out->s.frametype = 0;
+         if (pkt.flags & AV_PKT_FLAG_KEY)
+         {
+-            out->s.flags = HB_FLAG_FRAMETYPE_REF | HB_FLAG_FRAMETYPE_KEY;
++            out->s.flags |= HB_FLAG_FRAMETYPE_KEY;
+             hb_chapter_dequeue(pv->chapter_queue, out);
+         }
+         out = process_delay_list(pv, out);
+diff --git a/libhb/encx264.c b/libhb/encx264.c
+index ce7879ec7..26645213a 100644
+--- a/libhb/encx264.c
++++ b/libhb/encx264.c
+@@ -701,6 +701,7 @@ static hb_buffer_t *nal_encode( hb_work_object_t *w, 
x264_picture_t *pic_out,
+              frames we only get the duration of the first which will
+              eventually screw up the muxer & decoder. */
+     int i;
++    buf->s.flags &= ~HB_FLAG_FRAMETYPE_REF;
+     for( i = 0; i < i_nal; i++ )
+     {
+         int size = nal[i].i_payload;
+@@ -737,11 +738,7 @@ static hb_buffer_t *nal_encode( hb_work_object_t *w, 
x264_picture_t *pic_out,
+          * Also, since libx264 doesn't tell us when B-frames are
+          * themselves reference frames, figure it out on our own.
+          */
+-        if (nal[i].i_ref_idc == NAL_PRIORITY_DISPOSABLE)
+-        {
+-            buf->s.flags &= ~HB_FLAG_FRAMETYPE_REF;
+-        }
+-        else
++        if (nal[i].i_ref_idc != NAL_PRIORITY_DISPOSABLE)
+         {
+             if (buf->s.frametype == HB_FRAME_B)
+             {
+diff --git a/libhb/encx265.c b/libhb/encx265.c
+index ec7b7d574..242dc6f1f 100644
+--- a/libhb/encx265.c
++++ b/libhb/encx265.c
+@@ -425,16 +425,19 @@ static hb_buffer_t* nal_encode(hb_work_object_t *w,
+             buf->s.frametype = HB_FRAME_IDR;
+             break;
+         case X265_TYPE_P:
++            buf->s.flags |= HB_FLAG_FRAMETYPE_REF;
+             buf->s.frametype = HB_FRAME_P;
+             break;
+         case X265_TYPE_B:
+             buf->s.frametype = HB_FRAME_B;
+             break;
+         case X265_TYPE_BREF:
++            buf->s.flags |= HB_FLAG_FRAMETYPE_REF;
+             buf->s.frametype = HB_FRAME_BREF;
+             break;
+         case X265_TYPE_I:
+         default:
++            buf->s.flags |= HB_FLAG_FRAMETYPE_REF;
+             buf->s.frametype = HB_FRAME_I;
+             break;
+     }
+diff --git a/libhb/muxavformat.c b/libhb/muxavformat.c
+index f85336dfe..62a270d5b 100644
+--- a/libhb/muxavformat.c
++++ b/libhb/muxavformat.c
+@@ -1197,6 +1197,10 @@ static int avformatMux(hb_mux_object_t *m, 
hb_mux_data_t *track, hb_buffer_t *bu
+         {
+             pkt.flags |= AV_PKT_FLAG_KEY;
+         }
++        if (!(buf->s.flags & HB_FLAG_FRAMETYPE_REF))
++        {
++            pkt.flags |= AV_PKT_FLAG_DISPOSABLE;
++        }
+     }
+     else if (buf->s.frametype & HB_FRAME_MASK_KEY)
+     {

diff --git a/media-video/handbrake/handbrake-1.1.0.ebuild 
b/media-video/handbrake/handbrake-1.1.0.ebuild
index 4ea9a4d91e3..e5423a88492 100644
--- a/media-video/handbrake/handbrake-1.1.0.ebuild
+++ b/media-video/handbrake/handbrake-1.1.0.ebuild
@@ -5,7 +5,7 @@ EAPI=6
 
 PYTHON_COMPAT=( python2_7 )
 
-inherit autotools eutils gnome2-utils python-any-r1
+inherit autotools eutils gnome2-utils python-any-r1 xdg-utils
 
 if [[ ${PV} = *9999* ]]; then
        EGIT_REPO_URI="https://github.com/HandBrake/HandBrake.git";
@@ -99,7 +99,7 @@ src_prepare() {
        default
 
        # Get rid of libav specific code when using ffmpeg
-       use libav || eapply -R "${FILESDIR}/${PN}-0.10.3-nolibav.patch"
+       use libav || eapply -R "${FILESDIR}/${PN}-1.1.0-nolibav.patch"
 
        cd "${S}/gtk"
        # Don't run autogen.sh.
@@ -145,6 +145,7 @@ pkg_postinst() {
        fi
 
        gnome2_icon_cache_update
+       xdg_desktop_database_update
 }
 
 pkg_preinst() {
@@ -153,4 +154,5 @@ pkg_preinst() {
 
 pkg_postrm() {
        gnome2_icon_cache_update
+       xdg_desktop_database_update
 }

Reply via email to