diff -urN src.orig/frame.cc src/frame.cc
--- src.orig/frame.cc	2004-05-22 16:05:59.000000000 +0200
+++ src/frame.cc	2004-09-06 23:41:08.000000000 +0200
@@ -54,6 +54,7 @@
 // local includes
 #include "frame.h"
 #include "preferences.h"
+#include "kino_common.h"
 
 extern Preferences prefs;
 
@@ -1052,7 +1053,11 @@
 
 			for ( int x = 0; x < width; x += 2 )
 			{
+#if 0
 				*reinterpret_cast<uint32_t*>( dest ) = Y[ 0 ] + ( Cb[ 0 ] << 8 ) + ( Y[ 1 ] << 16 ) + ( Cr[ 0 ] << 24 );
+#else
+				*reinterpret_cast<uint32_t*>( dest ) = Cr[ 0 ] + ( Y[ 0 ] << 8 ) + ( Cb[ 1 ] << 16 ) + ( Y[ 0 ] << 24 );
+#endif
 
 				dest += 4;
 				Y += 2;
@@ -1071,8 +1076,13 @@
 
 			for ( int x = 0; x < width; x += 4 )
 			{
+#if 0
 				*reinterpret_cast<uint32_t*>( dest ) = Y[ 0 ] + ( Cb[ 0 ] << 8 ) + ( Y[ 1 ] << 16 ) + ( Cr[ 0 ] << 24 );
 				*reinterpret_cast<uint32_t*>( dest + 4 ) = Y[ 2 ] + ( Cb[ 0 ] << 8 ) + ( Y[ 3 ] << 16 ) + ( Cr[ 0 ] << 24 );
+#else
+				*reinterpret_cast<uint32_t*>( dest ) = Cr[ 0 ] + ( Y[ 0 ] << 8 ) + ( Cb[ 1 ] << 16 ) + ( Y[ 0 ] << 24 );
+				*reinterpret_cast<uint32_t*>( dest + 4 ) = Cr[ 2 ] + ( Y[ 0 ] << 8 ) + ( Cb[ 3 ] << 16 ) + ( Y[ 0 ] << 24 );
+#endif
 
 				dest += 8;
 				Y += 4;
@@ -1298,6 +1308,11 @@
 	encoder->samples_this_frame = info.samples;
 #endif
 
+	/* Do byte swap on pcm - libdv BUG ??? */
+	for ( int n = 0; n < info.samples ; ++n )
+		for ( int i = 0; i < info.channels; i++ )
+			channels[ i ][ n ] = bswap16(channels[ i ][ n ]);
+
 	int result = dv_encode_full_audio( encoder, channels, info.channels, info.frequency, data );
 	dv_encoder_free( encoder );
 	return ( result != -1 );
diff -urN src.orig/kino_common.h src/kino_common.h
--- src.orig/kino_common.h	2004-07-11 20:55:59.000000000 +0200
+++ src/kino_common.h	2004-09-06 23:38:42.000000000 +0200
@@ -31,6 +31,13 @@
 #include "filehandler.h"
 #include "smiltime.h"
 
+#define bswap16(x) \
+({ \
+	uint16_t __x = (x); \
+	((uint16_t)( \
+		(((uint16_t)(__x) & (uint16_t)0x00ffU) << 8) | \
+		(((uint16_t)(__x) & (uint16_t)0xff00U) >> 8) )); \
+})
 
 /** Component enumeration. This defines all the main window widgets that can be
     activated and deactivated by a notebook page.
diff -urN src.orig/page_magick.cc src/page_magick.cc
--- src.orig/page_magick.cc	2004-07-22 03:52:34.000000000 +0200
+++ src/page_magick.cc	2004-09-06 23:40:44.000000000 +0200
@@ -1866,6 +1866,11 @@
 			encoder->samples_this_frame = samples;
 #endif
 
+			/* Do byte swap on pcm - libdv BUG ??? */
+			for ( int n = 0; n < samples ; ++n )
+				for ( int i = 0; i < info->channels; i++ )
+					audio_buffers[ i ][ n ] = bswap16(audio_buffers[ i ][ n ]);
+
 			dv_encode_full_audio( encoder, audio_buffers, info->channels, info->frequency, dv_buffer );
 			dv_encode_metadata( dv_buffer, encoder->isPAL, encoder->is16x9, &datetime, frameNum );
 			dv_encode_timecode( dv_buffer, encoder->isPAL, frameNum++ );

