ENUM V4L2_SUBDEV_ROUTING_RESTRICTION(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… enum v4l2_subdev_routing_restriction(9) β€” the Kernel API Manual, bestie edition πŸŽ€

okay so picture this: you're deep in the Kernel API Manual, right, and you hit enum v4l2_subdev_routing_restriction(9). Don't panic. It's literally just a vibe check for subdevice internal routing restrictions β€” like, the rules your hardware has about which streams can go where. no cap, it's giving "bouncer at the club of stream routing." πŸ¦‹


✨ NAME ✨

enum v4l2_subdev_routing_restriction β€” Subdevice internal routing restrictions 🌸


🫢 SYNOPSIS 🫢

enum v4l2_subdev_routing_restriction {
    V4L2_SUBDEV_ROUTING_NO_1_TO_N ,
    V4L2_SUBDEV_ROUTING_NO_N_TO_1 ,
    V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX ,
    V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX ,
    V4L2_SUBDEV_ROUTING_NO_SINK_MULTIPLEXING ,
    V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING ,
    V4L2_SUBDED_ROUTING_ONLY_1_TO_1 ,
    V4L2_SUBDEV_ROUTING_NO_STREAM_MIX ,
    V4L2_SUBDEV_ROUTING_NO_MULTIPLEXING

};
wait. hold up. πŸ™ˆ let me fix that, i typo'd one. the real list is:
enum v4l2_subdev_routing_restriction {
    V4L2_SUBDEV_ROUTING_NO_1_TO_N ,
    V4L2_SUBDEV_ROUTING_NO_N_TO_1 ,
    V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX ,
    V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX ,
    V4L2_SUBDEV_ROUTING_NO_SINK_MULTIPLEXING ,
    V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING ,
    V4L2_SUBDEV_ROUTING_ONLY_1_TO_1 ,
    V4L2_SUBDEV_ROUTING_NO_STREAM_MIX ,
    V4L2_SUBDEV_ROUTING_NO_MULTIPLEXING

};

(sorry bestie, gotta keep it character for character β€” V4L2_SUBDEV_ROUTING_ONLY_1_TO_1, not whatever my thumbs just did 😭)


πŸ‘‘ Constants πŸ‘‘

okay, the moment you've been waiting for. each one of these is a lil restriction flag, and they're all so iconic in their own way:

  • V4L2_SUBDEV_ROUTING_NO_1_TO_N β€” an input stream shall not be routed to multiple output streams (aka stream duplication is cancelled πŸ’€). one in, one out. no cloning yourself, bestie.
  • V4L2_SUBDEV_ROUTING_NO_N_TO_1 β€” multiple input streams shall not be routed to the same output stream (that's stream merging, and it's a no). y'all can't all pile into the same output, there's a capacity limit fr fr.
  • V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX β€” all streams from a sink pad must be routed to a single source pad. like, everybody from the sink side goes to the same place. group field trip energy 🧚
  • V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX β€” all streams on a source pad must originate from a single sink pad. flip side of the coin: that source pad has one origin story, periodt.
  • V4L2_SUBDEV_ROUTING_NO_SINK_MULTIPLEXING β€” sink pads shall not contain multiplexed streams. nope, none, not on the sink side, we don't do that here 🚫
  • V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING β€” source pads shall not contain multiplexed streams. same energy, source side. no multiplexing, no exceptions. πŸ’…
  • V4L2_SUBDEV_ROUTING_ONLY_1_TO_1 β€” only non-overlapping 1-to-1 stream routing is allowed, which is literally a combination of V4L2_SUBDEV_ROUTING_NO_1_TO_N and V4L2_SUBDEV_ROUTING_NO_N_TO_1. it's the "monogamy" setting of stream routing πŸ’–
  • V4L2_SUBDEV_ROUTING_NO_STREAM_MIX β€” all streams from a sink pad must be routed to a single source pad, and that source pad shall not get routes from any other sink pad. that's a combination of V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX and V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX. exclusive relationship, both directions, no side pieces πŸ”₯
  • V4L2_SUBDEV_ROUTING_NO_MULTIPLEXING β€” no multiplexed streams allowed on either source or sink sides. both sides clean. this one ate, honestly. ⭐

🌈 SEE ALSO 🌈

bestie, buckle up, this list is long but every single one of these is a real one. Kernel file ./include/media/v4l2-subdev.h struct, plus:

v4l2_decode_vbi_line(9), enum v4l2_subdev_io_pin_bits(9), struct v4l2_subdev_io_pin_config(9), struct v4l2_subdev_core_ops(9), struct v4l2_subdev_tuner_ops(9), struct v4l2_subdev_audio_ops(9), struct v4l2_mbus_frame_desc_entry_csi2(9), enum v4l2_mbus_frame_desc_flags(9), struct v4l2_mbus_frame_desc_entry(9), enum v4l2_mbus_frame_desc_type(9), struct v4l2_mbus_frame_desc(9), enum v4l2_subdev_pre_streamon_flags(9), struct v4l2_subdev_video_ops(9), struct v4l2_subdev_vbi_ops(9), struct v4l2_subdev_sensor_ops(9), enum v4l2_subdev_ir_mode(9), struct v4l2_subdev_ir_parameters(9), struct v4l2_subdev_ir_ops(9), struct v4l2_subdev_pad_config(9), struct v4l2_subdev_stream_configs(9), struct v4l2_subdev_krouting(9), struct v4l2_subdev_state(9), struct v4l2_subdev_pad_ops(9), struct v4l2_subdev_ops(9), struct v4l2_subdev_internal_ops(9), struct v4l2_subdev_platform_data(9), struct v4l2_subdev(9), media_entity_to_v4l2_subdev(9), vdev_to_v4l2_subdev(9), struct v4l2_subdev_fh(9), to_v4l2_subdev_fh(9), v4l2_set_subdevdata(9), v4l2_get_subdevdata(9), v4l2_set_subdev_hostdata(9), v4l2_get_subdev_hostdata(9), v4l2_subdev_get_fwnode_pad_1_to_1(9), v4l2_subdev_link_validate_default(9), v4l2_subdev_link_validate(9), v4l2_subdev_has_pad_interdep(9), __v4l2_subdev_state_alloc(9), __v4l2_subdev_state_free(9), v4l2_subdev_init_finalize(9), v4l2_subdev_cleanup(9), v4l2_subdev_state_get_format(9), v4l2_subdev_state_get_crop(9), v4l2_subdev_state_get_compose(9), v4l2_subdev_state_get_interval(9), v4l2_subdev_get_fmt(9), v4l2_subdev_get_frame_interval(9), v4l2_subdev_set_routing(9), for_each_active_route(9), v4l2_subdev_set_routing_with_fmt(9), v4l2_subdev_routing_find_opposite_end(9), v4l2_subdev_state_get_opposite_stream_format(9), v4l2_subdev_state_xlate_streams(9), v4l2_subdev_routing_validate(9), v4l2_subdev_enable_streams(9), v4l2_subdev_disable_streams(9), v4l2_subdev_s_stream_helper(9), __v4l2_subdev_get_frame_desc_passthrough(9), v4l2_subdev_get_frame_desc_passthrough(9), v4l2_subdev_lock_state(9), v4l2_subdev_unlock_state(9), v4l2_subdev_lock_states(9), v4l2_subdev_unlock_states(9), v4l2_subdev_get_unlocked_active_state(9), v4l2_subdev_get_locked_active_state(9), v4l2_subdev_lock_and_get_active_state(9), v4l2_subdev_init(9), v4l2_subdev_call(9), v4l2_subdev_call_state_active(9), v4l2_subdev_call_state_try(9), v4l2_subdev_has_op(9), v4l2_subdev_notify_event(9), v4l2_subdev_is_streaming(9)


and that's the whole page, bestie. no notes. 🫢

sign-off time: this lil gem lives in ./include/media, dated October 2026, and the header/footer duo is enum v4l2_su..._restriction(9) all the way through. go route some streams responsibly, mwah πŸ’‹βœ¨πŸŒΈ

πŸ“¦ where this page comes from