Date: Tue, 11 Feb 2014 03:15:49 GMT From: svn-freebsd-gecko@chruetertee.ch To: freebsd-gecko@freebsd.org Subject: [SVN-Commit] r1488 - in trunk/www: firefox firefox-nightly firefox-nightly/files firefox/files linux-tor-browser seamonkey seamonkey/files Message-ID: <201402110315.s1B3FnhU054626@trillian.chruetertee.ch>
next in thread | raw e-mail | index | archive | help
Author: jbeich Date: Tue Feb 11 03:15:48 2014 New Revision: 1488 Log: update Added: trunk/www/seamonkey/files/patch-mailnews-extensions-enigmail-config-getOsTarget.pl Deleted: trunk/www/firefox-nightly/files/patch-bug970031 Modified: trunk/www/firefox-nightly/Makefile.hgrev trunk/www/firefox-nightly/distinfo trunk/www/firefox-nightly/files/patch-bug806917 trunk/www/firefox/Makefile trunk/www/firefox/distinfo trunk/www/firefox/files/patch-bug806917 trunk/www/linux-tor-browser/Makefile trunk/www/linux-tor-browser/distinfo trunk/www/seamonkey/Makefile trunk/www/seamonkey/distinfo Modified: trunk/www/firefox-nightly/Makefile.hgrev ============================================================================== --- trunk/www/firefox-nightly/Makefile.hgrev Sun Feb 9 12:00:12 2014 (r1487) +++ trunk/www/firefox-nightly/Makefile.hgrev Tue Feb 11 03:15:48 2014 (r1488) @@ -1 +1 @@ -HGREV= 167424:1ca0ce406aad +HGREV= 167979:221df43616ab Modified: trunk/www/firefox-nightly/distinfo ============================================================================== --- trunk/www/firefox-nightly/distinfo Sun Feb 9 12:00:12 2014 (r1487) +++ trunk/www/firefox-nightly/distinfo Tue Feb 11 03:15:48 2014 (r1488) @@ -1,2 +1,2 @@ -SHA256 (firefox-nightly/1ca0ce406aad.tar.bz2) = 698925f4843b3ae4d940a1c7bd512e01bd13e0d6adc027e023c8441b26926363 -SIZE (firefox-nightly/1ca0ce406aad.tar.bz2) = 135999400 +SHA256 (firefox-nightly/221df43616ab.tar.bz2) = db00823267464793c4de7c82234ed21c4044582f35e5021f14dd3030f7e86f22 +SIZE (firefox-nightly/221df43616ab.tar.bz2) = 135901109 Modified: trunk/www/firefox-nightly/files/patch-bug806917 ============================================================================== --- trunk/www/firefox-nightly/files/patch-bug806917 Sun Feb 9 12:00:12 2014 (r1487) +++ trunk/www/firefox-nightly/files/patch-bug806917 Tue Feb 11 03:15:48 2014 (r1488) @@ -22,7 +22,7 @@ index 9776b8d..0b1698d 100644 --- configure.in +++ configure.in -@@ -3982,6 +3982,7 @@ MOZ_SAMPLE_TYPE_FLOAT32= +@@ -3988,6 +3988,7 @@ MOZ_SAMPLE_TYPE_FLOAT32= MOZ_SAMPLE_TYPE_S16= MOZ_OPUS=1 MOZ_WEBM=1 @@ -30,7 +30,7 @@ MOZ_DIRECTSHOW= MOZ_WMF= MOZ_FMP4= -@@ -5624,44 +5625,59 @@ WINNT|Darwin|Android) +@@ -5634,44 +5635,59 @@ WINNT|Darwin|Android) ;; *) MOZ_GSTREAMER=1 @@ -119,7 +119,7 @@ index 0000000..69d0385 --- /dev/null +++ content/media/gstreamer/GStreamerAllocator.cpp -@@ -0,0 +1,195 @@ +@@ -0,0 +1,197 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif @@ -178,9 +178,7 @@ + mem->image->Release(); + + ImageContainer* container = ((MozGfxMemoryAllocator*) mem->memory.allocator)->reader->GetImageContainer(); -+ mem->image = -+ reinterpret_cast<PlanarYCbCrImage*>( -+ container->CreateImage(ImageFormat::PLANAR_YCBCR).get()); ++ mem->image = reinterpret_cast<PlanarYCbCrImage*>(container->CreateImage(ImageFormat::PLANAR_YCBCR).get()); + mem->data = mem->image->AllocateAndGetNewBuffer(mem->memory.size); +} + @@ -190,10 +188,10 @@ +{ + MozGfxMemory* mem = g_slice_new (MozGfxMemory); + gsize maxsize = aSize + aParams->prefix + aParams->padding; -+ gst_memory_init (GST_MEMORY_CAST (mem), -+ (GstMemoryFlags)aParams->flags, -+ aAllocator, NULL, maxsize, aParams->align, -+ aParams->prefix, aSize); ++ gst_memory_init(GST_MEMORY_CAST (mem), ++ (GstMemoryFlags)aParams->flags, ++ aAllocator, NULL, maxsize, aParams->align, ++ aParams->prefix, aSize); + mem->image = NULL; + moz_gfx_memory_reset(mem); + @@ -218,6 +216,10 @@ +static gpointer +moz_gfx_memory_map (MozGfxMemory * mem, gsize maxsize, GstMapFlags flags) +{ ++ // check that the allocation didn't fail ++ if (mem->data == nullptr) ++ return nullptr; ++ + return mem->data + mem->memory.offset; +} + @@ -278,7 +280,7 @@ +} + +void -+moz_gfx_memory_allocator_set_reader(GstAllocator *aAllocator, GStreamerReader* aReader) ++moz_gfx_memory_allocator_set_reader(GstAllocator* aAllocator, GStreamerReader* aReader) +{ + MozGfxMemoryAllocator *allocator = (MozGfxMemoryAllocator *) aAllocator; + allocator->reader = aReader; @@ -296,7 +298,7 @@ +moz_gfx_buffer_pool_reset_buffer (GstBufferPool* aPool, GstBuffer* aBuffer) +{ + GstMemory* mem = gst_buffer_peek_memory(aBuffer, 0); -+ ++ + NS_ASSERTION(GST_IS_MOZ_GFX_MEMORY_ALLOCATOR(mem->allocator), "Should be a gfx image"); + moz_gfx_memory_reset((MozGfxMemory *) mem); + GST_BUFFER_POOL_CLASS(moz_gfx_buffer_pool_parent_class)->reset_buffer(aPool, aBuffer); @@ -345,7 +347,7 @@ + +} // namespace mozilla + -+#endif ++#endif diff --git content/media/gstreamer/GStreamerFormatHelper.cpp content/media/gstreamer/GStreamerFormatHelper.cpp index be71331..a5e5db8 100644 --- content/media/gstreamer/GStreamerFormatHelper.cpp @@ -448,7 +450,7 @@ GST_FUNC(LIBGSTREAMER, gst_segment_to_stream_time) GST_FUNC(LIBGSTREAMER, gst_static_caps_get) GST_FUNC(LIBGSTREAMER, gst_structure_copy) -@@ -85,11 +72,82 @@ GST_FUNC(LIBGSTREAMER, gst_structure_get_int) +@@ -86,11 +73,82 @@ GST_FUNC(LIBGSTREAMER, gst_structure_get_int) GST_FUNC(LIBGSTREAMER, gst_structure_get_value) GST_FUNC(LIBGSTREAMER, gst_structure_new) GST_FUNC(LIBGSTREAMER, gst_util_uint64_scale) @@ -531,7 +533,7 @@ /* * Functions that have been defined in the header file. We replace them so that -@@ -99,6 +157,11 @@ GST_FUNC(LIBGSTVIDEO, gst_video_format_parse_caps) +@@ -100,6 +158,11 @@ GST_FUNC(LIBGSTVIDEO, gst_video_format_parse_caps) REPLACE_FUNC(gst_buffer_ref); REPLACE_FUNC(gst_buffer_unref); REPLACE_FUNC(gst_message_unref); @@ -669,7 +671,7 @@ index 0000000..fb98bde --- /dev/null +++ content/media/gstreamer/GStreamerReader-0.10.cpp -@@ -0,0 +1,204 @@ +@@ -0,0 +1,200 @@ +#include "nsError.h" +#include "MediaDecoderStateMachine.h" +#include "AbstractMediaDecoder.h" @@ -714,14 +716,10 @@ +{ + /* allocate an image using the container */ + ImageContainer* container = mDecoder->GetImageContainer(); -+ if (!container) { -+ // We don't have an ImageContainer. We probably belong to an <audio> -+ // element. -+ return GST_FLOW_NOT_SUPPORTED; ++ if (container == nullptr) { ++ return GST_FLOW_ERROR; + } -+ PlanarYCbCrImage* img = -+ reinterpret_cast<PlanarYCbCrImage*>( -+ container->CreateImage(ImageFormat::PLANAR_YCBCR).get()); ++ PlanarYCbCrImage* img = reinterpret_cast<PlanarYCbCrImage*>(container->CreateImage(ImageFormat::PLANAR_YCBCR).get()); + nsRefPtr<PlanarYCbCrImage> image = dont_AddRef(img); + + /* prepare a GstBuffer pointing to the underlying PlanarYCbCrImage buffer */ @@ -792,7 +790,7 @@ +{ + if (!GST_IS_MOZ_VIDEO_BUFFER (aBuffer)) + return nullptr; -+ ++ + nsRefPtr<PlanarYCbCrImage> image; + GstMozVideoBufferData* bufferdata = reinterpret_cast<GstMozVideoBufferData*>(gst_moz_video_buffer_get_data(GST_MOZ_VIDEO_BUFFER(aBuffer))); + image = bufferdata->mImage; @@ -890,7 +888,7 @@ #include "VideoUtils.h" #include "mozilla/dom/TimeRanges.h" #include "mozilla/Preferences.h" -@@ -31,14 +33,9 @@ extern PRLogModuleInfo* gMediaDecoderLog; +@@ -31,14 +33,14 @@ extern PRLogModuleInfo* gMediaDecoderLog; #define LOG(type, msg) #endif @@ -900,13 +898,19 @@ - const VideoData::YCbCrBuffer::Plane& aCrPlane); - static const unsigned int MAX_CHANNELS = 4; - // Let the demuxer work in pull mode for short files +-// Let the demuxer work in pull mode for short files -static const int SHORT_FILE_SIZE = 1024 * 1024; ++// Let the demuxer work in pull mode for short files. This used to be a micro ++// optimization to have more accurate durations for ogg files in mochitests. ++// Since as of today we aren't using gstreamer to demux ogg, and having demuxers ++// work in pull mode over http makes them slower (since they really assume ++// near-zero latency in pull mode) set the constant to 0 for now, which ++// effectively disables it. +static const int SHORT_FILE_SIZE = 0; // The default resource->Read() size when working in push mode static const int DEFAULT_SOURCE_READ_SIZE = 50 * 1024; -@@ -60,6 +57,10 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) +@@ -60,6 +62,10 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) : MediaDecoderReader(aDecoder), mMP3FrameParser(aDecoder->GetResource()->GetLength()), mUseParserDuration(false), @@ -917,7 +921,7 @@ mPlayBin(nullptr), mBus(nullptr), mSource(nullptr), -@@ -72,6 +73,9 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) +@@ -72,6 +78,9 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) mAudioSinkBufferCount(0), mGstThreadsMonitor("media.gst.threads"), mReachedEos(false), @@ -927,7 +931,7 @@ fpsNum(0), fpsDen(0) { -@@ -83,8 +87,12 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) +@@ -83,8 +92,12 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) mSinkCallbacks.eos = GStreamerReader::EosCb; mSinkCallbacks.new_preroll = GStreamerReader::NewPrerollCb; @@ -940,37 +944,34 @@ gst_segment_init(&mVideoSegment, GST_FORMAT_UNDEFINED); gst_segment_init(&mAudioSegment, GST_FORMAT_UNDEFINED); -@@ -108,65 +116,67 @@ GStreamerReader::~GStreamerReader() +@@ -108,65 +121,59 @@ GStreamerReader::~GStreamerReader() mAudioAppSink = nullptr; gst_object_unref(mBus); mBus = nullptr; +#if GST_VERSION_MAJOR >= 1 + g_object_unref(mAllocator); + g_object_unref(mBufferPool); -+#endif ++#endif } } -- -+ + nsresult GStreamerReader::Init(MediaDecoderReader* aCloneDonor) { -+#if 0 - GError* error = nullptr; - if (!gst_init_check(0, 0, &error)) { - LOG(PR_LOG_ERROR, ("gst initialization failed: %s", error->message)); - g_error_free(error); - return NS_ERROR_FAILURE; - } -+#endif +- GError* error = nullptr; +- if (!gst_init_check(0, 0, &error)) { +- LOG(PR_LOG_ERROR, ("gst initialization failed: %s", error->message)); +- g_error_free(error); +- return NS_ERROR_FAILURE; +- } + GStreamerFormatHelper::Instance(); - ++ +#if GST_VERSION_MAJOR >= 1 -+ mAllocator = static_cast<GstAllocator*>(g_object_new(GST_TYPE_MOZ_GFX_MEMORY_ALLOCATOR, NULL)); ++ mAllocator = static_cast<GstAllocator*>(g_object_new(GST_TYPE_MOZ_GFX_MEMORY_ALLOCATOR, nullptr)); + moz_gfx_memory_allocator_set_reader(mAllocator, this); + -+ mBufferPool = static_cast<GstBufferPool*>(g_object_new(GST_TYPE_MOZ_GFX_BUFFER_POOL, NULL)); ++ mBufferPool = static_cast<GstBufferPool*>(g_object_new(GST_TYPE_MOZ_GFX_BUFFER_POOL, nullptr)); +#endif -+ + +#if GST_VERSION_MAJOR >= 1 + mPlayBin = gst_element_factory_make("playbin", nullptr); +#else @@ -1030,17 +1031,16 @@ + gst_app_sink_set_callbacks(mVideoAppSink, &mSinkCallbacks, + (gpointer) this, nullptr); gst_app_sink_set_callbacks(mAudioAppSink, &mSinkCallbacks, -- (gpointer) this, nullptr); + (gpointer) this, nullptr); - sinkpad = gst_element_get_pad(GST_ELEMENT(mAudioAppSink), "sink"); - gst_pad_add_event_probe(sinkpad, - G_CALLBACK(&GStreamerReader::EventProbeCb), this); - gst_object_unref(sinkpad); -+ (gpointer) this, nullptr); + InstallPadCallbacks(); g_object_set(mPlayBin, "uri", "appsrc://", "video-sink", mVideoSink, -@@ -316,13 +326,13 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -318,13 +325,13 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, /* Little trick: set the target caps to "skip" so that playbin2 fails to * find a decoder for the stream we want to skip. */ @@ -1056,7 +1056,7 @@ gst_element_set_state(mPlayBin, GST_STATE_PAUSED); /* Wait for ASYNC_DONE, which is emitted when the pipeline is built, -@@ -343,6 +353,7 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -345,6 +352,7 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, gst_message_unref(message); ret = NS_ERROR_FAILURE; } else { @@ -1064,7 +1064,7 @@ gst_message_unref(message); ret = NS_OK; break; -@@ -358,16 +369,20 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -360,16 +368,20 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, /* FIXME: workaround for a bug in matroskademux. This seek makes matroskademux * parse the index */ @@ -1083,11 +1083,11 @@ return NS_ERROR_FAILURE; } + } else { -+ LOG(PR_LOG_DEBUG, ("matroskademux seek hack failed (non fatal)")); ++ LOG(PR_LOG_DEBUG, ("matroskademux seek hack failed (non fatal)")); } bool isMP3 = mDecoder->GetResource()->GetContentType().EqualsASCII(AUDIO_MP3); -@@ -377,7 +392,6 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -379,7 +391,6 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, /* report the duration */ gint64 duration; @@ -1095,7 +1095,7 @@ if (isMP3 && mMP3FrameParser.IsMP3()) { // The MP3FrameParser has reported a duration; use that over the gstreamer -@@ -386,18 +400,25 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -388,18 +399,25 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, mUseParserDuration = true; mLastParserDuration = mMP3FrameParser.GetDuration(); mDecoder->SetMediaDuration(mLastParserDuration); @@ -1132,19 +1132,19 @@ } int n_video = 0, n_audio = 0; -@@ -410,7 +431,11 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -412,7 +430,11 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, *aTags = nullptr; // Watch the pipeline for fatal errors +#if GST_VERSION_MAJOR >= 1 -+ gst_bus_set_sync_handler(mBus, GStreamerReader::ErrorCb, this, NULL); ++ gst_bus_set_sync_handler(mBus, GStreamerReader::ErrorCb, this, nullptr); +#else gst_bus_set_sync_handler(mBus, GStreamerReader::ErrorCb, this); +#endif /* set the pipeline to PLAYING so that it starts decoding and queueing data in * the appsinks */ -@@ -424,19 +449,35 @@ nsresult GStreamerReader::CheckSupportedFormats() +@@ -426,19 +448,35 @@ nsresult GStreamerReader::CheckSupportedFormats() bool done = false; bool unsupported = false; @@ -1154,7 +1154,7 @@ + GstIteratorResult res; GstElement* element; - GstIteratorResult res = gst_iterator_next(it, (void **)&element); -+ ++ +#if GST_VERSION_MAJOR >= 1 + GValue value = {0,}; + res = gst_iterator_next(it, &value); @@ -1163,8 +1163,7 @@ +#endif switch(res) { case GST_ITERATOR_OK: -- { -+ { + { +#if GST_VERSION_MAJOR >= 1 + element = GST_ELEMENT (g_value_get_object (&value)); +#endif @@ -1185,7 +1184,7 @@ if (caps) { /* check for demuxers but ignore elements like id3demux */ -@@ -451,7 +492,11 @@ nsresult GStreamerReader::CheckSupportedFormats() +@@ -453,7 +491,11 @@ nsresult GStreamerReader::CheckSupportedFormats() } } @@ -1197,7 +1196,7 @@ done = unsupported; break; } -@@ -475,16 +520,23 @@ nsresult GStreamerReader::ResetDecode() +@@ -477,6 +519,8 @@ nsresult GStreamerReader::ResetDecode() { nsresult res = NS_OK; @@ -1206,23 +1205,33 @@ if (NS_FAILED(MediaDecoderReader::ResetDecode())) { res = NS_ERROR_FAILURE; } -- -+ - mVideoQueue.Reset(); - mAudioQueue.Reset(); - +@@ -487,6 +531,11 @@ nsresult GStreamerReader::ResetDecode() mVideoSinkBufferCount = 0; mAudioSinkBufferCount = 0; mReachedEos = false; +#if GST_VERSION_MAJOR >= 1 + mConfigureAlignment = true; +#endif -+ ++ + LOG(PR_LOG_DEBUG, ("reset decode done")); return res; } -@@ -526,17 +578,31 @@ bool GStreamerReader::DecodeAudioData() +@@ -510,11 +559,11 @@ bool GStreamerReader::DecodeAudioData() + /* We have nothing decoded so it makes no sense to return to the state machine + * as it will call us back immediately, we'll return again and so on, wasting + * CPU cycles for no job done. So, block here until there is either video or +- * audio data available ++ * audio data available + */ + mon.Wait(); + if (!mAudioSinkBufferCount) { +- /* There is still no audio data available, so either there is video data or ++ /* There is still no audio data available, so either there is video data or + * something else has happened (Eos, etc...). Return to the state machine + * to process it. + */ +@@ -526,17 +575,34 @@ bool GStreamerReader::DecodeAudioData() } } @@ -1244,44 +1253,57 @@ timestamp = GST_TIME_AS_USECONDS(timestamp); int64_t offset = GST_BUFFER_OFFSET(buffer); ++ guint8* data; +#if GST_VERSION_MAJOR >= 1 + GstMapInfo info; + gst_buffer_map(buffer, &info, GST_MAP_READ); + unsigned int size = info.size; ++ data = info.data; +#else unsigned int size = GST_BUFFER_SIZE(buffer); ++ data = GST_BUFFER_DATA(buffer); +#endif int32_t frames = (size / sizeof(AudioDataValue)) / mInfo.mAudio.mChannels; typedef AudioCompactor::NativeCopy GstCopy; -@@ -545,16 +611,24 @@ bool GStreamerReader::DecodeAudioData() +@@ -545,16 +611,20 @@ bool GStreamerReader::DecodeAudioData() mInfo.mAudio.mRate, frames, mInfo.mAudio.mChannels, -+#if GST_VERSION_MAJOR >= 1 -+ GstCopy(info.data, -+ info.size, -+#else - GstCopy(GST_BUFFER_DATA(buffer), +- GstCopy(GST_BUFFER_DATA(buffer), ++ GstCopy(data, size, -+#endif mInfo.mAudio.mChannels)); +#if GST_VERSION_MAJOR >= 1 + gst_buffer_unmap(buffer, &info); +#endif ++ gst_buffer_unref(buffer); return true; } -- -+ + bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, - int64_t aTimeThreshold) + int64_t aTimeThreshold) { NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread."); -@@ -589,11 +660,17 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, +@@ -573,11 +643,11 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, + /* We have nothing decoded so it makes no sense to return to the state machine + * as it will call us back immediately, we'll return again and so on, wasting + * CPU cycles for no job done. So, block here until there is either video or +- * audio data available ++ * audio data available + */ + mon.Wait(); + if (!mVideoSinkBufferCount) { +- /* There is still no video data available, so either there is audio data or ++ /* There is still no video data available, so either there is audio data or + * something else has happened (Eos, etc...). Return to the state machine + * to process it + */ +@@ -591,11 +661,17 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, mDecoder->NotifyDecodedFrames(0, 1); @@ -1300,7 +1322,7 @@ if ((aKeyFrameSkip && !isKeyframe)) { gst_buffer_unref(buffer); return true; -@@ -609,10 +686,18 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, +@@ -611,10 +687,18 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, "frame has invalid timestamp"); timestamp = GST_TIME_AS_USECONDS(timestamp); @@ -1320,7 +1342,7 @@ gst_buffer_unref(buffer); return true; } -@@ -621,61 +706,36 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, +@@ -623,61 +707,36 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, /* no more frames */ return false; @@ -1346,7 +1368,7 @@ + gst_structure_free(config); + mConfigureAlignment = false; + } -+#endif ++#endif + nsRefPtr<PlanarYCbCrImage> image = GetImageFromBuffer(buffer); if (!image) { @@ -1400,7 +1422,7 @@ gst_buffer_unref(buffer); return true; -@@ -698,6 +758,10 @@ nsresult GStreamerReader::Seek(int64_t aTarget, +@@ -700,6 +759,10 @@ nsresult GStreamerReader::Seek(int64_t aTarget, return NS_ERROR_FAILURE; } LOG(PR_LOG_DEBUG, ("seek succeeded")); @@ -1411,7 +1433,7 @@ return DecodeToTarget(aTarget); } -@@ -709,7 +773,9 @@ nsresult GStreamerReader::GetBuffered(dom::TimeRanges* aBuffered, +@@ -711,7 +774,9 @@ nsresult GStreamerReader::GetBuffered(dom::TimeRanges* aBuffered, return NS_OK; } @@ -1421,7 +1443,7 @@ MediaResource* resource = mDecoder->GetResource(); nsTArray<MediaByteRange> ranges; resource->GetCachedRanges(ranges); -@@ -731,12 +797,21 @@ nsresult GStreamerReader::GetBuffered(dom::TimeRanges* aBuffered, +@@ -733,12 +798,21 @@ nsresult GStreamerReader::GetBuffered(dom::TimeRanges* aBuffered, int64_t endOffset = ranges[index].mEnd; gint64 startTime, endTime; @@ -1443,7 +1465,7 @@ double start = (double) GST_TIME_AS_USECONDS (startTime) / GST_MSECOND; double end = (double) GST_TIME_AS_USECONDS (endTime) / GST_MSECOND; -@@ -755,7 +830,13 @@ void GStreamerReader::ReadAndPushData(guint aLength) +@@ -757,7 +831,13 @@ void GStreamerReader::ReadAndPushData(guint aLength) nsresult rv = NS_OK; GstBuffer* buffer = gst_buffer_new_and_alloc(aLength); @@ -1457,7 +1479,7 @@ uint32_t size = 0, bytesRead = 0; while(bytesRead < aLength) { rv = resource->Read(reinterpret_cast<char*>(data + bytesRead), -@@ -766,14 +847,19 @@ void GStreamerReader::ReadAndPushData(guint aLength) +@@ -768,14 +848,19 @@ void GStreamerReader::ReadAndPushData(guint aLength) bytesRead += size; } @@ -1478,7 +1500,7 @@ /* If we read less than what we wanted, we reached the end */ gst_app_src_end_of_stream(mSource); } -@@ -786,8 +872,13 @@ int64_t GStreamerReader::QueryDuration() +@@ -788,8 +873,13 @@ int64_t GStreamerReader::QueryDuration() gint64 duration = 0; GstFormat format = GST_FORMAT_TIME; @@ -1492,7 +1514,7 @@ if (format == GST_FORMAT_TIME) { LOG(PR_LOG_DEBUG, ("pipeline duration %" GST_TIME_FORMAT, GST_TIME_ARGS (duration))); -@@ -868,109 +962,6 @@ gboolean GStreamerReader::SeekData(GstAppSrc* aSrc, guint64 aOffset) +@@ -868,109 +958,6 @@ gboolean GStreamerReader::SeekData(GstAppSrc* aSrc, guint64 aOffset) return NS_SUCCEEDED(rv); } @@ -1602,7 +1624,7 @@ GstFlowReturn GStreamerReader::NewPrerollCb(GstAppSink* aSink, gpointer aUserData) { -@@ -979,8 +973,12 @@ void GStreamerReader::AudioPreroll() +@@ -987,8 +974,12 @@ void GStreamerReader::AudioPreroll() { /* The first audio buffer has reached the audio sink. Get rate and channels */ LOG(PR_LOG_DEBUG, ("Audio preroll")); @@ -1616,7 +1638,7 @@ GstStructure* s = gst_caps_get_structure(caps, 0); mInfo.mAudio.mRate = mInfo.mAudio.mChannels = 0; gst_structure_get_int(s, "rate", (gint*) &mInfo.mAudio.mRate); -@@ -998,9 +996,18 @@ void GStreamerReader::VideoPreroll() +@@ -1006,9 +997,18 @@ void GStreamerReader::VideoPreroll() { /* The first video buffer has reached the video sink. Get width and height */ LOG(PR_LOG_DEBUG, ("Video preroll")); @@ -1636,15 +1658,15 @@ GstStructure* structure = gst_caps_get_structure(caps, 0); gst_structure_get_fraction(structure, "framerate", &fpsNum, &fpsDen); NS_ASSERTION(mPicture.width && mPicture.height, "invalid video resolution"); -@@ -1029,6 +1036,7 @@ void GStreamerReader::NewVideoBuffer() +@@ -1037,6 +1037,7 @@ void GStreamerReader::NewVideoBuffer() /* We have a new video buffer queued in the video sink. Increment the counter * and notify the decode thread potentially blocked in DecodeVideoFrame */ -+ ++ mDecoder->NotifyDecodedFrames(1, 0); mVideoSinkBufferCount++; mon.NotifyAll(); -@@ -1095,5 +1103,199 @@ void GStreamerReader::NotifyDataArrived(const char *aBuffer, +@@ -1173,5 +1174,199 @@ void GStreamerReader::NotifyDataArrived(const char *aBuffer, } } @@ -1666,7 +1688,7 @@ + format = "S16BE"; +#endif +#endif -+ gst_caps_set_simple(caps, "format", G_TYPE_STRING, format, NULL); ++ gst_caps_set_simple(caps, "format", G_TYPE_STRING, format, nullptr); + + return caps; +} @@ -1765,9 +1787,9 @@ + gst_query_parse_allocation(query, &caps, &need_pool); + gst_video_info_init(&info); + gst_video_info_from_caps(&info, caps); -+ gst_query_add_allocation_param(query, mAllocator, NULL); ++ gst_query_add_allocation_param(query, mAllocator, nullptr); + gst_query_add_allocation_pool(query, mBufferPool, info.size, 0, 0); -+ gst_query_add_allocation_meta(query, GST_VIDEO_META_API_TYPE, NULL); ++ gst_query_add_allocation_meta(query, GST_VIDEO_META_API_TYPE, nullptr); + break; + default: + break; @@ -1822,12 +1844,12 @@ + + return image; +} -+ ++ +void GStreamerReader::CopyIntoImageBuffer(GstBuffer* aBuffer, + GstBuffer** aOutBuffer, + nsRefPtr<PlanarYCbCrImage> &image) +{ -+ *aOutBuffer = gst_buffer_new_allocate(mAllocator, gst_buffer_get_size(aBuffer), NULL); ++ *aOutBuffer = gst_buffer_new_allocate(mAllocator, gst_buffer_get_size(aBuffer), nullptr); + GstMemory *mem = gst_buffer_peek_memory(*aOutBuffer, 0); + GstMapInfo map_info; + gst_memory_map(mem, &map_info, GST_MAP_WRITE); @@ -1924,7 +1946,7 @@ /* Called when the pipeline is prerolled, that is when at start or after a * seek, the first audio and video buffers are queued in the sinks. -@@ -150,6 +168,11 @@ private: +@@ -167,6 +185,11 @@ private: bool mUseParserDuration; int64_t mLastParserDuration; @@ -1936,7 +1958,7 @@ GstElement* mPlayBin; GstBus* mBus; GstAppSrc* mSource; -@@ -180,6 +203,9 @@ private: +@@ -197,6 +220,9 @@ private: * DecodeAudioData and DecodeVideoFrame should not expect any more data */ bool mReachedEos; @@ -1975,7 +1997,7 @@ index 6e39753..3c8c3b9 100644 --- content/media/test/manifest.js +++ content/media/test/manifest.js -@@ -364,9 +364,9 @@ var gUnseekableTests = [ +@@ -365,9 +365,9 @@ var gUnseekableTests = [ { name:"bogus.duh", type:"bogus/duh"} ]; // Unfortunately big-buck-bunny-unseekable.mp4 is doesn't play on Windows 7, so Deleted: trunk/www/firefox-nightly/files/patch-bug970031 ============================================================================== --- trunk/www/firefox-nightly/files/patch-bug970031 Tue Feb 11 03:15:48 2014 (r1487) +++ /dev/null 00:00:00 1970 (deleted) @@ -1,13 +0,0 @@ -diff --git xpcom/reflect/xptcall/src/md/unix/moz.build xpcom/reflect/xptcall/src/md/unix/moz.build -index 5f88066..bd2a94f 100644 ---- xpcom/reflect/xptcall/src/md/unix/moz.build -+++ xpcom/reflect/xptcall/src/md/unix/moz.build -@@ -256,7 +256,7 @@ if CONFIG['OS_ARCH'] == 'OpenBSD' and CONFIG['OS_TEST'] == 'sparc': - 'xptcstubs_sparc_openbsd.cpp', - ] - --if CONFIG['OS_ARCH'] == 'OpenBSD' and CONFIG['OS_TEST'] == 'sparc64': -+if CONFIG['OS_ARCH'] in ('OpenBSD', 'FreeBSD') and CONFIG['OS_TEST'] == 'sparc64': - SOURCES += [ - 'xptcinvoke_asm_sparc64_openbsd.s', - 'xptcinvoke_sparc64_openbsd.cpp', Modified: trunk/www/firefox/Makefile ============================================================================== --- trunk/www/firefox/Makefile Sun Feb 9 12:00:12 2014 (r1487) +++ trunk/www/firefox/Makefile Tue Feb 11 03:15:48 2014 (r1488) @@ -2,7 +2,7 @@ # $FreeBSD: head/www/firefox/Makefile 339634 2014-01-13 21:00:02Z rene $ PORTNAME= firefox -DISTVERSION= 28.0b1 +DISTVERSION= 28.0b2 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ Modified: trunk/www/firefox/distinfo ============================================================================== --- trunk/www/firefox/distinfo Sun Feb 9 12:00:12 2014 (r1487) +++ trunk/www/firefox/distinfo Tue Feb 11 03:15:48 2014 (r1488) @@ -1,2 +1,2 @@ -SHA256 (firefox-28.0b1.source.tar.bz2) = e791f62fe99375a0a6087c2390979d85ca9f7b0ab11d83ce31525f522c1ee9d3 -SIZE (firefox-28.0b1.source.tar.bz2) = 134830833 +SHA256 (firefox-28.0b2.source.tar.bz2) = ba1bf5ab94c6d7c4c113328f966461cabd9ce96882285ba0c971f6e4dd2e40e2 +SIZE (firefox-28.0b2.source.tar.bz2) = 134778022 Modified: trunk/www/firefox/files/patch-bug806917 ============================================================================== --- trunk/www/firefox/files/patch-bug806917 Sun Feb 9 12:00:12 2014 (r1487) +++ trunk/www/firefox/files/patch-bug806917 Tue Feb 11 03:15:48 2014 (r1488) @@ -22,7 +22,7 @@ index 9776b8d..0b1698d 100644 --- configure.in +++ configure.in -@@ -3982,6 +3982,7 @@ MOZ_SAMPLE_TYPE_FLOAT32= +@@ -3955,6 +3955,7 @@ MOZ_SAMPLE_TYPE_FLOAT32= MOZ_SAMPLE_TYPE_S16= MOZ_OPUS=1 MOZ_WEBM=1 @@ -118,7 +118,7 @@ index 0000000..69d0385 --- /dev/null +++ content/media/gstreamer/GStreamerAllocator.cpp -@@ -0,0 +1,194 @@ +@@ -0,0 +1,198 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif @@ -188,10 +188,10 @@ +{ + MozGfxMemory* mem = g_slice_new (MozGfxMemory); + gsize maxsize = aSize + aParams->prefix + aParams->padding; -+ gst_memory_init (GST_MEMORY_CAST (mem), -+ (GstMemoryFlags)aParams->flags, -+ aAllocator, NULL, maxsize, aParams->align, -+ aParams->prefix, aSize); ++ gst_memory_init(GST_MEMORY_CAST (mem), ++ (GstMemoryFlags)aParams->flags, ++ aAllocator, NULL, maxsize, aParams->align, ++ aParams->prefix, aSize); + mem->image = NULL; + moz_gfx_memory_reset(mem); + @@ -216,6 +216,10 @@ +static gpointer +moz_gfx_memory_map (MozGfxMemory * mem, gsize maxsize, GstMapFlags flags) +{ ++ // check that the allocation didn't fail ++ if (mem->data == nullptr) ++ return nullptr; ++ + return mem->data + mem->memory.offset; +} + @@ -276,7 +280,7 @@ +} + +void -+moz_gfx_memory_allocator_set_reader(GstAllocator *aAllocator, GStreamerReader* aReader) ++moz_gfx_memory_allocator_set_reader(GstAllocator* aAllocator, GStreamerReader* aReader) +{ + MozGfxMemoryAllocator *allocator = (MozGfxMemoryAllocator *) aAllocator; + allocator->reader = aReader; @@ -294,7 +298,7 @@ +moz_gfx_buffer_pool_reset_buffer (GstBufferPool* aPool, GstBuffer* aBuffer) +{ + GstMemory* mem = gst_buffer_peek_memory(aBuffer, 0); -+ ++ + NS_ASSERTION(GST_IS_MOZ_GFX_MEMORY_ALLOCATOR(mem->allocator), "Should be a gfx image"); + moz_gfx_memory_reset((MozGfxMemory *) mem); + GST_BUFFER_POOL_CLASS(moz_gfx_buffer_pool_parent_class)->reset_buffer(aPool, aBuffer); @@ -343,7 +347,7 @@ + +} // namespace mozilla + -+#endif ++#endif diff --git content/media/gstreamer/GStreamerFormatHelper.cpp content/media/gstreamer/GStreamerFormatHelper.cpp index be71331..a5e5db8 100644 --- content/media/gstreamer/GStreamerFormatHelper.cpp @@ -783,7 +787,7 @@ +{ + if (!GST_IS_MOZ_VIDEO_BUFFER (aBuffer)) + return nullptr; -+ ++ + nsRefPtr<PlanarYCbCrImage> image; + GstMozVideoBufferData* bufferdata = reinterpret_cast<GstMozVideoBufferData*>(gst_moz_video_buffer_get_data(GST_MOZ_VIDEO_BUFFER(aBuffer))); + image = bufferdata->mImage; @@ -881,7 +885,7 @@ #include "VideoUtils.h" #include "mozilla/dom/TimeRanges.h" #include "mozilla/Preferences.h" -@@ -31,14 +33,9 @@ extern PRLogModuleInfo* gMediaDecoderLog; +@@ -31,14 +33,14 @@ extern PRLogModuleInfo* gMediaDecoderLog; #define LOG(type, msg) #endif @@ -891,13 +895,19 @@ - const VideoData::YCbCrBuffer::Plane& aCrPlane); - static const unsigned int MAX_CHANNELS = 4; - // Let the demuxer work in pull mode for short files +-// Let the demuxer work in pull mode for short files -static const int SHORT_FILE_SIZE = 1024 * 1024; ++// Let the demuxer work in pull mode for short files. This used to be a micro ++// optimization to have more accurate durations for ogg files in mochitests. ++// Since as of today we aren't using gstreamer to demux ogg, and having demuxers ++// work in pull mode over http makes them slower (since they really assume ++// near-zero latency in pull mode) set the constant to 0 for now, which ++// effectively disables it. +static const int SHORT_FILE_SIZE = 0; // The default resource->Read() size when working in push mode static const int DEFAULT_SOURCE_READ_SIZE = 50 * 1024; -@@ -60,6 +57,10 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) +@@ -60,6 +62,10 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) : MediaDecoderReader(aDecoder), mMP3FrameParser(aDecoder->GetResource()->GetLength()), mUseParserDuration(false), @@ -908,7 +918,7 @@ mPlayBin(nullptr), mBus(nullptr), mSource(nullptr), -@@ -72,6 +73,9 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) +@@ -72,6 +78,9 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) mAudioSinkBufferCount(0), mGstThreadsMonitor("media.gst.threads"), mReachedEos(false), @@ -918,7 +928,7 @@ fpsNum(0), fpsDen(0) { -@@ -83,8 +87,12 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) +@@ -83,8 +92,12 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder) mSinkCallbacks.eos = GStreamerReader::EosCb; mSinkCallbacks.new_preroll = GStreamerReader::NewPrerollCb; @@ -931,37 +941,34 @@ gst_segment_init(&mVideoSegment, GST_FORMAT_UNDEFINED); gst_segment_init(&mAudioSegment, GST_FORMAT_UNDEFINED); -@@ -108,65 +116,67 @@ GStreamerReader::~GStreamerReader() +@@ -108,65 +121,59 @@ GStreamerReader::~GStreamerReader() mAudioAppSink = nullptr; gst_object_unref(mBus); mBus = nullptr; +#if GST_VERSION_MAJOR >= 1 + g_object_unref(mAllocator); + g_object_unref(mBufferPool); -+#endif ++#endif } } -- -+ + nsresult GStreamerReader::Init(MediaDecoderReader* aCloneDonor) { -+#if 0 - GError* error = nullptr; - if (!gst_init_check(0, 0, &error)) { - LOG(PR_LOG_ERROR, ("gst initialization failed: %s", error->message)); - g_error_free(error); - return NS_ERROR_FAILURE; - } -+#endif +- GError* error = nullptr; +- if (!gst_init_check(0, 0, &error)) { +- LOG(PR_LOG_ERROR, ("gst initialization failed: %s", error->message)); +- g_error_free(error); +- return NS_ERROR_FAILURE; +- } + GStreamerFormatHelper::Instance(); - ++ +#if GST_VERSION_MAJOR >= 1 -+ mAllocator = static_cast<GstAllocator*>(g_object_new(GST_TYPE_MOZ_GFX_MEMORY_ALLOCATOR, NULL)); ++ mAllocator = static_cast<GstAllocator*>(g_object_new(GST_TYPE_MOZ_GFX_MEMORY_ALLOCATOR, nullptr)); + moz_gfx_memory_allocator_set_reader(mAllocator, this); + -+ mBufferPool = static_cast<GstBufferPool*>(g_object_new(GST_TYPE_MOZ_GFX_BUFFER_POOL, NULL)); ++ mBufferPool = static_cast<GstBufferPool*>(g_object_new(GST_TYPE_MOZ_GFX_BUFFER_POOL, nullptr)); +#endif -+ + +#if GST_VERSION_MAJOR >= 1 + mPlayBin = gst_element_factory_make("playbin", nullptr); +#else @@ -1021,17 +1028,16 @@ + gst_app_sink_set_callbacks(mVideoAppSink, &mSinkCallbacks, + (gpointer) this, nullptr); gst_app_sink_set_callbacks(mAudioAppSink, &mSinkCallbacks, -- (gpointer) this, nullptr); + (gpointer) this, nullptr); - sinkpad = gst_element_get_pad(GST_ELEMENT(mAudioAppSink), "sink"); - gst_pad_add_event_probe(sinkpad, - G_CALLBACK(&GStreamerReader::EventProbeCb), this); - gst_object_unref(sinkpad); -+ (gpointer) this, nullptr); + InstallPadCallbacks(); g_object_set(mPlayBin, "uri", "appsrc://", "video-sink", mVideoSink, -@@ -316,13 +326,13 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -316,13 +323,13 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, /* Little trick: set the target caps to "skip" so that playbin2 fails to * find a decoder for the stream we want to skip. */ @@ -1047,7 +1053,7 @@ gst_element_set_state(mPlayBin, GST_STATE_PAUSED); /* Wait for ASYNC_DONE, which is emitted when the pipeline is built, -@@ -343,6 +353,7 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -343,6 +350,7 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, gst_message_unref(message); ret = NS_ERROR_FAILURE; } else { @@ -1055,7 +1061,7 @@ gst_message_unref(message); ret = NS_OK; break; -@@ -358,16 +369,20 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -358,16 +366,20 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, /* FIXME: workaround for a bug in matroskademux. This seek makes matroskademux * parse the index */ @@ -1074,11 +1080,11 @@ return NS_ERROR_FAILURE; } + } else { -+ LOG(PR_LOG_DEBUG, ("matroskademux seek hack failed (non fatal)")); ++ LOG(PR_LOG_DEBUG, ("matroskademux seek hack failed (non fatal)")); } bool isMP3 = mDecoder->GetResource()->GetContentType().EqualsASCII(AUDIO_MP3); -@@ -377,7 +392,6 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -377,7 +389,6 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, /* report the duration */ gint64 duration; @@ -1086,7 +1092,7 @@ if (isMP3 && mMP3FrameParser.IsMP3()) { // The MP3FrameParser has reported a duration; use that over the gstreamer -@@ -386,18 +400,25 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -386,18 +397,25 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, mUseParserDuration = true; mLastParserDuration = mMP3FrameParser.GetDuration(); mDecoder->SetMediaDuration(mLastParserDuration); @@ -1123,19 +1129,19 @@ } int n_video = 0, n_audio = 0; -@@ -410,7 +431,11 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, +@@ -410,7 +428,11 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo, *aTags = nullptr; // Watch the pipeline for fatal errors +#if GST_VERSION_MAJOR >= 1 -+ gst_bus_set_sync_handler(mBus, GStreamerReader::ErrorCb, this, NULL); ++ gst_bus_set_sync_handler(mBus, GStreamerReader::ErrorCb, this, nullptr); +#else gst_bus_set_sync_handler(mBus, GStreamerReader::ErrorCb, this); +#endif /* set the pipeline to PLAYING so that it starts decoding and queueing data in * the appsinks */ -@@ -424,19 +449,35 @@ nsresult GStreamerReader::CheckSupportedFormats() +@@ -424,19 +446,35 @@ nsresult GStreamerReader::CheckSupportedFormats() bool done = false; bool unsupported = false; @@ -1145,7 +1151,7 @@ + GstIteratorResult res; GstElement* element; - GstIteratorResult res = gst_iterator_next(it, (void **)&element); -+ ++ +#if GST_VERSION_MAJOR >= 1 + GValue value = {0,}; + res = gst_iterator_next(it, &value); @@ -1154,8 +1160,7 @@ +#endif switch(res) { case GST_ITERATOR_OK: -- { -+ { + { +#if GST_VERSION_MAJOR >= 1 + element = GST_ELEMENT (g_value_get_object (&value)); +#endif @@ -1176,7 +1181,7 @@ if (caps) { /* check for demuxers but ignore elements like id3demux */ -@@ -451,7 +492,11 @@ nsresult GStreamerReader::CheckSupportedFormats() +@@ -451,7 +489,11 @@ nsresult GStreamerReader::CheckSupportedFormats() } } @@ -1188,7 +1193,7 @@ done = unsupported; break; } -@@ -475,16 +520,23 @@ nsresult GStreamerReader::ResetDecode() +@@ -475,6 +517,8 @@ nsresult GStreamerReader::ResetDecode() { nsresult res = NS_OK; @@ -1197,23 +1202,33 @@ if (NS_FAILED(MediaDecoderReader::ResetDecode())) { res = NS_ERROR_FAILURE; } -- -+ - mVideoQueue.Reset(); - mAudioQueue.Reset(); - +@@ -485,6 +529,11 @@ nsresult GStreamerReader::ResetDecode() mVideoSinkBufferCount = 0; mAudioSinkBufferCount = 0; mReachedEos = false; +#if GST_VERSION_MAJOR >= 1 + mConfigureAlignment = true; +#endif -+ ++ + LOG(PR_LOG_DEBUG, ("reset decode done")); return res; } -@@ -524,24 +576,43 @@ bool GStreamerReader::DecodeAudioData() +@@ -508,11 +557,11 @@ bool GStreamerReader::DecodeAudioData() + /* We have nothing decoded so it makes no sense to return to the state machine + * as it will call us back immediately, we'll return again and so on, wasting + * CPU cycles for no job done. So, block here until there is either video or +- * audio data available ++ * audio data available + */ + mon.Wait(); + if (!mAudioSinkBufferCount) { +- /* There is still no audio data available, so either there is video data or ++ /* There is still no audio data available, so either there is video data or + * something else has happened (Eos, etc...). Return to the state machine + * to process it. + */ +@@ -524,24 +573,43 @@ bool GStreamerReader::DecodeAudioData() } } @@ -1257,19 +1272,30 @@ AudioData* audio = new AudioData(offset, timestamp, duration, frames, data.forget(), mInfo.mAudio.mChannels); -@@ -550,9 +621,9 @@ bool GStreamerReader::DecodeAudioData() - - return true; +@@ -552,7 +620,7 @@ bool GStreamerReader::DecodeAudioData() } -- -+ + bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, - int64_t aTimeThreshold) + int64_t aTimeThreshold) { NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread."); -@@ -589,11 +660,17 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, +@@ -571,11 +639,11 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, + /* We have nothing decoded so it makes no sense to return to the state machine + * as it will call us back immediately, we'll return again and so on, wasting + * CPU cycles for no job done. So, block here until there is either video or +- * audio data available ++ * audio data available + */ + mon.Wait(); + if (!mVideoSinkBufferCount) { +- /* There is still no video data available, so either there is audio data or ++ /* There is still no video data available, so either there is audio data or + * something else has happened (Eos, etc...). Return to the state machine + * to process it + */ +@@ -589,11 +657,17 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, mDecoder->NotifyDecodedFrames(0, 1); @@ -1288,7 +1314,7 @@ if ((aKeyFrameSkip && !isKeyframe)) { gst_buffer_unref(buffer); return true; -@@ -609,10 +686,18 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, +@@ -609,10 +683,18 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, "frame has invalid timestamp"); timestamp = GST_TIME_AS_USECONDS(timestamp); @@ -1308,7 +1334,7 @@ gst_buffer_unref(buffer); return true; } -@@ -621,61 +706,36 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, +@@ -621,61 +703,36 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip, /* no more frames */ return false; @@ -1334,7 +1360,7 @@ + gst_structure_free(config); + mConfigureAlignment = false; + } -+#endif ++#endif + nsRefPtr<PlanarYCbCrImage> image = GetImageFromBuffer(buffer); if (!image) { @@ -1388,7 +1414,7 @@ gst_buffer_unref(buffer); return true; -@@ -698,6 +758,10 @@ nsresult GStreamerReader::Seek(int64_t aTarget, +@@ -698,6 +755,10 @@ nsresult GStreamerReader::Seek(int64_t aTarget, return NS_ERROR_FAILURE; } LOG(PR_LOG_DEBUG, ("seek succeeded")); @@ -1399,7 +1425,7 @@ return DecodeToTarget(aTarget); } -@@ -709,7 +773,9 @@ nsresult GStreamerReader::GetBuffered(dom::TimeRanges* aBuffered, +@@ -709,7 +770,9 @@ nsresult GStreamerReader::GetBuffered(dom::TimeRanges* aBuffered, return NS_OK; } @@ -1409,7 +1435,7 @@ MediaResource* resource = mDecoder->GetResource(); nsTArray<MediaByteRange> ranges; resource->GetCachedRanges(ranges); -@@ -731,12 +797,21 @@ nsresult GStreamerReader::GetBuffered(dom::TimeRanges* aBuffered, +@@ -731,12 +794,21 @@ nsresult GStreamerReader::GetBuffered(dom::TimeRanges* aBuffered, int64_t endOffset = ranges[index].mEnd; gint64 startTime, endTime; @@ -1431,7 +1457,7 @@ double start = (double) GST_TIME_AS_USECONDS (startTime) / GST_MSECOND; double end = (double) GST_TIME_AS_USECONDS (endTime) / GST_MSECOND; -@@ -755,7 +830,13 @@ void GStreamerReader::ReadAndPushData(guint aLength) +@@ -755,7 +827,13 @@ void GStreamerReader::ReadAndPushData(guint aLength) nsresult rv = NS_OK; GstBuffer* buffer = gst_buffer_new_and_alloc(aLength); @@ -1445,7 +1471,7 @@ uint32_t size = 0, bytesRead = 0; while(bytesRead < aLength) { rv = resource->Read(reinterpret_cast<char*>(data + bytesRead), -@@ -766,14 +847,19 @@ void GStreamerReader::ReadAndPushData(guint aLength) +@@ -766,14 +844,19 @@ void GStreamerReader::ReadAndPushData(guint aLength) bytesRead += size; } @@ -1466,7 +1492,7 @@ /* If we read less than what we wanted, we reached the end */ gst_app_src_end_of_stream(mSource); } -@@ -786,8 +872,13 @@ int64_t GStreamerReader::QueryDuration() +@@ -786,8 +869,13 @@ int64_t GStreamerReader::QueryDuration() gint64 duration = 0; GstFormat format = GST_FORMAT_TIME; @@ -1480,7 +1506,7 @@ if (format == GST_FORMAT_TIME) { LOG(PR_LOG_DEBUG, ("pipeline duration %" GST_TIME_FORMAT, GST_TIME_ARGS (duration))); -@@ -866,103 +957,6 @@ gboolean GStreamerReader::SeekData(GstAppSrc* aSrc, guint64 aOffset) +@@ -866,103 +954,6 @@ gboolean GStreamerReader::SeekData(GstAppSrc* aSrc, guint64 aOffset) return NS_SUCCEEDED(rv); } @@ -1584,7 +1610,7 @@ GstFlowReturn GStreamerReader::NewPrerollCb(GstAppSink* aSink, gpointer aUserData) { -@@ -979,8 +973,12 @@ void GStreamerReader::AudioPreroll() +@@ -979,8 +970,12 @@ void GStreamerReader::AudioPreroll() { /* The first audio buffer has reached the audio sink. Get rate and channels */ LOG(PR_LOG_DEBUG, ("Audio preroll")); @@ -1598,7 +1624,7 @@ GstStructure* s = gst_caps_get_structure(caps, 0); mInfo.mAudio.mRate = mInfo.mAudio.mChannels = 0; gst_structure_get_int(s, "rate", (gint*) &mInfo.mAudio.mRate); -@@ -998,9 +996,18 @@ void GStreamerReader::VideoPreroll() +@@ -998,9 +993,18 @@ void GStreamerReader::VideoPreroll() { /* The first video buffer has reached the video sink. Get width and height */ LOG(PR_LOG_DEBUG, ("Video preroll")); @@ -1618,15 +1644,15 @@ GstStructure* structure = gst_caps_get_structure(caps, 0); gst_structure_get_fraction(structure, "framerate", &fpsNum, &fpsDen); NS_ASSERTION(mPicture.width && mPicture.height, "invalid video resolution"); -@@ -1029,6 +1036,7 @@ void GStreamerReader::NewVideoBuffer() +@@ -1029,6 +1033,7 @@ void GStreamerReader::NewVideoBuffer() /* We have a new video buffer queued in the video sink. Increment the counter * and notify the decode thread potentially blocked in DecodeVideoFrame */ -+ ++ mDecoder->NotifyDecodedFrames(1, 0); mVideoSinkBufferCount++; mon.NotifyAll(); -@@ -1095,5 +1103,199 @@ void GStreamerReader::NotifyDataArrived(const char *aBuffer, +@@ -1095,5 +1100,199 @@ void GStreamerReader::NotifyDataArrived(const char *aBuffer, } } @@ -1648,7 +1674,7 @@ + format = "S16BE"; +#endif +#endif -+ gst_caps_set_simple(caps, "format", G_TYPE_STRING, format, NULL); ++ gst_caps_set_simple(caps, "format", G_TYPE_STRING, format, nullptr); + + return caps; +} @@ -1747,9 +1773,9 @@ + gst_query_parse_allocation(query, &caps, &need_pool); + gst_video_info_init(&info); + gst_video_info_from_caps(&info, caps); -+ gst_query_add_allocation_param(query, mAllocator, NULL); ++ gst_query_add_allocation_param(query, mAllocator, nullptr); + gst_query_add_allocation_pool(query, mBufferPool, info.size, 0, 0); -+ gst_query_add_allocation_meta(query, GST_VIDEO_META_API_TYPE, NULL); ++ gst_query_add_allocation_meta(query, GST_VIDEO_META_API_TYPE, nullptr); + break; + default: + break; @@ -1804,12 +1830,12 @@ + + return image; +} -+ ++ +void GStreamerReader::CopyIntoImageBuffer(GstBuffer* aBuffer, + GstBuffer** aOutBuffer, + nsRefPtr<PlanarYCbCrImage> &image) +{ -+ *aOutBuffer = gst_buffer_new_allocate(mAllocator, gst_buffer_get_size(aBuffer), NULL); ++ *aOutBuffer = gst_buffer_new_allocate(mAllocator, gst_buffer_get_size(aBuffer), nullptr); + GstMemory *mem = gst_buffer_peek_memory(*aOutBuffer, 0); + GstMapInfo map_info; + gst_memory_map(mem, &map_info, GST_MAP_WRITE); @@ -1957,7 +1983,7 @@ index 6e39753..3c8c3b9 100644 --- content/media/test/manifest.js +++ content/media/test/manifest.js -@@ -364,9 +364,9 @@ var gUnseekableTests = [ +@@ -357,9 +357,9 @@ var gUnseekableTests = [ { name:"bogus.duh", type:"bogus/duh"} ]; // Unfortunately big-buck-bunny-unseekable.mp4 is doesn't play on Windows 7, so Modified: trunk/www/linux-tor-browser/Makefile ============================================================================== --- trunk/www/linux-tor-browser/Makefile Sun Feb 9 12:00:12 2014 (r1487) +++ trunk/www/linux-tor-browser/Makefile Tue Feb 11 03:15:48 2014 (r1488) @@ -2,9 +2,8 @@ PORTNAME= tor-browser DISTVERSIONPREFIX=linux32- -DISTVERSION= 3.5.1 +DISTVERSION= 3.5.2 DISTVERSIONSUFFIX=_${LOCALE} -PORTREVISION= 1 CATEGORIES= www security linux MASTER_SITES= https://people.torproject.org/~mikeperry/builds/${DISTVERSION}/ \ TOR/torbrowser/${DISTVERSION:S/-//g} Modified: trunk/www/linux-tor-browser/distinfo ============================================================================== --- trunk/www/linux-tor-browser/distinfo Sun Feb 9 12:00:12 2014 (r1487) +++ trunk/www/linux-tor-browser/distinfo Tue Feb 11 03:15:48 2014 (r1488) @@ -1,28 +1,28 @@ -SHA256 (tor-browser-linux32-3.5.1_ar.tar.xz) = dd0c4e2fea6761222389c91e106668418ba8960d61070fcd3548b51a26647d60 -SIZE (tor-browser-linux32-3.5.1_ar.tar.xz) = 25152188 -SHA256 (tor-browser-linux32-3.5.1_de.tar.xz) = 3108ab44d325fab9c5e0f1a591dc5b02a7888ae57d0d02798562bb9892b067fa -SIZE (tor-browser-linux32-3.5.1_de.tar.xz) = 25115972 -SHA256 (tor-browser-linux32-3.5.1_en-US.tar.xz) = 4ac69c5f6cc2c6fb967f0aa00f6c9051c4caccde7fb4a6d9bc6baa67c203bcbc -SIZE (tor-browser-linux32-3.5.1_en-US.tar.xz) = 24847332 -SHA256 (tor-browser-linux32-3.5.1_es-ES.tar.xz) = baea4410f7238b511a974038ae3d0c8479a364715ee1f88b9f0152b32c0febbf -SIZE (tor-browser-linux32-3.5.1_es-ES.tar.xz) = 25069372 -SHA256 (tor-browser-linux32-3.5.1_fa.tar.xz) = b71d26cb63caf3c5171e48ba40cba1061e98fb6961160ae4bc5d7277b938e589 -SIZE (tor-browser-linux32-3.5.1_fa.tar.xz) = 25165744 -SHA256 (tor-browser-linux32-3.5.1_fr.tar.xz) = 34c19621b2d2866f36bc51b20e0d39d657f7f6a5b317db13260958b8f88facc7 -SIZE (tor-browser-linux32-3.5.1_fr.tar.xz) = 25131824 -SHA256 (tor-browser-linux32-3.5.1_it.tar.xz) = f1a5abf9ee6cfcdbc4a4dee36f08a70973585e0bb099500292a29d276328d857 -SIZE (tor-browser-linux32-3.5.1_it.tar.xz) = 25058672 -SHA256 (tor-browser-linux32-3.5.1_ko.tar.xz) = 4f0aed2a3855a355c851fba0f01b96895be86dc1f939381fdb71e1858ab18c39 -SIZE (tor-browser-linux32-3.5.1_ko.tar.xz) = 25139976 -SHA256 (tor-browser-linux32-3.5.1_nl.tar.xz) = 0fb77d027ba79885d1fd02cf42174f1d4e3809d36892f25781b1e7518deab69c -SIZE (tor-browser-linux32-3.5.1_nl.tar.xz) = 25124696 -SHA256 (tor-browser-linux32-3.5.1_pl.tar.xz) = a01beae711f3870b862158e6dad12b702dcc622547835b1c468686b402d14eb7 -SIZE (tor-browser-linux32-3.5.1_pl.tar.xz) = 25136472 -SHA256 (tor-browser-linux32-3.5.1_pt-PT.tar.xz) = ac8110034a8b4a30559d0bf16cb4932fb0ae2555177df3cdaa5abb9db9367ff9 -SIZE (tor-browser-linux32-3.5.1_pt-PT.tar.xz) = 25124624 -SHA256 (tor-browser-linux32-3.5.1_ru.tar.xz) = d3e79e617de4eeb8dbd3ddab74abb4a216bb99b2f7ce72531203d42d9aedf2a8 -SIZE (tor-browser-linux32-3.5.1_ru.tar.xz) = 25117416 -SHA256 (tor-browser-linux32-3.5.1_vi.tar.xz) = e4c88b89b233bfae60421f1de2c35d429e17441c41b62b2f24d254dff19e901c -SIZE (tor-browser-linux32-3.5.1_vi.tar.xz) = 25154132 -SHA256 (tor-browser-linux32-3.5.1_zh-CN.tar.xz) = 93ce617073721c3343f6d7a31eaaa06bc8f9843f75749922616a88a4c47038db -SIZE (tor-browser-linux32-3.5.1_zh-CN.tar.xz) = 25149556 +SHA256 (tor-browser-linux32-3.5.2_ar.tar.xz) = 1542b21ddd6aebe416e8db1f1bf7b8dd1ccb216e3cb72b1d7f455e2530686f46 +SIZE (tor-browser-linux32-3.5.2_ar.tar.xz) = 25178808 +SHA256 (tor-browser-linux32-3.5.2_de.tar.xz) = 75cabe96eeafdc73c8ea603557c7de0f34a358107b435030c7f4ddc951cba6ec +SIZE (tor-browser-linux32-3.5.2_de.tar.xz) = 25137660 +SHA256 (tor-browser-linux32-3.5.2_en-US.tar.xz) = 7f693b684a44419572988d7d61a234ea56ce9f42577f5023a36414e17325d434 +SIZE (tor-browser-linux32-3.5.2_en-US.tar.xz) = 24871532 +SHA256 (tor-browser-linux32-3.5.2_es-ES.tar.xz) = 5a5bea6ab58f83c3a276fa6593ba405a5ae3bf20af706ade31dc3b5aec9dab4f +SIZE (tor-browser-linux32-3.5.2_es-ES.tar.xz) = 25092264 +SHA256 (tor-browser-linux32-3.5.2_fa.tar.xz) = 126f9834b1e6a72e5beb787ced05f1dbedd41d66c5aefa207f9a996050549aeb +SIZE (tor-browser-linux32-3.5.2_fa.tar.xz) = 25188072 +SHA256 (tor-browser-linux32-3.5.2_fr.tar.xz) = fc9154fe846ad4e5ccd025261a76178e3d1f2c5c3d3eec1c76150cc962b32d5d +SIZE (tor-browser-linux32-3.5.2_fr.tar.xz) = 25162000 +SHA256 (tor-browser-linux32-3.5.2_it.tar.xz) = 2c188f448d1c6186fc14822bb43e2316946c33d6159ad8b87cdc175ccf63a849 +SIZE (tor-browser-linux32-3.5.2_it.tar.xz) = 25086336 +SHA256 (tor-browser-linux32-3.5.2_ko.tar.xz) = 499de5bfc3b490726c8cb21d4f89c593341862ebeaf1ad8985ea085485103b32 +SIZE (tor-browser-linux32-3.5.2_ko.tar.xz) = 25166952 +SHA256 (tor-browser-linux32-3.5.2_nl.tar.xz) = 0ed16dea6aa89855135f50848b34d6054ebc1b2ad5102ab578c7100233f7c394 +SIZE (tor-browser-linux32-3.5.2_nl.tar.xz) = 25150156 +SHA256 (tor-browser-linux32-3.5.2_pl.tar.xz) = 4f37528ea78d293e38456d75a06b38b1dc451abeb3e21d6cabdd1f26677b3666 +SIZE (tor-browser-linux32-3.5.2_pl.tar.xz) = 25155924 +SHA256 (tor-browser-linux32-3.5.2_pt-PT.tar.xz) = 862525b4831c1af2c463a99c003317dcfd40ff0d17d097147df3bce763e4ec11 +SIZE (tor-browser-linux32-3.5.2_pt-PT.tar.xz) = 25146276 +SHA256 (tor-browser-linux32-3.5.2_ru.tar.xz) = 42b37b4a52f12ea22fb9e0d89355738b13eeadaede0a3a5858a0bc42d79369a5 +SIZE (tor-browser-linux32-3.5.2_ru.tar.xz) = 25146072 +SHA256 (tor-browser-linux32-3.5.2_vi.tar.xz) = d2dbc6e2b33fdd4297c87184547eb4e44f3d86752bf72d329498d872b606d9a6 +SIZE (tor-browser-linux32-3.5.2_vi.tar.xz) = 25175952 +SHA256 (tor-browser-linux32-3.5.2_zh-CN.tar.xz) = 74237de6e794d2fbaa5a0daaf886e7d97e8d533a3c722a948b3122e34cf766db +SIZE (tor-browser-linux32-3.5.2_zh-CN.tar.xz) = 25171548 Modified: trunk/www/seamonkey/Makefile ============================================================================== --- trunk/www/seamonkey/Makefile Sun Feb 9 12:00:12 2014 (r1487) +++ trunk/www/seamonkey/Makefile Tue Feb 11 03:15:48 2014 (r1488) @@ -22,7 +22,7 @@ LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l -EM_VERSION= 1.6 +EM_VERSION= 1.6.1_pre20140112 L_VERSION= 2.9b1 SSP_UNSAFE= yes @@ -92,12 +92,13 @@ MOZ_OPTIONS+= --enable-ldap --enable-mailnews .endif .if ${PORT_OPTIONS:MENIGMAIL} -MASTER_SITES+= https://www.enigmail.net/download/source/:enigmail +#MASTER_SITES+= https://www.enigmail.net/download/source/:enigmail +MASTER_SITES+= https://dev.gentoo.org/~polynomial-c/mozilla/:enigmail DISTFILES+= ${EM_DISTFILE}:enigmail RUN_DEPENDS+= gpg:${PORTSDIR}/security/gnupg EM_DISTNAME= enigmail-${EM_VERSION} -EM_DISTFILE= ${EM_DISTNAME}.tar.gz -EM_XPI_FILE= ${MOZ_OBJDIR}/mozilla/dist/bin/${EM_DISTNAME}-${OPSYS:L}-${ARCH:S/amd64/x86_64/}.xpi +EM_DISTFILE= ${EM_DISTNAME}.tar.xz +EM_XPI_FILE= ${WRKSRC}/mailnews/extensions/enigmail/build/${EM_DISTNAME}-${OPSYS:L}-${ARCH:S/amd64/x86_64/}-${CC:T}.xpi EM_ORIG_ID= {847b3a00-7ab1-11d4-8f02-006008948af5} EM_ID= ${PORTNAME}@mozilla-enigmail.org EM_ID_RFILES= ${XPI_LIBDIR}/${EM_ID}/install.rdf \ @@ -139,10 +140,11 @@ ${WRKDIR}/${MOZILLA}.desktop .if ${PORT_OPTIONS:MMAILNEWS} && ${PORT_OPTIONS:MENIGMAIL} @${REINPLACE_CMD} -e 's,/usr/bin/perl,${PERL},' \ - ${WRKSRC}/mailnews/extensions/enigmail/makemake + ${WRKSRC}/mailnews/extensions/enigmail/util/fixlang.pl \ + ${WRKSRC}/mailnews/extensions/enigmail/util/make-lang-xpi.pl @${REINPLACE_CMD} -e '/^xpi/s/$$/ all/' \ -e '/^XPI_MODULE_VERS/s/= .*/= ${EM_VERSION}/' \ - ${WRKSRC}/mailnews/extensions/enigmail/Makefile.in + ${WRKSRC}/mailnews/extensions/enigmail/Makefile @${REINPLACE_CMD} -e '/em:version/s,>[^<]*<,>${EM_VERSION}<,' \ -e '/em:maxVersion/s/pre//' \ ${WRKSRC}/mailnews/extensions/enigmail/package/install.rdf @@ -153,12 +155,14 @@ (cd ${MOZSRC} && ${AUTOCONF}) (cd ${MOZSRC}/js/src/ && ${AUTOCONF}) +post-configure: + cd ${WRKSRC}/mailnews/extensions/enigmail/ && \ + ${SETENV} ${MAKE_ENV} ./configure + .if ${PORT_OPTIONS:MMAILNEWS} && ${PORT_OPTIONS:MENIGMAIL} post-build: - cd ${WRKSRC}/mailnews/extensions/enigmail && \ - ./makemake -r -o ${MOZ_OBJDIR} ${SETENV} ${MAKE_ENV} ${GMAKE} -j${MAKE_JOBS_NUMBER} all xpi \ - -C ${MOZ_OBJDIR}/mailnews/extensions/enigmail + -C ${WRKSRC}/mailnews/extensions/enigmail .endif port-pre-install: Modified: trunk/www/seamonkey/distinfo ============================================================================== --- trunk/www/seamonkey/distinfo Sun Feb 9 12:00:12 2014 (r1487) +++ trunk/www/seamonkey/distinfo Tue Feb 11 03:15:48 2014 (r1488) @@ -1,4 +1,4 @@ SHA256 (seamonkey-2.24.source.tar.bz2) = 63855265b4754dd056af8d611b50219577a592466cdf1d3865028d86ed680474 SIZE (seamonkey-2.24.source.tar.bz2) = 149845514 -SHA256 (enigmail-1.6.tar.gz) = 10d5eb7ba364b9b6e6275aae8bba1d0e4321ed7d55a715337d566ccf2a56ea4d -SIZE (enigmail-1.6.tar.gz) = 1231111 +SHA256 (enigmail-1.6.1_pre20140112.tar.xz) = 2d89a9186c3ccfc9397c933c6f63c0518224fea0096d7a292dba3765de088149 +SIZE (enigmail-1.6.1_pre20140112.tar.xz) = 916028 Added: trunk/www/seamonkey/files/patch-mailnews-extensions-enigmail-config-getOsTarget.pl ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/seamonkey/files/patch-mailnews-extensions-enigmail-config-getOsTarget.pl Tue Feb 11 03:15:48 2014 (r1488) @@ -0,0 +1,43 @@ +commit 49a1daf +Author: Patrick Brunschwig <patrick@enigmail.net> +Date: Tue Jan 28 18:10:54 2014 +0100 + + fixed detection of compiler type for better supporting cross-compilers +--- + config/getOsTarget.pl | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git config/getOsTarget.pl config/getOsTarget.pl +index 91285cd..cf4a233 100755 +--- mailnews/extensions/enigmail/config/getOsTarget.pl ++++ mailnews/extensions/enigmail/config/getOsTarget.pl +@@ -9,13 +9,15 @@ + # -c : CPU and compiler type + # -o : OS type + ++use File::Basename; ++ + if ($#ARGV != 3) { + exit (1); + } + + my $srcOs = $ARGV[1]; + my $srcCpu = $ARGV[2]; +-my $srcComp = $ARGV[3]; ++my $srcComp = basename($ARGV[3]); + + my $targetOs = ""; + my $targetCpu = ""; +@@ -95,10 +97,10 @@ else { + if ($targetOs eq "WINNT") { + $targetComp = "msvc"; + } +-if ($srcComp =~ /^gcc/) { ++elsif ($srcComp =~ /gcc/) { + $targetComp = "gcc3"; + } +-elsif ($srcComp =~ /^cc/) { ++elsif ($srcComp =~ /cc/) { + if ($targetOs eq "SunOS") { + $targetComp = "sunc"; + }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402110315.s1B3FnhU054626>