Citation: 6B_151/2022 E. 6

Au vu de ce qui précède, le recours doit être partiellement admis, l'arrêt attaqué annulé et la cause renvoyée à la cour cantonale pour qu'elle rende une nouvelle décision dans le sens des considérants (cf. supra consid. 1.7 et 5.5.3). Pour le surplus, le recours est rejeté dans la mesure où il est recevable. Le recourant, qui obtient partiellement gain de cause, supportera une partie des frais judiciaires (art. 66 al. 1 LTF) et peut prétendre à des dépens, à la charge du canton de Fribourg (art. 68 al. 1 LTF). Par ces motifs, le Tribunal fédéral prononce :