[FFmpeg-devel] [PATCH v8] VideoToolbox H.264 Encoder

wm4 nfxjfg at googlemail.com
Mon Feb 29 20:16:54 CET 2016


On Mon, 29 Feb 2016 20:07:15 +0100
Clément Bœsch <u at pkh.me> wrote:

> On Mon, Feb 29, 2016 at 06:57:15PM +0100, wm4 wrote:
> [...]
> > > +static bool get_vt_profile_level(AVCodecContext *avctx,
> > > +                                 CFStringRef    *profile_level_val)
> > > +{
> > > +    VTEncContext *vtctx = avctx->priv_data;
> > > +    int64_t profile = vtctx->profile;
> > > +
> > > +    if (profile == H264_PROF_AUTO && vtctx->level) {
> > > +        //Need to pick a profile if level is not auto-selected.
> > > +        profile = vtctx->has_b_frames ? H264_PROF_MAIN : H264_PROF_BASELINE;
> > > +    }
> > > +
> > > +    *profile_level_val = NULL;
> > > +
> > > +    switch (profile) {  
> 
> > > +        case H264_PROF_AUTO:
> > > +            return true;
> > > +  
> 
> We don't use bool in FFmpeg
> 
> > > +        case H264_PROF_BASELINE:
> > > +            switch (vtctx->level) {
> > > +                case  0: *profile_level_val = kVTProfileLevel_H264_Baseline_AutoLevel; break;
> > > +                case 13: *profile_level_val = kVTProfileLevel_H264_Baseline_1_3;       break;
> > > +                case 30: *profile_level_val = kVTProfileLevel_H264_Baseline_3_0;       break;
> > > +                case 31: *profile_level_val = kVTProfileLevel_H264_Baseline_3_1;       break;
> > > +                case 32: *profile_level_val = kVTProfileLevel_H264_Baseline_3_2;       break;
> > > +                case 40: *profile_level_val = kVTProfileLevel_H264_Baseline_4_0;       break;
> > > +                case 41: *profile_level_val = kVTProfileLevel_H264_Baseline_4_1;       break;
> > > +                case 42: *profile_level_val = kVTProfileLevel_H264_Baseline_4_2;       break;
> > > +                case 50: *profile_level_val = kVTProfileLevel_H264_Baseline_5_0;       break;
> > > +                case 51: *profile_level_val = kVTProfileLevel_H264_Baseline_5_1;       break;
> > > +                case 52: *profile_level_val = kVTProfileLevel_H264_Baseline_5_2;       break;
> > > +            }
> > > +            break;
> > > +
> > > +        case H264_PROF_MAIN:
> > > +            switch (vtctx->level) {
> > > +                case  0: *profile_level_val = kVTProfileLevel_H264_Main_AutoLevel; break;
> > > +                case 30: *profile_level_val = kVTProfileLevel_H264_Main_3_0;       break;
> > > +                case 31: *profile_level_val = kVTProfileLevel_H264_Main_3_1;       break;
> > > +                case 32: *profile_level_val = kVTProfileLevel_H264_Main_3_2;       break;
> > > +                case 40: *profile_level_val = kVTProfileLevel_H264_Main_4_0;       break;
> > > +                case 41: *profile_level_val = kVTProfileLevel_H264_Main_4_1;       break;
> > > +                case 42: *profile_level_val = kVTProfileLevel_H264_Main_4_2;       break;
> > > +                case 50: *profile_level_val = kVTProfileLevel_H264_Main_5_0;       break;
> > > +                case 51: *profile_level_val = kVTProfileLevel_H264_Main_5_1;       break;
> > > +                case 52: *profile_level_val = kVTProfileLevel_H264_Main_5_2;       break;
> > > +            }
> > > +            break;
> > > +
> > > +        case H264_PROF_HIGH:
> > > +            switch (vtctx->level) {
> > > +                case  0: *profile_level_val = kVTProfileLevel_H264_High_AutoLevel; break;
> > > +                case 30: *profile_level_val = kVTProfileLevel_H264_High_3_0;       break;
> > > +                case 31: *profile_level_val = kVTProfileLevel_H264_High_3_1;       break;
> > > +                case 32: *profile_level_val = kVTProfileLevel_H264_High_3_2;       break;
> > > +                case 40: *profile_level_val = kVTProfileLevel_H264_High_4_0;       break;
> > > +                case 41: *profile_level_val = kVTProfileLevel_H264_High_4_1;       break;
> > > +                case 42: *profile_level_val = kVTProfileLevel_H264_High_4_2;       break;
> > > +                case 50: *profile_level_val = kVTProfileLevel_H264_High_5_0;       break;
> > > +                case 51: *profile_level_val = kVTProfileLevel_H264_High_5_1;       break;
> > > +                case 52: *profile_level_val = kVTProfileLevel_H264_High_5_2;       break;
> > > +            }
> > > +            break;  
> 
> I don't understand: why don't you put the kVTProfileLevel_H264_* as const
> values? You won't have to do this mapping anymore.
> 
> [...]
> 

The level constants depend on the profile. Blame Apple.


More information about the ffmpeg-devel mailing list