brintos

brintos / linux-shallow public Read only

0
0
Text · 1.7 KiB · 1ccfc83 Raw
85 lines · c
1// SPDX-License-Identifier: MIT2#include "hdmi.h"3 4void pack_hdmi_infoframe(struct packed_hdmi_infoframe *packed_frame,5			 u8 *raw_frame, ssize_t len)6{7	u32 header = 0;8	u32 subpack0_low = 0;9	u32 subpack0_high = 0;10	u32 subpack1_low = 0;11	u32 subpack1_high = 0;12 13	switch (len) {14		/*15		 * "When in doubt, use brute force."16		 *     -- Ken Thompson.17		 */18	default:19		/*20		 * We presume that no valid frame is longer than 1721		 * octets, including header...  And truncate to that22		 * if it's longer.23		 */24	case 17:25		subpack1_high = (raw_frame[16] << 16);26		fallthrough;27	case 16:28		subpack1_high |= (raw_frame[15] << 8);29		fallthrough;30	case 15:31		subpack1_high |= raw_frame[14];32		fallthrough;33	case 14:34		subpack1_low = (raw_frame[13] << 24);35		fallthrough;36	case 13:37		subpack1_low |= (raw_frame[12] << 16);38		fallthrough;39	case 12:40		subpack1_low |= (raw_frame[11] << 8);41		fallthrough;42	case 11:43		subpack1_low |= raw_frame[10];44		fallthrough;45	case 10:46		subpack0_high = (raw_frame[9] << 16);47		fallthrough;48	case 9:49		subpack0_high |= (raw_frame[8] << 8);50		fallthrough;51	case 8:52		subpack0_high |= raw_frame[7];53		fallthrough;54	case 7:55		subpack0_low = (raw_frame[6] << 24);56		fallthrough;57	case 6:58		subpack0_low |= (raw_frame[5] << 16);59		fallthrough;60	case 5:61		subpack0_low |= (raw_frame[4] << 8);62		fallthrough;63	case 4:64		subpack0_low |= raw_frame[3];65		fallthrough;66	case 3:67		header = (raw_frame[2] << 16);68		fallthrough;69	case 2:70		header |= (raw_frame[1] << 8);71		fallthrough;72	case 1:73		header |= raw_frame[0];74		fallthrough;75	case 0:76		break;77	}78 79	packed_frame->header = header;80	packed_frame->subpack0_low = subpack0_low;81	packed_frame->subpack0_high = subpack0_high;82	packed_frame->subpack1_low = subpack1_low;83	packed_frame->subpack1_high = subpack1_high;84}85