当前位置:Gxlcms > 数据库问题 > HandBrake-QuickSync-Mac (内容:QuickSync encoder via VideoToolbox )

HandBrake-QuickSync-Mac (内容:QuickSync encoder via VideoToolbox )

时间:2021-07-01 10:21:17 帮助过:7人阅读


  •  
    •  
    • 1

     

    galad87/HandBrake-QuickSync-Mac forked from kallisti5/HaikuBrake

         

    QuickSync encoder via VideoToolbox

    Implements a new encoder in HandBrake that uses VideoToolbox.framework
    to access the hardware h.264 encoder.
     
    • master
    1 parent a13430b commit 2c1332958f7095c640cbcbcb45ffc955739d5945 技术分享 galad87 committed on 20 Jun 2013

         

    Showing

    with 540 additions and 14 deletions.
    1. +10 −8 ?????
    1. test/module.defs
        18 ????? libhb/common.c  
    @@ -185,15 +185,16 @@ hb_encoder_t *hb_video_encoders_last_item = NULL;
     
    hb_encoder_internal_t hb_video_encoders[] =
     
    {
     
    // legacy encoders, back to HB 0.9.4 whenever possible (disabled)
     
    - { { "FFmpeg", "ffmpeg", HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_MPEG4, },
     
    - { { "MPEG-4 (FFmpeg)", "ffmpeg4", HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_MPEG4, },
     
    - { { "MPEG-2 (FFmpeg)", "ffmpeg2", HB_VCODEC_FFMPEG_MPEG2, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_MPEG2, },
     
    - { { "VP3 (Theora)", "libtheora", HB_VCODEC_THEORA, HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_THEORA, },
     
    + { { "FFmpeg", "ffmpeg", HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_MPEG4, },
     
    + { { "MPEG-4 (FFmpeg)", "ffmpeg4", HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_MPEG4, },
     
    + { { "MPEG-2 (FFmpeg)", "ffmpeg2", HB_VCODEC_FFMPEG_MPEG2, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_MPEG2, },
     
    + { { "VP3 (Theora)", "libtheora", HB_VCODEC_THEORA, HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_THEORA, },
     
    // actual encoders
     
    - { { "H.264 (x264)", "x264", HB_VCODEC_X264, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_H264, },
     
    - { { "MPEG-4", "mpeg4", HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG4, },
     
    - { { "MPEG-2", "mpeg2", HB_VCODEC_FFMPEG_MPEG2, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG2, },
     
    - { { "Theora", "theora", HB_VCODEC_THEORA, HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_THEORA, },
     
    + { { "H.264 (x264)", "x264", HB_VCODEC_X264, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_H264, },
     
    + { { "H.264 (VideoToolbox)", "h264", HB_VCODEC_VT_H264, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_H264, },
     
    + { { "MPEG-4", "mpeg4", HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG4, },
     
    + { { "MPEG-2", "mpeg2", HB_VCODEC_FFMPEG_MPEG2, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG2, },
     
    + { { "Theora", "theora", HB_VCODEC_THEORA, HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_THEORA, },
     
    };
     
    int hb_video_encoders_count = sizeof(hb_video_encoders) / sizeof(hb_video_encoders[0]);
     
    static int hb_video_encoder_is_enabled(int encoder)
    @@ -202,6 +203,7 @@ static int hb_video_encoder_is_enabled(int encoder)
     
    {
     
    // the following encoders are always enabled
     
    case HB_VCODEC_X264:
     
    + case HB_VCODEC_VT_H264:
     
    case HB_VCODEC_THEORA:
     
    case HB_VCODEC_FFMPEG_MPEG4:
     
    case HB_VCODEC_FFMPEG_MPEG2:
     

        2 ????? libhb/common.h  
    @@ -403,6 +403,7 @@ struct hb_job_s
     
    #define HB_VCODEC_MASK 0x00000FF
     
    #define HB_VCODEC_X264 0x0000001
     
    #define HB_VCODEC_THEORA 0x0000002
     
    +#define HB_VCODEC_VT_H264 0x0000004
     
    #define HB_VCODEC_FFMPEG_MPEG4 0x0000010
     
    #define HB_VCODEC_FFMPEG_MPEG2 0x0000020
     
    #define HB_VCODEC_FFMPEG_MASK 0x00000F0
    @@ -1008,6 +1009,7 @@ extern hb_work_object_t hb_encvorbis;
     
    extern hb_work_object_t hb_muxer;
     
    extern hb_work_object_t hb_encca_aac;
     
    extern hb_work_object_t hb_encca_haac;
     
    +extern hb_work_object_t hb_encvt_h264;
     
    extern hb_work_object_t hb_encavcodeca;
     
    extern hb_work_object_t hb_reader;
     

     

        1 ????? libhb/hb.c  
    @@ -1644,6 +1644,7 @@ int hb_global_init()
     
    #ifdef __APPLE__
     
    hb_register(&hb_encca_aac);
     
    hb_register(&hb_encca_haac);
     
    + hb_register(&hb_encvt_h264);
     
    #endif
     
    #ifdef USE_FAAC
     
    hb_register(&hb_encfaac);
     

        1 ????? libhb/internal.h  
    @@ -406,6 +406,7 @@ enum
     
    WORK_ENCAVCODEC,
     
    WORK_ENCX264,
     
    WORK_ENCTHEORA,
     
    + WORK_ENCVT_H264,
     
    WORK_DECA52,
     
    WORK_DECAVCODEC,
     
    WORK_DECAVCODECV,
     

        1 ????? libhb/muxmkv.c  
    @@ -97,6 +97,7 @@ static int MKVInit( hb_mux_object_t * m )
     
    switch (job->vcodec)
     
    {
     
    case HB_VCODEC_X264:
     
    + case HB_VCODEC_VT_H264:
     
    track->codecID = MK_VCODEC_MP4AVC;
     
    /* Taken from x264 muxers.c */
     
    avcC_len = 5 + 1 + 2 + job->config.h264.sps_length + 1 + 2 + job->config.h264.pps_length;
     

        10 ????? libhb/muxmp4.c  
    @@ -129,7 +129,7 @@ static int MP4Init( hb_mux_object_t * m )
     
    return 0;
     
    }
     

     
    - if( job->vcodec == HB_VCODEC_X264 )
     
    + if( job->vcodec == HB_VCODEC_X264 || job->vcodec == HB_VCODEC_VT_H264 )
     
    {
     
    /* Stolen from mp4creator */
     
    MP4SetVideoProfileLevel( m->file, 0x7F );
    @@ -684,7 +684,7 @@ static int MP4Mux( hb_mux_object_t * m, hb_mux_data_t * mux_data,
     
    if( mux_data == job->mux_data )
     
    {
     
    /* Video */
     
    - if( job->vcodec == HB_VCODEC_X264 ||
     
    + if( job->vcodec == HB_VCODEC_X264 || job->vcodec == HB_VCODEC_VT_H264 ||
     
    ( job->vcodec & HB_VCODEC_FFMPEG_MASK ) )
     
    {
     
    if ( buf && buf->s.start < buf->s.renderOffset )
    @@ -706,7 +706,7 @@ static int MP4Mux( hb_mux_object_t * m, hb_mux_data_t * mux_data,
     

     
    stop = buf->s.start + buf->s.duration;
     

     
    - if( job->vcodec == HB_VCODEC_X264 ||
     
    + if( job->vcodec == HB_VCODEC_X264 || job->vcodec == HB_VCODEC_VT_H264 ||
     
    ( job->vcodec & HB_VCODEC_FFMPEG_MASK ) )
     
    {
     
    // x264 supplies us with DTS, so offset is PTS - DTS
    @@ -744,7 +744,7 @@ static int MP4Mux( hb_mux_object_t * m, hb_mux_data_t * mux_data,
     
    }
     
    }
     

     
    - if( job->vcodec == HB_VCODEC_X264 ||
     
    + if( job->vcodec == HB_VCODEC_X264 || job->vcodec == HB_VCODEC_VT_H264 ||
     
    ( job->vcodec & HB_VCODEC_FFMPEG_MASK ) )
     
    {
     
    // x264 supplies us with DTS
    @@ -822,7 +822,7 @@ static int MP4Mux( hb_mux_object_t * m, hb_mux_data_t * mux_data,
     
    }
     

     
    /* Here‘s where the sample actually gets muxed. */
     
    - if( ( job->vcodec == HB_VCODEC_X264 ||
     
    + if( ( job->vcodec == HB_VCODEC_X264 || job->vcodec == HB_VCODEC_VT_H264||
     
    ( job->vcodec & HB_VCODEC_FFMPEG_MASK ) )
     
    && mux_data == job->mux_data )
     
    {
     

        498 ????? libhb/platform/macosx/encvt_h264.c  
    @@ -0,0 +1,498 @@
     
    +/* encvt_h264.c
     
    +
     
    + Copyright (c) 2003-2013 HandBrake Team
     
    + This file is part of the HandBrake source code
     
    + Homepage: <http://handbrake.fr/>.
     
    + It may be used under the terms of the GNU General Public License v2.
     
    + For full terms see the file COPYING file or visit http://www.gnu.org/licenses/gpl-2.0.html
     
    + */
     
    +
     
    +#include "hb.h"
     
    +#include <VideoToolbox/VideoToolbox.h>
     
    +#include <CoreMedia/CoreMedia.h>
     
    +#include <CoreVideo/CoreVideo.h>
     
    +
     
    +int encvt_h264Init( hb_work_object_t *, hb_job_t * );
     
    +int encvt_h264Work( hb_work_object_t *, hb_buffer_t **, hb_buffer_t ** );
     
    +void encvt_h264Close( hb_work_object_t * );
     
    +
     
    +hb_work_object_t hb_encvt_h264 =
     
    +{
     
    + WORK_ENCVT_H264,

    人气教程排行