[Haiku-commits] r27568 - haiku/trunk/src/add-ons/media/plugins/avcodec

dlmcpaul at BerliOS dlmcpaul at mail.berlios.de
Mon Sep 15 16:15:09 CEST 2008


Author: dlmcpaul
Date: 2008-09-15 16:15:08 +0200 (Mon, 15 Sep 2008)
New Revision: 27568
ViewCVS: http://svn.berlios.de/viewcvs/haiku?rev=27568&view=rev

Modified:
   haiku/trunk/src/add-ons/media/plugins/avcodec/Jamfile
   haiku/trunk/src/add-ons/media/plugins/avcodec/avcodec.cpp
   haiku/trunk/src/add-ons/media/plugins/avcodec/codectbl.cpp
   haiku/trunk/src/add-ons/media/plugins/avcodec/gfx_util.h
Log:
Update avcodec to 20080825

Modified: haiku/trunk/src/add-ons/media/plugins/avcodec/Jamfile
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/avcodec/Jamfile	2008-09-15 14:14:35 UTC (rev 27567)
+++ haiku/trunk/src/add-ons/media/plugins/avcodec/Jamfile	2008-09-15 14:15:08 UTC (rev 27568)
@@ -5,6 +5,8 @@
 UsePrivateHeaders media ;
 
 SubDirHdrs [ FDirName $(SUBDIR) libavcodec ] ;
+SubDirHdrs [ FDirName $(SUBDIR) libavutil ] ;
+SubDirHdrs [ FDirName $(SUBDIR) libswscale ] ;
 
 Addon avcodec :
  	avcodec.cpp
@@ -15,8 +17,12 @@
  	gfx_util.cpp
 	:  
 	libavcodec.a
+	libavutil.a
+	libswscale.a
 	be
 	libmedia.so
 ;
 
 SubInclude HAIKU_TOP src add-ons media plugins avcodec libavcodec ;
+SubInclude HAIKU_TOP src add-ons media plugins avcodec libavutil ;
+SubInclude HAIKU_TOP src add-ons media plugins avcodec libswscale ;

Modified: haiku/trunk/src/add-ons/media/plugins/avcodec/avcodec.cpp
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/avcodec/avcodec.cpp	2008-09-15 14:14:35 UTC (rev 27567)
+++ haiku/trunk/src/add-ons/media/plugins/avcodec/avcodec.cpp	2008-09-15 14:15:08 UTC (rev 27568)
@@ -13,18 +13,17 @@
 #include <OS.h>
 #include <Bitmap.h>
 #include <string.h>
+
 #include "avcodec.h"
 
-
 #undef TRACE
-//#define TRACE_AV_CODEC
+#define TRACE_AV_CODEC
 #ifdef TRACE_AV_CODEC
 #	define TRACE(x...)	printf(x)
 #else
 #	define TRACE(x...)
 #endif
 
-
 struct wave_format_ex {
 	uint16 format_tag;
 	uint16 channels;
@@ -57,7 +56,7 @@
 		fBlockAlign(0),
 		fOutputBuffer(0)
 {
-	TRACE("[%c] avCodec::avCodec()\n", isAudio?('a'):('v'));
+	TRACE("avCodec::avCodec()\n");
 
 	// prevent multiple inits
 	static volatile vint32 ff_init_count = 0;
@@ -113,6 +112,7 @@
 		return B_ERROR;
 		
 	isAudio = (ioEncodedFormat->type == B_MEDIA_ENCODED_AUDIO);
+	TRACE("[%c] avCodec::Setup()\n", isAudio?('a'):('v'));
 
 	if (isAudio && !fOutputBuffer)
 		fOutputBuffer = new char[100000];
@@ -185,6 +185,13 @@
 							memcpy(fExtraData, wfmt_data + 1, fExtraDataSize);
 						}
 					}
+				} else {
+					TRACE("avCodec: extra data size %ld\n",infoSize);
+					fExtraDataSize = infoSize;
+					if (fExtraDataSize) {
+						fExtraData = new char [fExtraDataSize];
+						memcpy(fExtraData, infoBuffer, fExtraDataSize);
+					}
 				}
 
 				fInputFormat = *ioEncodedFormat;
@@ -216,8 +223,10 @@
 status_t
 avCodec::NegotiateOutputFormat(media_format *inout_format)
 {
-	TRACE("[%c] avCodec::Format()\n", isAudio?('a'):('v'));
+	TRACE("[%c] avCodec::NegotiateOutputFormat()\n", isAudio?('a'):('v'));
 
+	int result;
+	
 #if DEBUG
 	char buffer[1024];
 	string_for_format(*inout_format, buffer, sizeof(buffer));
@@ -242,7 +251,7 @@
 		ffc->sample_rate = (int) fInputFormat.u.encoded_audio.output.frame_rate;
 		ffc->channels = fInputFormat.u.encoded_audio.output.channel_count;
 		ffc->block_align = fBlockAlign;
-		ffc->extradata = fExtraData;
+		ffc->extradata = (uint8_t *)fExtraData;
 		ffc->extradata_size = fExtraDataSize;
 
 		TRACE("bit_rate %d, sample_rate %d, channels %d, block_align %d, "
@@ -256,11 +265,11 @@
 		}
 
 		// open new
-		if (avcodec_open(ffc, fCodec) >= 0)
-			fCodecInitDone = true;
+		result = avcodec_open(ffc, fCodec);
+		fCodecInitDone = (result >= 0);
 
-		TRACE("audio: bit_rate = %d, sample_rate = %d, chans = %d\n",
-			ffc->bit_rate, ffc->sample_rate, ffc->channels);
+		TRACE("audio: bit_rate = %d, sample_rate = %d, chans = %d Init = %d\n",
+			ffc->bit_rate, ffc->sample_rate, ffc->channels, result);
 
 		fStartTime = 0;
 		fOutputFrameSize = 2 * outputAudioFormat.channel_count;
@@ -275,19 +284,24 @@
 		inout_format->require_flags = 0;
 		inout_format->deny_flags = B_MEDIA_MAUI_UNDEFINED_FLAGS;
 
-		return fCodecInitDone ? B_OK : B_ERROR;
+		if (!fCodecInitDone) {
+			TRACE("avcodec_open() failed!\n");
+			return B_ERROR;
+		}
 
+		return B_OK;
+
 	} else {	// VIDEO
 
 		fOutputVideoFormat = fInputFormat.u.encoded_video.output;
 
 		ffc->width = fOutputVideoFormat.display.line_width;
 		ffc->height = fOutputVideoFormat.display.line_count;
-		ffc->frame_rate = (int)(fOutputVideoFormat.field_rate
-			* ffc->frame_rate_base);
+//		ffc->frame_rate = (int)(fOutputVideoFormat.field_rate
+//			* ffc->frame_rate_base);
 		
 		if (fInputFormat.MetaDataSize() > 0) {
-			ffc->extradata = (void *)fInputFormat.MetaData();
+			ffc->extradata = (uint8_t *)fInputFormat.MetaData();
 			ffc->extradata_size = fInputFormat.MetaDataSize();
 		}
 

Modified: haiku/trunk/src/add-ons/media/plugins/avcodec/codectbl.cpp
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/avcodec/codectbl.cpp	2008-09-15 14:14:35 UTC (rev 27567)
+++ haiku/trunk/src/add-ons/media/plugins/avcodec/codectbl.cpp	2008-09-15 14:15:08 UTC (rev 27568)
@@ -53,6 +53,8 @@
 	{CODEC_ID_MPEG4,		B_MEDIA_ENCODED_VIDEO,	B_QUICKTIME_FORMAT_FAMILY,	'mp4v', "MPEG4 Video"},
 	{CODEC_ID_MPEG4AAC,		B_MEDIA_ENCODED_AUDIO,	B_QUICKTIME_FORMAT_FAMILY,	'a4pm', "MPEG4 AAC"},
 	{CODEC_ID_MPEG4,		B_MEDIA_ENCODED_VIDEO,	B_QUICKTIME_FORMAT_FAMILY,	'v4pm', "MPEG4 Video"},
+	{CODEC_ID_MPEG4AAC,		B_MEDIA_ENCODED_AUDIO,	B_MISC_FORMAT_FAMILY,	'mp4a', "MPEG4 AAC"},	/* For matroska */
+	{CODEC_ID_MPEG4AAC,		B_MEDIA_ENCODED_AUDIO,	B_MISC_FORMAT_FAMILY,	'a4pm', "MPEG4 AAC"},	/* For matroska */
 
 #ifdef HAS_MACE_AUDIO
 	{CODEC_ID_MACE3,	B_MEDIA_ENCODED_AUDIO,	B_QUICKTIME_FORMAT_FAMILY,	'MAC3', "MACE 3:1"},

Modified: haiku/trunk/src/add-ons/media/plugins/avcodec/gfx_util.h
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/avcodec/gfx_util.h	2008-09-15 14:14:35 UTC (rev 27567)
+++ haiku/trunk/src/add-ons/media/plugins/avcodec/gfx_util.h	2008-09-15 14:15:08 UTC (rev 27568)
@@ -1,6 +1,6 @@
 /******************************************************************************
 /
-/	File:			ffutils.h
+/	File:			gfx_util.h
 /
 /	Description:	utility functions for ffmpeg codec wrappers for BeOs R5.
 /
@@ -18,7 +18,9 @@
 
 // BeOS and libavcodec bitmap formats
 #include <GraphicsDefs.h>
-#include "libavcodec/avcodec.h"
+extern "C" {
+	#include "libavcodec/avcodec.h"
+}
 
 // this function will be used by the wrapper to write into
 // the Media Kit provided buffer from the self-allocated ffmpeg codec buffer




More information about the Haiku-commits mailing list