diff --git a/gst/qtmux/atoms.h b/gst/qtmux/atoms.h
index 4c94141..9bcb7ec 100644
--- a/gst/qtmux/atoms.h
+++ b/gst/qtmux/atoms.h
@@ -56,7 +56,8 @@ typedef enum _AtomsTreeFlavor
 {
   ATOMS_TREE_FLAVOR_MOV,
   ATOMS_TREE_FLAVOR_ISOM,
-  ATOMS_TREE_FLAVOR_3GP
+  ATOMS_TREE_FLAVOR_3GP,
+  ATOMS_TREE_FLAVOR_PSP
 } AtomsTreeFlavor;
 
 typedef struct _AtomsContext
diff --git a/gst/qtmux/ftypcc.h b/gst/qtmux/ftypcc.h
index 4855adf..3a82aa9 100644
--- a/gst/qtmux/ftypcc.h
+++ b/gst/qtmux/ftypcc.h
@@ -59,6 +59,7 @@ G_BEGIN_DECLS
 #define FOURCC_3gg7     GST_MAKE_FOURCC('3','g','g','7')
 #define FOURCC_avc1     GST_MAKE_FOURCC('a','v','c','1')
 #define FOURCC_qt__     GST_MAKE_FOURCC('q','t',' ',' ')
+#define FOURCC_MSNV     GST_MAKE_FOURCC('M','S','N','V')
 
 G_END_DECLS
 
diff --git a/gst/qtmux/gstqtmuxmap.c b/gst/qtmux/gstqtmuxmap.c
index 808856a..4c13854 100644
--- a/gst/qtmux/gstqtmuxmap.c
+++ b/gst/qtmux/gstqtmuxmap.c
@@ -178,6 +178,17 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = {
         GST_STATIC_CAPS (AMR_CAPS "; " MP3_CAPS "; " AAC_CAPS)
       }
   ,
+  /* PSP hacked MPEG-4 */
+  {
+        GST_QT_MUX_FORMAT_PSP,
+        "pspmux",
+        "MP4",
+        "GstPSPMux",
+        GST_STATIC_CAPS ("video/quicktime, variant = (string) psp"),
+        GST_STATIC_CAPS (MPEG4V_CAPS "; " H264_CAPS),
+        GST_STATIC_CAPS (AAC_CAPS)
+      }
+  ,
   /* ISO 15444-3: Motion-JPEG-2000 (also ISO base media extension) */
   {
         GST_QT_MUX_FORMAT_MJ2,
@@ -203,6 +214,8 @@ gst_qt_mux_map_format_to_flavor (GstQTMuxFormat format)
     return ATOMS_TREE_FLAVOR_MOV;
   else if (format == GST_QT_MUX_FORMAT_3GP)
     return ATOMS_TREE_FLAVOR_3GP;
+  else if (format == GST_QT_MUX_FORMAT_PSP)
+    return ATOMS_TREE_FLAVOR_PSP;
   else
     return ATOMS_TREE_FLAVOR_ISOM;
 }
@@ -249,6 +262,7 @@ gst_qt_mux_map_format_to_header (GstQTMuxFormat format, GstBuffer ** _prefix,
   static guint32 mp4_brands[] = { FOURCC_mp41, FOURCC_isom, FOURCC_iso2, 0 };
   static guint32 gpp_brands[] = { FOURCC_isom, FOURCC_iso2, 0 };
   static guint32 mjp2_brands[] = { FOURCC_isom, FOURCC_iso2, 0 };
+  static guint32 psp_brands[] = { FOURCC_MSNV, 0 };
   static guint8 mjp2_prefix[] =
       { 0, 0, 0, 12, 'j', 'P', ' ', ' ', 0x0D, 0x0A, 0x87, 0x0A };
   guint32 *comp = NULL;
@@ -296,6 +310,11 @@ gst_qt_mux_map_format_to_header (GstQTMuxFormat format, GstBuffer ** _prefix,
       prefix = gst_buffer_new_and_alloc (sizeof (mjp2_prefix));
       memcpy (GST_BUFFER_DATA (prefix), mjp2_prefix, GST_BUFFER_SIZE (prefix));
       break;
+    case GST_QT_MUX_FORMAT_PSP:
+      major = FOURCC_MSNV;
+      comp = psp_brands;
+      version = 0x200;
+      break;
     default:
       g_assert_not_reached ();
       break;
diff --git a/gst/qtmux/gstqtmuxmap.h b/gst/qtmux/gstqtmuxmap.h
index 342d381..fff8872 100644
--- a/gst/qtmux/gstqtmuxmap.h
+++ b/gst/qtmux/gstqtmuxmap.h
@@ -55,7 +55,8 @@ typedef enum _GstQTMuxFormat
   GST_QT_MUX_FORMAT_QT,
   GST_QT_MUX_FORMAT_MP4,
   GST_QT_MUX_FORMAT_3GP,
-  GST_QT_MUX_FORMAT_MJ2
+  GST_QT_MUX_FORMAT_MJ2,
+  GST_QT_MUX_FORMAT_PSP
 } GstQTMuxFormat;
 
 typedef struct _GstQTMuxFormatProp
