Index: src/wp-includes/formatting.php
===================================================================
--- src/wp-includes/formatting.php	(revision 27063)
+++ src/wp-includes/formatting.php	(working copy)
@@ -238,10 +238,21 @@
 	$pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
 	$pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
 	$pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
-	if ( strpos($pee, '<object') !== false ) {
-		$pee = preg_replace('|\s*<param([^>]*)>\s*|', "<param$1>", $pee); // no pee inside object/embed
-		$pee = preg_replace('|\s*</embed>\s*|', '</embed>', $pee);
+
+	if ( strpos( $pee, '<object' ) !== false ) {
+		// no P/BR around param and embed
+		$pee = preg_replace( '|(<object[^>]*>)\s*|', '$1', $pee );
+		$pee = preg_replace( '|\s*</object>|', '</object>', $pee );
+		$pee = preg_replace( '%\s*(</?(?:param|embed)[^>]*>)\s*%', '$1', $pee );
 	}
+
+	if ( strpos( $pee, '<audio' ) !== false || strpos( $pee, '<video' ) !== false ) {
+		// no P/BR around source and track
+		$pee = preg_replace( '%(<(?:audio|video)[^>]*>)\s*%', '$1', $pee );
+		$pee = preg_replace( '%\s*(</(?:audio|video)>)%', '$1', $pee );
+		$pee = preg_replace( '%\s*(<(?:source|track)[^>]*>)\s*%', '$1', $pee );
+	}
+
 	$pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
 	// make paragraphs, including one at the end
 	$pees = preg_split('/\n\s*\n/', $pee, -1, PREG_SPLIT_NO_EMPTY);
Index: tests/phpunit/tests/formatting/Autop.php
===================================================================
--- tests/phpunit/tests/formatting/Autop.php	(revision 27063)
+++ tests/phpunit/tests/formatting/Autop.php	(working copy)
@@ -98,4 +98,159 @@
 		$str = 'Username: <input type="text" id="username" name="username" /><br />Password: <input type="password" id="password1" name="password1" />';
 		$this->assertEquals( "<p>$str</p>", trim( wpautop( $str ) ) );
 	}
+
+	/**
+	 * wpautop() Should not add <p> and <br/> around <source> and <track>
+	 *
+	 * @ticket 26864
+	 */
+	public function test_source_track_elements() {
+		$content = "Paragraph one.\n\n" .
+			'<video class="wp-video-shortcode" id="video-0-1" width="640" height="360" preload="metadata" controls="controls">
+			<source type="video/mp4" src="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4" />
+			<!-- WebM/VP8 for Firefox4, Opera, and Chrome -->
+			<source type="video/webm" src="myvideo.webm" />
+			<!-- Ogg/Vorbis for older Firefox and Opera versions -->
+			<source type="video/ogg" src="myvideo.ogv" />
+			<!-- Optional: Add subtitles for each language -->
+			<track kind="subtitles" src="subtitles.srt" srclang="en" />
+			<!-- Optional: Add chapters -->
+			<track kind="chapters" src="chapters.srt" srclang="en" />
+			<a href="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4">http://domain.tld/wp-content/uploads/2013/12/xyz.mp4</a>
+			</video>' .
+			"\n\nParagraph two.";
+
+		$content2 = "Paragraph one.\n\n" .
+			'<video class="wp-video-shortcode" id="video-0-1" width="640" height="360" preload="metadata" controls="controls">
+
+			<source type="video/mp4" src="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4" />
+
+			<!-- WebM/VP8 for Firefox4, Opera, and Chrome -->
+			<source type="video/webm" src="myvideo.webm" />
+
+			<!-- Ogg/Vorbis for older Firefox and Opera versions -->
+			<source type="video/ogg" src="myvideo.ogv" />
+
+			<!-- Optional: Add subtitles for each language -->
+			<track kind="subtitles" src="subtitles.srt" srclang="en" />
+
+			<!-- Optional: Add chapters -->
+			<track kind="chapters" src="chapters.srt" srclang="en" />
+
+			<a href="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4">http://domain.tld/wp-content/uploads/2013/12/xyz.mp4</a>
+
+			</video>' .
+			"\n\nParagraph two.";
+
+		$content3 = "Paragraph one.\n\n" .
+			'<video class="wp-video-shortcode" id="video-0-1" width="640" height="360" preload="metadata" controls="controls">
+				<source type="video/mp4" src="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4" />
+
+				<!-- WebM/VP8 for Firefox4, Opera, and Chrome --><source type="video/webm" src="myvideo.webm" />
+				<!-- Ogg/Vorbis for older Firefox and Opera versions --><source type="video/ogg" src="myvideo.ogv" />
+				<!-- Optional: Add subtitles for each language --><track kind="subtitles" src="subtitles.srt" srclang="en" />
+				<!-- Optional: Add chapters --><track kind="chapters" src="chapters.srt" srclang="en" />
+
+				<a href="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4">http://domain.tld/wp-content/uploads/2013/12/xyz.mp4</a>
+			</video>' .
+			"\n\nParagraph two.";
+
+		$expected = "<p>Paragraph one.</p>\n" . // line breaks only after <p>
+			'<p><video class="wp-video-shortcode" id="video-0-1" width="640" height="360" preload="metadata" controls="controls">' .
+			'<source type="video/mp4" src="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4" />' .
+			'<!-- WebM/VP8 for Firefox4, Opera, and Chrome -->' .
+			'<source type="video/webm" src="myvideo.webm" />' .
+			'<!-- Ogg/Vorbis for older Firefox and Opera versions -->' .
+			'<source type="video/ogg" src="myvideo.ogv" />' .
+			'<!-- Optional: Add subtitles for each language -->' .
+			'<track kind="subtitles" src="subtitles.srt" srclang="en" />' .
+			'<!-- Optional: Add chapters -->' .
+			'<track kind="chapters" src="chapters.srt" srclang="en" />' .
+			'<a href="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4">' .
+			"http://domain.tld/wp-content/uploads/2013/12/xyz.mp4</a></video></p>\n" .
+			'<p>Paragraph two.</p>';
+
+		$this->assertEquals( $expected, trim( wpautop( $content ) ) );
+		$this->assertEquals( $expected, trim( wpautop( $content2 ) ) );
+		$this->assertEquals( $expected, trim( wpautop( $content3 ) ) );
+	}
+
+	/**
+	 * wpautop() Should not add <p> and <br/> around <param> and <embed>
+	 *
+	 * @ticket 26864
+	 */
+	public function test_param_embed_elements() {
+		$content1 = '
+Paragraph one.
+
+<object width="400" height="224" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
+	<param name="src" value="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" />
+	<param name="allowfullscreen" value="true" />
+	<param name="allowscriptaccess" value="always" />
+	<param name="overstretch" value="true" />
+	<param name="flashvars" value="isDynamicSeeking=true" />
+
+	<embed width="400" height="224" type="application/x-shockwave-flash" src="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" wmode="direct" seamlesstabbing="true" allowfullscreen="true" overstretch="true" flashvars="isDynamicSeeking=true" />
+</object>
+
+Paragraph two.';
+
+		$expected1 = "<p>Paragraph one.</p>\n" . // line breaks only after <p>
+			'<p><object width="400" height="224" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">' .
+			'<param name="src" value="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" />' .
+			'<param name="allowfullscreen" value="true" />' .
+			'<param name="allowscriptaccess" value="always" />' .
+			'<param name="overstretch" value="true" />' .
+			'<param name="flashvars" value="isDynamicSeeking=true" />' .
+			'<embed width="400" height="224" type="application/x-shockwave-flash" src="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" wmode="direct" seamlesstabbing="true" allowfullscreen="true" overstretch="true" flashvars="isDynamicSeeking=true" />' .
+			"</object></p>\n" .
+			'<p>Paragraph two.</p>';
+
+		$content2 = '
+Paragraph one.
+
+<div class="video-player" id="x-video-0">
+<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="360" id="video-0" standby="Standby text">
+  <param name="movie" value="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" />
+  <param name="quality" value="best" />
+
+  <param name="seamlesstabbing" value="true" />
+  <param name="allowfullscreen" value="true" />
+  <param name="allowscriptaccess" value="always" />
+  <param name="overstretch" value="true" />
+
+  <!--[if !IE]--><object type="application/x-shockwave-flash" data="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" width="640" height="360" standby="Standby text">
+    <param name="quality" value="best" />
+
+    <param name="seamlesstabbing" value="true" />
+    <param name="allowfullscreen" value="true" />
+    <param name="allowscriptaccess" value="always" />
+    <param name="overstretch" value="true" />
+  </object><!--<![endif]-->
+</object></div>
+
+Paragraph two.';
+
+		$expected2 = "<p>Paragraph one.</p>\n" . // line breaks only after block tags
+			'<div class="video-player" id="x-video-0">' . "\n" .
+			'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="360" id="video-0" standby="Standby text">' .
+			'<param name="movie" value="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" />' .
+			'<param name="quality" value="best" />' .
+			'<param name="seamlesstabbing" value="true" />' .
+			'<param name="allowfullscreen" value="true" />' .
+			'<param name="allowscriptaccess" value="always" />' .
+			'<param name="overstretch" value="true" />' .
+			'<!--[if !IE]--><object type="application/x-shockwave-flash" data="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" width="640" height="360" standby="Standby text">' .
+			'<param name="quality" value="best" />' .
+			'<param name="seamlesstabbing" value="true" />' .
+			'<param name="allowfullscreen" value="true" />' .
+			'<param name="allowscriptaccess" value="always" />' .
+			'<param name="overstretch" value="true" /></object><!--<![endif]-->' .
+			"</object></div>\n" .
+			'<p>Paragraph two.</p>';
+
+		$this->assertEquals( $expected1, trim( wpautop( $content1 ) ) );
+		$this->assertEquals( $expected2, trim( wpautop( $content2 ) ) );
+	}
 }
Index: tests/phpunit/tests/media.php
===================================================================
--- tests/phpunit/tests/media.php	(revision 27063)
+++ tests/phpunit/tests/media.php	(working copy)
@@ -364,4 +364,45 @@
 		$matches = get_media_embedded_in_content( $content, $types );
 		$this->assertEquals( $contents, $matches );
 	}
+
+	/**
+	 * Test [video] shortcode processing
+	 *
+	 * @ticket 26864
+	 */
+	function test_video_shortcode_body() {
+		$width = 720;
+		$height = 480;
+
+		$video =<<<VIDEO
+[video width="720" height="480" mp4="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4"]
+<!-- WebM/VP8 for Firefox4, Opera, and Chrome -->
+<source type="video/webm" src="myvideo.webm" />
+<!-- Ogg/Vorbis for older Firefox and Opera versions -->
+<source type="video/ogg" src="myvideo.ogv" />
+<!-- Optional: Add subtitles for each language -->
+<track kind="subtitles" src="subtitles.srt" srclang="en" />
+<!-- Optional: Add chapters -->
+<track kind="chapters" src="chapters.srt" srclang="en" />
+[/video]
+VIDEO;
+
+		$w = $GLOBALS['content_width'];
+		$h = ceil( ( $height * $w ) / $width );
+
+		$content = apply_filters( 'the_content', $video );
+
+		$expected = '<div style="width: ' . $w . 'px; max-width: 100%;" class="wp-video">' .
+			"<!--[if lt IE 9]><script>document.createElement(\'video\');</script><![endif]-->\n" .
+			'<video class="wp-video-shortcode" id="video-0-1" width="' . $w . '" height="' . $h . '" preload="metadata" controls="controls">' .
+			'<source type="video/mp4" src="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4" />' .
+			'<!-- WebM/VP8 for Firefox4, Opera, and Chrome --><source type="video/webm" src="myvideo.webm" />' .
+			'<!-- Ogg/Vorbis for older Firefox and Opera versions --><source type="video/ogg" src="myvideo.ogv" />' .
+			'<!-- Optional: Add subtitles for each language --><track kind="subtitles" src="subtitles.srt" srclang="en" />' .
+			'<!-- Optional: Add chapters --><track kind="chapters" src="chapters.srt" srclang="en" />' .
+			'<a href="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4">' .
+			"http://domain.tld/wp-content/uploads/2013/12/xyz.mp4</a></video></div>\n";
+
+		$this->assertEquals( $expected, $content );
+	}
 }
