diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,21 @@
+0.7.1
+---
+
+* Bumped transformers dependency
+
+  Note: The use of mtl still triggers deprecation warnings from
+  transformers.
+
+* Fixed bug with changing source pixel format from RGB during
+  encoding.
+
+* Added BGRA pixel format
+
+0.7
+---
+
+* Simplified top-level API to focus on JuicyPixels-based interface
+
 0.6
 ---
 
diff --git a/ffmpeg-light.cabal b/ffmpeg-light.cabal
--- a/ffmpeg-light.cabal
+++ b/ffmpeg-light.cabal
@@ -1,5 +1,5 @@
 name:                ffmpeg-light
-version:             0.7
+version:             0.7.1
 synopsis:            Minimal bindings to the FFmpeg library.
 
 description:         Stream frames from an encoded video, or stream frames to
@@ -35,10 +35,12 @@
 flag BuildDemo
   description: Build demo executable
   default:     False
+  manual:      True
 
 flag BuildRasterDemo
   description: Build Rasterific demo executable
   default:     False
+  manual:      True
 
 library
   exposed-modules:     Codec.FFmpeg,
@@ -54,8 +56,8 @@
   build-tools:         hsc2hs
   build-depends:       base >=4.6 && < 5,
                        vector >= 0.10.9 && < 0.11,
-                       transformers >= 0.3 && < 0.4,
-                       mtl >= 2.1.3 && < 2.2,
+                       transformers >= 0.3 && < 0.5,
+                       mtl >= 2.1.3 && < 2.3,
                        JuicyPixels >= 3.1 && < 3.2
   pkgconfig-depends:   libavutil, libavformat, libavcodec, libswscale
   hs-source-dirs:      src
diff --git a/src/Codec/FFmpeg/Encode.hs b/src/Codec/FFmpeg/Encode.hs
--- a/src/Codec/FFmpeg/Encode.hs
+++ b/src/Codec/FFmpeg/Encode.hs
@@ -16,6 +16,7 @@
 import Control.Monad (when, void)
 import Control.Monad.Error.Class
 import Data.Bits
+import Data.IORef
 import Data.Maybe (fromMaybe)
 import Data.Ord (comparing)
 import Data.Traversable (for)
@@ -315,9 +316,9 @@
   -- Initialize the scaler that we use to convert RGB -> dstFmt
   -- Note that libswscaler does not support Pal8 as an output format.
   sws <- if dstFmt /= avPixFmtPal8 && dstFmt /= avPixFmtRgb8
-         then Just <$> 
-              swsInit (ImageInfo (epWidth ep) (epHeight ep) avPixFmtRgb24)
+         then swsInit (ImageInfo (epWidth ep) (epHeight ep) avPixFmtRgb24)
                       dstInfo swsBilinear
+              >>= fmap Just . newIORef
          else return Nothing
 
   pkt <- AVPacket <$> av_malloc (fromIntegral packetSize)
@@ -380,8 +381,12 @@
                 (error $ "Palettized output requires source images to be the \
                          \same resolution as the output video")
            let pixels' = maybe pixels ($ V.unsafeCast pixels) palettizer
-           sws' <- for sws $ \s ->
-                     swsReset s (ImageInfo srcW srcH srcFmt) dstInfo swsBilinear
+           sws' <- for sws $ \sPtr -> do
+                     s <- readIORef sPtr
+                     s' <- swsReset s (ImageInfo srcW srcH srcFmt) dstInfo
+                                    swsBilinear
+                     writeIORef sPtr s'
+                     return s'
            fillDst sws' (srcFmt, V2 srcW srcH, pixels')
            getPts dstFrame >>= setPts dstFrame . (+ frameTime)
            encode_video_check ctx pkt (Just dstFrame) >>= flip when writePacket
diff --git a/src/Codec/FFmpeg/Enums.hsc b/src/Codec/FFmpeg/Enums.hsc
--- a/src/Codec/FFmpeg/Enums.hsc
+++ b/src/Codec/FFmpeg/Enums.hsc
@@ -33,6 +33,7 @@
  , AV_PIX_FMT_NONE\
  , AV_PIX_FMT_RGB24\
  , AV_PIX_FMT_RGBA\
+ , AV_PIX_FMT_BGRA\
  , AV_PIX_FMT_Y400A\
  , AV_PIX_FMT_RGB32\
  , AV_PIX_FMT_RGB32_1\
diff --git a/src/nameCompat.h b/src/nameCompat.h
--- a/src/nameCompat.h
+++ b/src/nameCompat.h
@@ -6,6 +6,7 @@
 #define AV_PIX_FMT_NONE PIX_FMT_NONE
 #define AV_PIX_FMT_RGB24 PIX_FMT_RGB24
 #define AV_PIX_FMT_RGBA PIX_FMT_RGBA
+#define AV_PIX_FMT_BGRA PIX_FMT_BGRA
 #define AV_PIX_FMT_Y400A PIX_FMT_Y400A
 #define AV_PIX_FMT_RGB32 PIX_FMT_RGB32
 #define AV_PIX_FMT_RGB32_1 PIX_FMT_RGB32_1
