[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