@@ -2224,6 +2224,9 @@ static int bcm2835_codec_s_ctrl(struct v4l2_ctrl *ctrl)
2224
2224
container_of (ctrl -> handler , struct bcm2835_codec_ctx , hdl );
2225
2225
int ret = 0 ;
2226
2226
2227
+ if (ctrl -> flags & V4L2_CTRL_FLAG_READ_ONLY )
2228
+ return 0 ;
2229
+
2227
2230
switch (ctrl -> id ) {
2228
2231
case V4L2_CID_MPEG_VIDEO_BITRATE :
2229
2232
ctx -> bitrate = ctrl -> val ;
@@ -2376,7 +2379,7 @@ static int bcm2835_codec_s_ctrl(struct v4l2_ctrl *ctrl)
2376
2379
break ;
2377
2380
2378
2381
default :
2379
- v4l2_err (& ctx -> dev -> v4l2_dev , "Invalid control\n" );
2382
+ v4l2_err (& ctx -> dev -> v4l2_dev , "Invalid control %08x \n" , ctrl -> id );
2380
2383
return - EINVAL ;
2381
2384
}
2382
2385
@@ -3198,74 +3201,80 @@ static int queue_init(void *priv, struct vb2_queue *src_vq,
3198
3201
static void dec_add_profile_ctrls (struct bcm2835_codec_dev * const dev ,
3199
3202
struct v4l2_ctrl_handler * const hdl )
3200
3203
{
3204
+ struct v4l2_ctrl * ctrl ;
3201
3205
unsigned int i ;
3202
3206
const struct bcm2835_codec_fmt_list * const list = & dev -> supported_fmts [0 ];
3203
3207
3204
3208
for (i = 0 ; i < list -> num_entries ; ++ i ) {
3205
3209
switch (list -> list [i ].fourcc ) {
3206
3210
case V4L2_PIX_FMT_H264 :
3207
- v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3208
- V4L2_CID_MPEG_VIDEO_H264_LEVEL ,
3209
- V4L2_MPEG_VIDEO_H264_LEVEL_4_2 ,
3210
- ~(BIT (V4L2_MPEG_VIDEO_H264_LEVEL_1_0 ) |
3211
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_1B ) |
3212
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_1_1 ) |
3213
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_1_2 ) |
3214
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_1_3 ) |
3215
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_2_0 ) |
3216
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_2_1 ) |
3217
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_2_2 ) |
3218
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_3_0 ) |
3219
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_3_1 ) |
3220
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_3_2 ) |
3221
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_4_0 ) |
3222
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_4_1 ) |
3223
- BIT (V4L2_MPEG_VIDEO_H264_LEVEL_4_2 )),
3224
- V4L2_MPEG_VIDEO_H264_LEVEL_4_0 );
3225
- v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3226
- V4L2_CID_MPEG_VIDEO_H264_PROFILE ,
3227
- V4L2_MPEG_VIDEO_H264_PROFILE_HIGH ,
3228
- ~(BIT (V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE ) |
3229
- BIT (V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE ) |
3230
- BIT (V4L2_MPEG_VIDEO_H264_PROFILE_MAIN ) |
3231
- BIT (V4L2_MPEG_VIDEO_H264_PROFILE_HIGH )),
3232
- V4L2_MPEG_VIDEO_H264_PROFILE_HIGH );
3211
+ ctrl = v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3212
+ V4L2_CID_MPEG_VIDEO_H264_LEVEL ,
3213
+ V4L2_MPEG_VIDEO_H264_LEVEL_4_2 ,
3214
+ ~(BIT (V4L2_MPEG_VIDEO_H264_LEVEL_1_0 ) |
3215
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_1B ) |
3216
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_1_1 ) |
3217
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_1_2 ) |
3218
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_1_3 ) |
3219
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_2_0 ) |
3220
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_2_1 ) |
3221
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_2_2 ) |
3222
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_3_0 ) |
3223
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_3_1 ) |
3224
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_3_2 ) |
3225
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_4_0 ) |
3226
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_4_1 ) |
3227
+ BIT (V4L2_MPEG_VIDEO_H264_LEVEL_4_2 )),
3228
+ V4L2_MPEG_VIDEO_H264_LEVEL_4_0 );
3229
+ ctrl -> flags |= V4L2_CTRL_FLAG_READ_ONLY ;
3230
+ ctrl = v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3231
+ V4L2_CID_MPEG_VIDEO_H264_PROFILE ,
3232
+ V4L2_MPEG_VIDEO_H264_PROFILE_HIGH ,
3233
+ ~(BIT (V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE ) |
3234
+ BIT (V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE ) |
3235
+ BIT (V4L2_MPEG_VIDEO_H264_PROFILE_MAIN ) |
3236
+ BIT (V4L2_MPEG_VIDEO_H264_PROFILE_HIGH )),
3237
+ V4L2_MPEG_VIDEO_H264_PROFILE_HIGH );
3238
+ ctrl -> flags |= V4L2_CTRL_FLAG_READ_ONLY ;
3233
3239
break ;
3234
3240
case V4L2_PIX_FMT_MPEG2 :
3235
- v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3236
- V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL ,
3237
- V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH ,
3238
- ~(BIT (V4L2_MPEG_VIDEO_MPEG2_LEVEL_LOW ) |
3239
- BIT (V4L2_MPEG_VIDEO_MPEG2_LEVEL_MAIN ) |
3240
- BIT (V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH_1440 ) |
3241
- BIT (V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH )),
3242
- V4L2_MPEG_VIDEO_MPEG2_LEVEL_MAIN );
3243
- v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3244
- V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE ,
3245
- V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN ,
3246
- ~(BIT (V4L2_MPEG_VIDEO_MPEG2_PROFILE_SIMPLE ) |
3247
- BIT (V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN )),
3248
- V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN );
3241
+ ctrl = v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3242
+ V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL ,
3243
+ V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH ,
3244
+ ~(BIT (V4L2_MPEG_VIDEO_MPEG2_LEVEL_LOW ) |
3245
+ BIT (V4L2_MPEG_VIDEO_MPEG2_LEVEL_MAIN ) |
3246
+ BIT (V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH_1440 ) |
3247
+ BIT (V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH )),
3248
+ V4L2_MPEG_VIDEO_MPEG2_LEVEL_MAIN );
3249
+ ctrl = v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3250
+ V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE ,
3251
+ V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN ,
3252
+ ~(BIT (V4L2_MPEG_VIDEO_MPEG2_PROFILE_SIMPLE ) |
3253
+ BIT (V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN )),
3254
+ V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN );
3255
+ ctrl -> flags |= V4L2_CTRL_FLAG_READ_ONLY ;
3249
3256
break ;
3250
3257
case V4L2_PIX_FMT_MPEG4 :
3251
- v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3252
- V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL ,
3253
- V4L2_MPEG_VIDEO_MPEG4_LEVEL_5 ,
3254
- ~(BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_0 ) |
3255
- BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B ) |
3256
- BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_1 ) |
3257
- BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_2 ) |
3258
- BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_3 ) |
3259
- BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_3B ) |
3260
- BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_4 ) |
3261
- BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_5 )),
3262
- V4L2_MPEG_VIDEO_MPEG4_LEVEL_4 );
3263
- v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3264
- V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE ,
3265
- V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE ,
3266
- ~(BIT (V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE ) |
3267
- BIT (V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE )),
3268
- V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE );
3258
+ ctrl = v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3259
+ V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL ,
3260
+ V4L2_MPEG_VIDEO_MPEG4_LEVEL_5 ,
3261
+ ~(BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_0 ) |
3262
+ BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B ) |
3263
+ BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_1 ) |
3264
+ BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_2 ) |
3265
+ BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_3 ) |
3266
+ BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_3B ) |
3267
+ BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_4 ) |
3268
+ BIT (V4L2_MPEG_VIDEO_MPEG4_LEVEL_5 )),
3269
+ V4L2_MPEG_VIDEO_MPEG4_LEVEL_4 );
3270
+ ctrl -> flags |= V4L2_CTRL_FLAG_READ_ONLY ;
3271
+ ctrl = v4l2_ctrl_new_std_menu (hdl , & bcm2835_codec_ctrl_ops ,
3272
+ V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE ,
3273
+ V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE ,
3274
+ ~(BIT (V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE ) |
3275
+ BIT (V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE )),
3276
+ V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE );
3277
+ ctrl -> flags |= V4L2_CTRL_FLAG_READ_ONLY ;
3269
3278
break ;
3270
3279
/* No profiles defined by V4L2 */
3271
3280
case V4L2_PIX_FMT_H263 :
0 commit comments