diff --git a/src/api.rs b/src/api.rs
index 4ab09cd724221a030b620dda00a8651a374c05be..5be2514d79a84f3409ba1301a424da754791364d 100644
--- a/src/api.rs
+++ b/src/api.rs
@@ -17,6 +17,7 @@ use std::sync::Arc;
 
 // TODO: use the num crate?
 #[derive(Clone, Copy, Debug)]
+#[repr(C)]
 pub struct Ratio {
   pub num: usize,
   pub den: usize
diff --git a/src/encoder.rs b/src/encoder.rs
index 26f830592ff0763b6e262b6e0db379d404129a5d..833be3c7cbf7675ab10e3f6b828c10321146d09e 100644
--- a/src/encoder.rs
+++ b/src/encoder.rs
@@ -95,6 +95,7 @@ const PRIMARY_REF_BITS: u32 = 3;
 
 arg_enum!{
     #[derive(Copy, Clone, Debug, PartialEq)]
+    #[repr(C)]
     pub enum Tune {
         Psnr,
         Psychovisual
@@ -108,6 +109,7 @@ impl Default for Tune {
 }
 
 #[derive(Copy, Clone, Debug, PartialEq)]
+#[repr(C)]
 pub enum ChromaSampling {
     Cs420,
     Cs422,
@@ -446,6 +448,7 @@ impl fmt::Display for FrameInvariants{
 
 #[allow(dead_code,non_camel_case_types)]
 #[derive(Debug,PartialEq,Clone,Copy)]
+#[repr(C)]
 pub enum FrameType {
     KEY,
     INTER,