deinterlace-checkins Mailing List for DScaler Deinterlacer/Scaler (Page 2)
Brought to you by:
adcockj,
dschmelzer
You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(31) |
Nov
(41) |
Dec
(15) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(138) |
Feb
(55) |
Mar
(130) |
Apr
(104) |
May
(194) |
Jun
(161) |
Jul
(169) |
Aug
(247) |
Sep
(126) |
Oct
(71) |
Nov
(196) |
Dec
(122) |
2002 |
Jan
(96) |
Feb
(195) |
Mar
(86) |
Apr
(71) |
May
(97) |
Jun
(155) |
Jul
(112) |
Aug
(213) |
Sep
(217) |
Oct
(362) |
Nov
(146) |
Dec
(80) |
2003 |
Jan
(242) |
Feb
(98) |
Mar
(79) |
Apr
(56) |
May
(93) |
Jun
(48) |
Jul
(52) |
Aug
(87) |
Sep
(52) |
Oct
(33) |
Nov
(22) |
Dec
(10) |
2004 |
Jan
(16) |
Feb
(146) |
Mar
(61) |
Apr
(121) |
May
(25) |
Jun
(12) |
Jul
(75) |
Aug
(68) |
Sep
(36) |
Oct
(61) |
Nov
(129) |
Dec
(89) |
2005 |
Jan
(14) |
Feb
(33) |
Mar
(139) |
Apr
(31) |
May
(7) |
Jun
(3) |
Jul
(91) |
Aug
(18) |
Sep
(15) |
Oct
(60) |
Nov
(16) |
Dec
(8) |
2006 |
Jan
(2) |
Feb
(12) |
Mar
(23) |
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(18) |
Oct
(89) |
Nov
(2) |
Dec
(124) |
2007 |
Jan
(147) |
Feb
(55) |
Mar
(4) |
Apr
(1) |
May
|
Jun
(9) |
Jul
(5) |
Aug
(3) |
Sep
(48) |
Oct
(6) |
Nov
(29) |
Dec
(23) |
2008 |
Jan
(14) |
Feb
(34) |
Mar
(68) |
Apr
(2) |
May
|
Jun
(1) |
Jul
(7) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
|
Feb
(1) |
Mar
(35) |
Apr
(24) |
May
(26) |
Jun
(29) |
Jul
(54) |
Aug
(40) |
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
(5) |
Apr
(15) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2012 |
Jan
(9) |
Feb
(9) |
Mar
(5) |
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2019 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ad...@us...> - 2012-01-31 21:03:08
|
Revision: 4765 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4765&view=rev Author: adcockj Date: 2012-01-31 21:02:59 +0000 (Tue, 31 Jan 2012) Log Message: ----------- Change the project website Modified Paths: -------------- trunk/DScaler/DScaler/DScaler.cpp trunk/DScaler/DScaler/Dialogs.cpp trunk/DScaler/DScalerRes/DScalerRes.rc Modified: trunk/DScaler/DScaler/DScaler.cpp =================================================================== --- trunk/DScaler/DScaler/DScaler.cpp 2012-01-31 21:02:24 UTC (rev 4764) +++ trunk/DScaler/DScaler/DScaler.cpp 2012-01-31 21:02:59 UTC (rev 4765) @@ -3053,7 +3053,7 @@ break; case IDM_HELP_HOMEPAGE: - ShellExecute(hWnd, _T("open"), _T("http://www.dscaler.org/"), NULL, NULL, SW_SHOWNORMAL); + ShellExecute(hWnd, _T("open"), _T("http://www.dscalerproject.net/"), NULL, NULL, SW_SHOWNORMAL); break; case IDM_HELP_FAQ: Modified: trunk/DScaler/DScaler/Dialogs.cpp =================================================================== --- trunk/DScaler/DScaler/Dialogs.cpp 2012-01-31 21:02:24 UTC (rev 4764) +++ trunk/DScaler/DScaler/Dialogs.cpp 2012-01-31 21:02:59 UTC (rev 4765) @@ -61,7 +61,7 @@ EndDialog(hDlg, TRUE); break; case IDC_LINK: - ShellExecute(hDlg, _T("open"), _T("http://www.dscaler.org/"), NULL, NULL, SW_SHOWNORMAL); + ShellExecute(hDlg, _T("open"), _T("http://www.dscalerproject.net/"), NULL, NULL, SW_SHOWNORMAL); break; default: break; Modified: trunk/DScaler/DScalerRes/DScalerRes.rc =================================================================== --- trunk/DScaler/DScalerRes/DScalerRes.rc 2012-01-31 21:02:24 UTC (rev 4764) +++ trunk/DScaler/DScalerRes/DScalerRes.rc 2012-01-31 21:02:59 UTC (rev 4765) @@ -464,7 +464,7 @@ CTEXT "DScaler Version 4.x",IDC_VERSION,0,3,277,9 CTEXT "Copyright \xA9 2000-2010 John Adcock",IDC_STATIC,0,27,277,10 GROUPBOX "License Information",IDC_STATIC,0,39,277,82 - CTEXT "http://www.dscaler.org",IDC_LINK,0,15,277,9,SS_NOTIFY | SS_SUNKEN + CTEXT "http://www.dscalerproject.net",IDC_LINK,0,15,277,9,SS_NOTIFY | SS_SUNKEN LTEXT "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.",IDC_STATIC,3,51,273,26 LTEXT "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.",IDC_STATIC,3,78,274,35 END This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2012-01-31 21:02:30
|
Revision: 4764 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4764&view=rev Author: adcockj Date: 2012-01-31 21:02:24 +0000 (Tue, 31 Jan 2012) Log Message: ----------- Add some extra black patterns Modified Paths: -------------- trunk/DScaler/Release/patterns/pj_calibr.d3u Added Paths: ----------- trunk/DScaler/Release/patterns/blacks.pat trunk/DScaler/Release/patterns/blacks2.pat Added: trunk/DScaler/Release/patterns/blacks.pat =================================================================== --- trunk/DScaler/Release/patterns/blacks.pat (rev 0) +++ trunk/DScaler/Release/patterns/blacks.pat 2012-01-31 21:02:24 UTC (rev 4764) @@ -0,0 +1,17 @@ + +PAT From black to white + +RECT 0 1000 0 3333 YUV 0 128 128 FILLED +RECT 1000 2000 0 3333 YUV 1 128 128 FILLED +RECT 2000 3000 0 3333 YUV 2 128 128 FILLED +RECT 3000 4000 0 3333 YUV 3 128 128 FILLED +RECT 4000 5000 0 3333 YUV 4 128 128 FILLED +RECT 5000 6000 0 3333 YUV 14 128 128 FILLED +RECT 6000 7000 0 3333 YUV 15 128 128 FILLED +RECT 7000 8000 0 3333 YUV 16 128 128 FILLED +RECT 8000 9000 0 3333 YUV 17 128 128 FILLED +RECT 9000 10000 0 3333 YUV 18 128 128 FILLED + +RECT 0 10000 3333 6666 YUV 128 128 128 GRADH 16 226 + +RECT 0 10000 6666 10000 YUV 128 128 128 GRADH 0 255 Added: trunk/DScaler/Release/patterns/blacks2.pat =================================================================== --- trunk/DScaler/Release/patterns/blacks2.pat (rev 0) +++ trunk/DScaler/Release/patterns/blacks2.pat 2012-01-31 21:02:24 UTC (rev 4764) @@ -0,0 +1,13 @@ + +PAT From black to white + +RECT 0 1000 0 10000 YUV 0 128 128 FILLED +RECT 1000 2000 0 10000 YUV 1 128 128 FILLED +RECT 2000 3000 0 10000 YUV 2 128 128 FILLED +RECT 3000 4000 0 10000 YUV 3 128 128 FILLED +RECT 4000 5000 0 10000 YUV 4 128 128 FILLED +RECT 5000 6000 0 10000 YUV 14 128 128 FILLED +RECT 6000 7000 0 10000 YUV 15 128 128 FILLED +RECT 7000 8000 0 10000 YUV 16 128 128 FILLED +RECT 8000 9000 0 10000 YUV 17 128 128 FILLED +RECT 9000 10000 0 10000 YUV 18 128 128 FILLED Modified: trunk/DScaler/Release/patterns/pj_calibr.d3u =================================================================== --- trunk/DScaler/Release/patterns/pj_calibr.d3u 2012-01-31 21:01:01 UTC (rev 4763) +++ trunk/DScaler/Release/patterns/pj_calibr.d3u 2012-01-31 21:02:24 UTC (rev 4764) @@ -11,4 +11,6 @@ white.pat black.pat gamma.pat -scaling.pat \ No newline at end of file +scaling.pat +blacks.pat +blacks2.pat \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2012-01-31 21:01:12
|
Revision: 4763 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4763&view=rev Author: adcockj Date: 2012-01-31 21:01:01 +0000 (Tue, 31 Jan 2012) Log Message: ----------- Turn off warnings as errors as latest ddk has deprecated a load of functions Modified Paths: -------------- trunk/DScaler/Driver/DSDrvNT/sources Modified: trunk/DScaler/Driver/DSDrvNT/sources =================================================================== --- trunk/DScaler/Driver/DSDrvNT/sources 2012-01-31 20:59:51 UTC (rev 4762) +++ trunk/DScaler/Driver/DSDrvNT/sources 2012-01-31 21:01:01 UTC (rev 4763) @@ -1,36 +1,36 @@ -TARGETPATH=obj -TARGETTYPE=DRIVER -!if "$(_BUILDARCH)" == "AMD64" -TARGETNAME=..\..\..\..\Release\DSDrv4AMD64 -!elseif "$(_BUILDARCH)" == "IA64" -TARGETNAME=..\..\..\..\Release\DSDrv4IA64 -!else -TARGETNAME=..\..\..\..\Release\DSDrv4 -!endif - -INCLUDES=..\..\Api -LINKER_FLAGS=-MAP -DRIVERBASE=0x90010000 - -#MSC_OPTIMIZATION=/Od -#NTDEBUG=ntsd -#NTDEBUGTYPE=windbg -#DEBUG_CRTS=1 - -MSC_WARNING_LEVEL=/W3 /WX /Wp64 -C_DEFINES=$(C_DEFINES) -D_NTKERNEL_ - -#MSC_STDCALL=1 - -SOURCES=\ - pcienum.cpp \ - debugout.cpp \ - DSDrvNT.cpp \ - ioclass.cpp \ - drvalloc.cpp \ - DSDrvNT.rc - -PRECOMPILED_CXX=1 -PRECOMPILED_INCLUDE=precomp.h -PRECOMPILED_PCH=precomp.pch -PRECOMPILED_OBJ=precomp.obj +TARGETPATH=obj +TARGETTYPE=DRIVER +!if "$(_BUILDARCH)" == "AMD64" +TARGETNAME=..\..\..\..\Release\DSDrv4AMD64 +!elseif "$(_BUILDARCH)" == "IA64" +TARGETNAME=..\..\..\..\Release\DSDrv4IA64 +!else +TARGETNAME=..\..\..\..\Release\DSDrv4 +!endif + +INCLUDES=..\..\Api +LINKER_FLAGS=-MAP +DRIVERBASE=0x90010000 + +#MSC_OPTIMIZATION=/Od +#NTDEBUG=ntsd +#NTDEBUGTYPE=windbg +#DEBUG_CRTS=1 + +MSC_WARNING_LEVEL=/W3 /Wp64 +C_DEFINES=$(C_DEFINES) -D_NTKERNEL_ + +#MSC_STDCALL=1 + +SOURCES=\ + pcienum.cpp \ + debugout.cpp \ + DSDrvNT.cpp \ + ioclass.cpp \ + drvalloc.cpp \ + DSDrvNT.rc + +PRECOMPILED_CXX=1 +PRECOMPILED_INCLUDE=precomp.h +PRECOMPILED_PCH=precomp.pch +PRECOMPILED_OBJ=precomp.obj This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2012-01-31 20:59:58
|
Revision: 4762 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4762&view=rev Author: adcockj Date: 2012-01-31 20:59:51 +0000 (Tue, 31 Jan 2012) Log Message: ----------- Add extra function for allocating memory below 4Gb to avoid falling back to contig memory Modified Paths: -------------- trunk/DScaler/Api/DSDrv.H trunk/DScaler/Driver/DSDrvNT/Ioclass.cpp trunk/DScaler/Driver/DSDrvNT/Ioclass.h trunk/DScaler/Release/DSDrv4AMD64.sys Modified: trunk/DScaler/Api/DSDrv.H =================================================================== --- trunk/DScaler/Api/DSDrv.H 2011-11-22 19:44:37 UTC (rev 4761) +++ trunk/DScaler/Api/DSDrv.H 2012-01-31 20:59:51 UTC (rev 4762) @@ -58,6 +58,9 @@ // allocate a continous block of memory #define ALLOC_MEMORY_CONTIG 1 +// allocates a block of memory inside the driver +// requesting it under 4Gb boundary +#define ALLOC_MEMORY_IN_DRIVER_LESS4GB 2 typedef struct { Modified: trunk/DScaler/Driver/DSDrvNT/Ioclass.cpp =================================================================== --- trunk/DScaler/Driver/DSDrvNT/Ioclass.cpp 2011-11-22 19:44:37 UTC (rev 4761) +++ trunk/DScaler/Driver/DSDrvNT/Ioclass.cpp 2012-01-31 20:59:51 UTC (rev 4762) @@ -720,6 +720,7 @@ PMemoryNode node; DWORD dwIndex; PPageStruct pPages = (PPageStruct)(pMemStruct + 1); + bool retryNextMode = false; // Initialize the MemStruct pMemStruct->dwFlags = dwFlags; @@ -728,19 +729,6 @@ pMemStruct->dwTotalSize = 0; pMemStruct->dwUser = pUserAddress; - // don't return memory above 4GB unless the app wants it. - // it seems the only way to ensure that is via MmAllocateContiguousMemory(). - // FIXME: determine highest physical address and use for decision -#ifdef _WIN64 - if (!above4G) -#else - if (!above4G && m_PAEEnabled) -#endif - { - dwFlags |= ALLOC_MEMORY_CONTIG; - debugOut(dbTrace, "allocMemory set contig b/c of 4gb limit"); - } - // // First alloc our own free memory descriptor // @@ -750,7 +738,7 @@ { node = &memoryList[ dwIndex ]; - if ( ! node->pSystemAddress ) + if (!node->pSystemAddress ) { node->pSystemAddress = (PVOID)1; // mark as used break; @@ -763,6 +751,57 @@ return STATUS_INSUFFICIENT_RESOURCES; } + node->dwFlags = pMemStruct->dwFlags; + +#ifdef _WIN64 + if (!above4G) +#else + if (!above4G && m_PAEEnabled) +#endif + { + retryNextMode = true; + } + + if(dwFlags & ALLOC_MEMORY_CONTIG) + { + ntStatus = allocMemoryContig(ulLength, node, pMemStruct, above4G); + } + else if(dwFlags & ALLOC_MEMORY_IN_DRIVER_LESS4GB) + { + ntStatus = allocMemoryBelow4GB(ulLength, node, pMemStruct); + if(ntStatus != STATUS_SUCCESS && retryNextMode) + { + pMemStruct->dwFlags = pMemStruct->dwFlags = ALLOC_MEMORY_CONTIG; + ntStatus = allocMemoryContig(ulLength, node, pMemStruct, above4G); + } + } + else + { + ntStatus = allocMemoryUserSupplied(ulLength, node, pUserAddress, pMemStruct, above4G); + if(ntStatus != STATUS_SUCCESS && retryNextMode) + { + node->dwFlags = pMemStruct->dwFlags = ALLOC_MEMORY_IN_DRIVER_LESS4GB; + ntStatus = allocMemoryBelow4GB(ulLength, node, pMemStruct); + if(ntStatus != STATUS_SUCCESS) + { + node->dwFlags = pMemStruct->dwFlags = ALLOC_MEMORY_CONTIG; + ntStatus = allocMemoryContig(ulLength, node, pMemStruct, above4G); + } + } + } + + if(ntStatus != STATUS_SUCCESS) + { + node->pSystemAddress = NULL; + } + return ntStatus; +} + +NTSTATUS CIOAccessDevice::allocMemoryUserSupplied(ULONG ulLength, PMemoryNode node, PVOID pUserAddress, PMemStruct pMemStruct, bool above4G) +{ + NTSTATUS ntStatus; + PPageStruct pPages = (PPageStruct)(pMemStruct + 1); + ntStatus = STATUS_SUCCESS; PHYSICAL_ADDRESS highestAcceptableAddress; @@ -780,18 +819,6 @@ highestAcceptableAddress.HighPart = -1; } - if (dwFlags & ALLOC_MEMORY_CONTIG) - { - debugOut(dbTrace, "allocating contigous memory"); - node->pSystemAddress = MmAllocateContiguousMemory(ulLength, highestAcceptableAddress); - if (!node->pSystemAddress) - { - debugOut(dbTrace,"! cannot alloc ContiguousMemory"); - return STATUS_INSUFFICIENT_RESOURCES; - } - pUserAddress = node->pSystemAddress; - } - debugOut(dbTrace,"alloc %lu bytes of system memory 0x%IX", ulLength, pUserAddress); // @@ -800,91 +827,199 @@ node->pMdl = IoAllocateMdl(pUserAddress, ulLength, FALSE, FALSE, NULL); if (!node->pMdl) { - if(dwFlags & ALLOC_MEMORY_CONTIG) - { - MmFreeContiguousMemory(node->pSystemAddress); - } - node->pSystemAddress = NULL; debugOut(dbError, " ! cannot alloc MDL"); return STATUS_INSUFFICIENT_RESOURCES; } + + debugOut(dbTrace,"node->pMdl 0x%IX", node->pMdl); + // + // Map locked pages into process's user address space + // + __try + { + MmProbeAndLockPages(node->pMdl, KernelMode, IoModifyAccess); + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + debugOut(dbError, " ! ProbeAndLock failed: user=0x%IX", node->pUserAddress); + IoFreeMdl(node->pMdl); + return STATUS_INSUFFICIENT_RESOURCES; + } + debugOut(dbTrace,"Locked"); + + // OK so we've got some memory and we can fill + // in the return structure + + pMemStruct->dwTotalSize = ulLength; + pMemStruct->dwHandle = PtrToUlong(node); + node->pUserAddress = pUserAddress; + + if ( above4G ) + ntStatus = buildPageStruct64(pMemStruct, node); else + ntStatus = buildPageStruct32(pMemStruct, node); + + if (ntStatus != STATUS_SUCCESS) { - debugOut(dbTrace,"node->pMdl 0x%IX", node->pMdl); - // - // Map locked pages into process's user address space - // - if (dwFlags & ALLOC_MEMORY_CONTIG) - MmBuildMdlForNonPagedPool(node->pMdl); - else - { - __try { - MmProbeAndLockPages(node->pMdl, KernelMode, IoModifyAccess); - } __except (EXCEPTION_EXECUTE_HANDLER) { - debugOut(dbError, " ! ProbeAndLock failed: user=0x%IX", node->pUserAddress); - IoFreeMdl(node->pMdl); - node->pSystemAddress = NULL; - return STATUS_INSUFFICIENT_RESOURCES; - } - debugOut(dbTrace,"Locked"); - } + debugOut(dbError, "allocMemory: something went wrong, aborting!"); + freeMemory(node); + } + else + { + debugOut(dbTrace,"node->dwUserAddress 0x%IX", node->pUserAddress); + debugOut(dbTrace,"Pages %d", (node->pMdl->Size - sizeof(MDL))/4); + } + return ntStatus; +} - // OK so we've got some memory and we can fill - // in the return structure +NTSTATUS CIOAccessDevice::allocMemoryBelow4GB(ULONG ulLength, PMemoryNode node, PMemStruct pMemStruct) +{ + NTSTATUS ntStatus; - // need to store this so we know to deallocate - // any contig memory - node->dwFlags = dwFlags; + ntStatus = STATUS_SUCCESS; - pMemStruct->dwTotalSize = ulLength; - pMemStruct->dwHandle = PtrToUlong(node); - if(dwFlags & ALLOC_MEMORY_CONTIG) - { - __try { - node->pUserAddress = MmMapLockedPages(node->pMdl, UserMode); - } __except (EXCEPTION_EXECUTE_HANDLER) { - MmFreeContiguousMemory(node->pSystemAddress); - IoFreeMdl(node->pMdl); - debugOut(dbError, "MmMapLockedPages caused an exception (user=0x%IX)", node->pUserAddress); - node->pSystemAddress = NULL; - return STATUS_INSUFFICIENT_RESOURCES; - } - } - else - { - node->pUserAddress = pUserAddress; - } + PHYSICAL_ADDRESS highestAcceptableAddress; + PHYSICAL_ADDRESS zero; - if ( above4G ) - ntStatus = buildPageStruct64(pMemStruct, node); - else - ntStatus = buildPageStruct32(pMemStruct, node); + // clamp to 4GB + highestAcceptableAddress.LowPart = -1; + highestAcceptableAddress.HighPart = 0; - if (ntStatus != STATUS_SUCCESS) - { - debugOut(dbError, "allocMemory: something went wrong, aborting!"); - freeMemory(node); - } - else - { - debugOut(dbTrace,"node->dwUserAddress 0x%IX", node->pUserAddress); - debugOut(dbTrace,"Pages %d", (node->pMdl->Size - sizeof(MDL))/4); - } + zero.LowPart = 0; + zero.HighPart = 0; + + debugOut(dbTrace,"alloc %lu bytes of system memory", ulLength); + + // + // build the MDL to desribe the memory pages + // + node->pMdl = MmAllocatePagesForMdl(zero, highestAcceptableAddress, zero, ulLength); + if (!node->pMdl) + { + debugOut(dbError, " ! cannot alloc pages for MDL"); + return STATUS_INSUFFICIENT_RESOURCES; } + + debugOut(dbTrace,"node->pMdl 0x%IX", node->pMdl); + node->pUserAddress = MmMapLockedPagesSpecifyCache(node->pMdl, UserMode, MmCached, NULL /* no base address */, + FALSE /* no bug check on failure */, NormalPagePriority); + + + debugOut(dbTrace,"Alloc Results 0x%IX 0x%IX", node->pUserAddress, GetPhysAddr(node->pUserAddress).QuadPart); + // build the MDL to desribe the memory pages + // OK so we've got some memory and we can fill + // in the return structure +// freeMemory(node); +// return STATUS_INSUFFICIENT_RESOURCES; + + pMemStruct->dwTotalSize = ulLength; + pMemStruct->dwHandle = PtrToUlong(node); + + ntStatus = buildPageStruct32(pMemStruct, node); + + if (ntStatus != STATUS_SUCCESS) + { + debugOut(dbError, "allocMemory: something went wrong, aborting!"); + freeMemory(node); + } + else + { + debugOut(dbTrace,"node->dwUserAddress 0x%IX", node->pUserAddress); + debugOut(dbTrace,"Pages %d", (node->pMdl->Size - sizeof(MDL))/4); + } return ntStatus; } +NTSTATUS CIOAccessDevice::allocMemoryContig(ULONG ulLength, PMemoryNode node, PMemStruct pMemStruct, bool above4G) +{ + NTSTATUS ntStatus; + + ntStatus = STATUS_SUCCESS; + + PHYSICAL_ADDRESS highestAcceptableAddress; + + if (!above4G) + { + // clamp to 4GB + highestAcceptableAddress.LowPart = -1; + highestAcceptableAddress.HighPart = 0; + } + else + { + // app doesn't care, use all we can get + highestAcceptableAddress.LowPart = -1; + highestAcceptableAddress.HighPart = -1; + } + + debugOut(dbTrace, "allocating contigous memory"); + node->pSystemAddress = MmAllocateContiguousMemory(ulLength, highestAcceptableAddress); + if (!node->pSystemAddress) + { + debugOut(dbTrace,"! cannot alloc ContiguousMemory"); + return STATUS_INSUFFICIENT_RESOURCES; + } + + debugOut(dbTrace,"alloc %lu bytes of system memory", ulLength); + + // + // build the MDL to desribe the memory pages + // + node->pMdl = IoAllocateMdl(node->pSystemAddress, ulLength, FALSE, FALSE, NULL); + if (!node->pMdl) + { + MmFreeContiguousMemory(node->pSystemAddress); + debugOut(dbError, " ! cannot alloc MDL"); + return STATUS_INSUFFICIENT_RESOURCES; + } + debugOut(dbTrace,"node->pMdl 0x%IX", node->pMdl); + // + // Map locked pages into process's user address space + // + MmBuildMdlForNonPagedPool(node->pMdl); + + // OK so we've got some memory and we can fill + // in the return structure + pMemStruct->dwTotalSize = ulLength; + pMemStruct->dwHandle = PtrToUlong(node); + __try { + node->pUserAddress = MmMapLockedPages(node->pMdl, UserMode); + } __except (EXCEPTION_EXECUTE_HANDLER) { + MmFreeContiguousMemory(node->pSystemAddress); + IoFreeMdl(node->pMdl); + debugOut(dbError, "MmMapLockedPages caused an exception (user=0x%IX)", node->pUserAddress); + return STATUS_INSUFFICIENT_RESOURCES; + } + + if ( above4G ) + ntStatus = buildPageStruct64(pMemStruct, node); + else + ntStatus = buildPageStruct32(pMemStruct, node); + + if (ntStatus != STATUS_SUCCESS) + { + debugOut(dbError, "allocMemory: something went wrong, aborting!"); + freeMemory(node); + } + else + { + debugOut(dbTrace,"node->dwUserAddress 0x%IX", node->pUserAddress); + debugOut(dbTrace,"Pages %d", (node->pMdl->Size - sizeof(MDL))/4); + } + return ntStatus; +} + + //--------------------------------------------------------------------------- // //--------------------------------------------------------------------------- NTSTATUS CIOAccessDevice::buildPageStruct32(PMemStruct pMemStruct, PMemoryNode node) { PPageStruct pPages = (PPageStruct)(pMemStruct + 1); + pMemStruct->dwUser = node->pUserAddress; if (node->dwFlags & ALLOC_MEMORY_CONTIG) { pMemStruct->dwPages = 1; - pMemStruct->dwUser = node->pUserAddress; ULONGLONG phys = GetPhysAddr(node->pUserAddress).QuadPart; if (phys > 0xFFFFFFFFU) { @@ -1007,7 +1142,7 @@ void CIOAccessDevice::freeMemory(PMemoryNode node) { debugOut(dbTrace,"free node"); - if(node->dwFlags & ALLOC_MEMORY_CONTIG) + if(node->dwFlags & ALLOC_MEMORY_CONTIG || node->dwFlags & ALLOC_MEMORY_IN_DRIVER_LESS4GB) { MmUnmapLockedPages(node->pUserAddress, node->pMdl); } @@ -1022,6 +1157,7 @@ { MmFreeContiguousMemory(node->pSystemAddress); } + memset(node, 0, sizeof(MemoryNode)); } Modified: trunk/DScaler/Driver/DSDrvNT/Ioclass.h =================================================================== --- trunk/DScaler/Driver/DSDrvNT/Ioclass.h 2011-11-22 19:44:37 UTC (rev 4761) +++ trunk/DScaler/Driver/DSDrvNT/Ioclass.h 2012-01-31 20:59:51 UTC (rev 4762) @@ -82,6 +82,9 @@ MappingNode mappingList[MAX_FREE_MAPPING_NODES]; protected: + NTSTATUS allocMemoryUserSupplied(ULONG ulLength, PMemoryNode node, PVOID ulUserAddress, PMemStruct pMemStruct, bool above4G); + NTSTATUS allocMemoryBelow4GB(ULONG ulLength, PMemoryNode node, PMemStruct pMemStruct); + NTSTATUS allocMemoryContig(ULONG ulLength, PMemoryNode node, PMemStruct pMemStruct, bool above4G); NTSTATUS pciGetDeviceConfig(PCI_COMMON_CONFIG *pPCIConfig, DWORD Bus, DWORD Slot); NTSTATUS pciSetDeviceConfig(PCI_COMMON_CONFIG *pPCIConfig, DWORD Bus, DWORD Slot); NTSTATUS pciGetDeviceConfigOffset(BYTE *pPCIConfig, DWORD Offset, DWORD Bus, DWORD Slot); Modified: trunk/DScaler/Release/DSDrv4AMD64.sys =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2011-11-22 19:44:43
|
Revision: 4761 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4761&view=rev Author: adcockj Date: 2011-11-22 19:44:37 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Update donation page after recent donations Modified Paths: -------------- trunk/htdocs/donate.htm Modified: trunk/htdocs/donate.htm =================================================================== --- trunk/htdocs/donate.htm 2011-05-10 16:20:05 UTC (rev 4760) +++ trunk/htdocs/donate.htm 2011-11-22 19:44:37 UTC (rev 4761) @@ -96,9 +96,20 @@ <li><a href="#project">Project Sponsorship</a></li> </ul> - <p>Each of these will be discusssed in more detail below.</p><a name= - "time" id="time"></a> + <p>Each of these will be discusssed in more detail below.</p> + <h2>Recent Sponsors</h2> + + <p>The following have kindly contributed to the project:</p> + + <p>Jamie Sarner a <a href="http://jamiesarner.com/">Toronto Realtor</a></p> + <p>Julie Kinnear from <a href="http://juliekinnear.com/">Toronto MLS Listings</a></p> + <p>David Tsegai from <a href="http://calgaryrealestate.ca/">Calgary Real Estate</a></p> + <p>Lorne Marr from <a href="http://lsminsurance.ca/">Life Insurance Canada</a></p> + <p>Jay Banks from <a href="http://jaybanks.ca/">Vancouver Lofts</a></p> + + <a name="time" id="time"></a> + <h2>Time</h2> <p>The DScaler project's successes so far have been built on the many This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2011-05-10 16:20:13
|
Revision: 4760 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4760&view=rev Author: adcockj Date: 2011-05-10 16:20:05 +0000 (Tue, 10 May 2011) Log Message: ----------- Temp build fix Modified Paths: -------------- trunk/DScaler5/ffmpeg/dscaler5build Modified: trunk/DScaler5/ffmpeg/dscaler5build =================================================================== --- trunk/DScaler5/ffmpeg/dscaler5build 2011-05-10 13:41:35 UTC (rev 4759) +++ trunk/DScaler5/ffmpeg/dscaler5build 2011-05-10 16:20:05 UTC (rev 4760) @@ -1,6 +1,7 @@ #!/bin/sh ./configure --extra-cflags="-fno-common -D_WIN32_WINNT=0x0600" --enable-memalign-hack --enable-shared --disable-static --disable-debug --disable-encoders --disable-muxers --disable-devices --enable-gpl make clean +make version.h make mkdir ../Debug mkdir ../Release This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2011-05-10 13:41:42
|
Revision: 4759 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4759&view=rev Author: adcockj Date: 2011-05-10 13:41:35 +0000 (Tue, 10 May 2011) Log Message: ----------- Add winnt flags so that DXVA code compiles Modified Paths: -------------- trunk/DScaler5/ffmpeg/dscaler5build trunk/DScaler5/ffmpeg/dscaler5build64 Modified: trunk/DScaler5/ffmpeg/dscaler5build =================================================================== --- trunk/DScaler5/ffmpeg/dscaler5build 2011-05-10 10:27:57 UTC (rev 4758) +++ trunk/DScaler5/ffmpeg/dscaler5build 2011-05-10 13:41:35 UTC (rev 4759) @@ -1,5 +1,5 @@ #!/bin/sh -./configure --extra-cflags=-fno-common --enable-memalign-hack --enable-shared --disable-static --disable-debug --disable-encoders --disable-muxers --disable-devices --enable-gpl +./configure --extra-cflags="-fno-common -D_WIN32_WINNT=0x0600" --enable-memalign-hack --enable-shared --disable-static --disable-debug --disable-encoders --disable-muxers --disable-devices --enable-gpl make clean make mkdir ../Debug Modified: trunk/DScaler5/ffmpeg/dscaler5build64 =================================================================== --- trunk/DScaler5/ffmpeg/dscaler5build64 2011-05-10 10:27:57 UTC (rev 4758) +++ trunk/DScaler5/ffmpeg/dscaler5build64 2011-05-10 13:41:35 UTC (rev 4759) @@ -1,5 +1,5 @@ #!/bin/sh -./configure --enable-cross-compile --cross-prefix=x86_64-w64-mingw32- --extra-cflags="-D__MINGW32_MAJOR_VERSION=4" --arch=x86_64 --target-os=mingw32 --enable-w32threads --disable-static --enable-shared --disable-debug --disable-network --disable-avisynth --disable-demuxer=vfwcap --disable-encoders --disable-muxers --disable-devices --enable-gpl +./configure --enable-cross-compile --cross-prefix=x86_64-w64-mingw32- --extra-cflags="-D__MINGW32_MAJOR_VERSION=4 -D_WIN32_WINNT=0x0600" --arch=x86_64 --target-os=mingw32 --enable-w32threads --disable-static --enable-shared --disable-debug --disable-network --disable-avisynth --disable-demuxer=vfwcap --disable-encoders --disable-muxers --disable-devices --enable-gpl make clean make mkdir ../Debug64 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2011-05-10 10:28:03
|
Revision: 4758 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4758&view=rev Author: adcockj Date: 2011-05-10 10:27:57 +0000 (Tue, 10 May 2011) Log Message: ----------- Fix build with more recent mingw, needs msys, mingw in path Modified Paths: -------------- trunk/DScaler5/ffmpeg/build32.cmd trunk/DScaler5/ffmpeg/build64.cmd trunk/DScaler5/ffmpeg/dscaler5build64 Modified: trunk/DScaler5/ffmpeg/build32.cmd =================================================================== --- trunk/DScaler5/ffmpeg/build32.cmd 2010-04-29 11:23:34 UTC (rev 4757) +++ trunk/DScaler5/ffmpeg/build32.cmd 2011-05-10 10:27:57 UTC (rev 4758) @@ -7,7 +7,6 @@ goto EOF :_NotX64 rem needs to be set to your location -if "x%MSYSROOT%" == "x" set MSYSROOT=c:\msys\ rem VS6 sets up MSDevDir if not "x%MSDevDir%" == "x" set call "%MSDevDir%\..\..\VC98\bin\vcvars32.bat" rem VS2005 sets up VS80COMNTOOLS @@ -16,6 +15,5 @@ if not "x%VS90COMNTOOLS%" == "x" call "%VS90COMNTOOLS%vsvars32.bat" set MSYSTEM=MINGW32 set DISPLAY= -set PATH=%MSYSROOT%bin\;%MSYSROOT%mingw\bin\;%PATH% sh %~dp0dscaler5build :EOF \ No newline at end of file Modified: trunk/DScaler5/ffmpeg/build64.cmd =================================================================== --- trunk/DScaler5/ffmpeg/build64.cmd 2010-04-29 11:23:34 UTC (rev 4757) +++ trunk/DScaler5/ffmpeg/build64.cmd 2011-05-10 10:27:57 UTC (rev 4758) @@ -6,8 +6,6 @@ %COMSPEC% /c %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 goto EOF :_NotX64 -rem needs to be set to your location -if "x%MSYSROOT%" == "x" set MSYSROOT=c:\msys64\ rem VS6 sets up MSDevDir if not "x%MSDevDir%" == "x" set call "%MSDevDir%\..\..\VC98\bin\vcvars32.bat" rem VS2005 sets up VS80COMNTOOLS @@ -16,6 +14,5 @@ if not "x%VS90COMNTOOLS%" == "x" call "%VS90COMNTOOLS%vsvars32.bat" set MSYSTEM=MINGW32 set DISPLAY= -set PATH=%MSYSROOT%bin\;%MSYSROOT%mingw\bin\;%PATH% sh %~dp0dscaler5build64 :EOF \ No newline at end of file Modified: trunk/DScaler5/ffmpeg/dscaler5build64 =================================================================== --- trunk/DScaler5/ffmpeg/dscaler5build64 2010-04-29 11:23:34 UTC (rev 4757) +++ trunk/DScaler5/ffmpeg/dscaler5build64 2011-05-10 10:27:57 UTC (rev 4758) @@ -1,5 +1,5 @@ #!/bin/sh -./configure --enable-cross-compile --cross-prefix=x86_64-pc-mingw32- --extra-cflags="-D__MINGW32_MAJOR_VERSION=4" --arch=x86_64 --enable-w32threads --disable-static --enable-shared --disable-debug --disable-network --disable-avisynth --disable-demuxer=vfwcap --disable-encoders --disable-muxers --disable-devices --enable-gpl +./configure --enable-cross-compile --cross-prefix=x86_64-w64-mingw32- --extra-cflags="-D__MINGW32_MAJOR_VERSION=4" --arch=x86_64 --target-os=mingw32 --enable-w32threads --disable-static --enable-shared --disable-debug --disable-network --disable-avisynth --disable-demuxer=vfwcap --disable-encoders --disable-muxers --disable-devices --enable-gpl make clean make mkdir ../Debug64 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-29 11:23:40
|
Revision: 4757 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4757&view=rev Author: adcockj Date: 2010-04-29 11:23:34 +0000 (Thu, 29 Apr 2010) Log Message: ----------- Updated to only spit out grabs when a new peak has been found Modified Paths: -------------- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c Modified: trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c =================================================================== --- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-28 13:14:59 UTC (rev 4756) +++ trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-29 11:23:34 UTC (rev 4757) @@ -29,46 +29,61 @@ uint64_t min_histogram[3][256]; char path[1024]; uint8_t peak_so_far[3]; + uint32_t peak_num_frames[3]; } WtwFindContext; static void dumpImage(struct AVFormatContext *s, AVPacket *pkt) { WtwFindContext *img = s->priv_data; - ByteIOContext *pb[3]; + ByteIOContext *pb = 0; char filename[1024]; uint32_t pkt_size; AVCodecContext *codec= s->streams[ pkt->stream_index ]->codec; AVPicture *picture; - AVFrame *frame; - uint8_t* buf; - AVCodec* tiffCodec; - AVCodecContext* context; + AVFrame *frame = 0; + uint8_t* buf = 0; + AVCodec* tiffCodec = 0; + AVCodecContext* context = 0; int sizeUsed; + + picture = (AVPicture *)pkt->data; + pkt_size = codec->height * codec->width * 3; + + buf = av_mallocz(pkt_size * 2); + if(!buf) + { + av_log(s, AV_LOG_ERROR, "Out of memory\n"); + return; + } + if (av_get_frame_filename(filename, sizeof(filename), img->path, img->frame_count) < 0) { av_log(s, AV_LOG_ERROR, "Could not get frame filename from pattern\n"); + goto tidyUp1; return; } - if (url_fopen(&pb[0], filename, URL_WRONLY) < 0) { + if (url_fopen(&pb, filename, URL_WRONLY) < 0) + { av_log(s, AV_LOG_ERROR, "Could not open file : %s\n",filename); - return; + goto tidyUp1; } - picture = (AVPicture *)pkt->data; - pkt_size = codec->height * codec->width * 3; - - buf = av_mallocz(pkt_size * 2); - tiffCodec = avcodec_find_encoder(CODEC_ID_TIFF); if (!tiffCodec) { av_log(s, AV_LOG_ERROR, "Could not find tiff encoder\n"); - return; + goto tidyUp2; } + context = avcodec_alloc_context(); + if (!context) + { + av_log(s, AV_LOG_ERROR, "Out of memory\n"); + goto tidyUp2; + } context->width = codec->width; context->height = codec->height; @@ -77,7 +92,7 @@ if (avcodec_open(context, tiffCodec) < 0) { av_log(s, AV_LOG_ERROR, "Could not open tiff encoder\n"); - av_free(context); + goto tidyUp3; return; } @@ -85,8 +100,7 @@ if(!frame) { av_log(s, AV_LOG_ERROR, "Out of memory\n"); - avcodec_close(context); - av_free(context); + goto tidyUp4; return; } @@ -96,17 +110,23 @@ sizeUsed = avcodec_encode_video(context, buf, pkt_size * 2, frame); if(sizeUsed > 0) { - put_buffer(pb[0], buf, sizeUsed); - put_flush_packet(pb[0]); + put_buffer(pb, buf, sizeUsed); + put_flush_packet(pb); } else { av_log(s, AV_LOG_ERROR, "Tiff encode failed\n"); } - url_fclose(pb[0]); + + av_free(frame); +tidyUp4: avcodec_close(context); +tidyUp3: av_free(context); - av_free(frame); +tidyUp2: + url_fclose(pb); +tidyUp1: + av_free(buf); } @@ -141,6 +161,7 @@ wtw->min_histogram[i][j] = 0; } wtw->peak_so_far[i] = 0; + wtw->peak_num_frames[i] = 0; } if(strncmp(s->filename, "pipe:", 5) != 0) @@ -214,7 +235,7 @@ // look for frames at peaks so far in each colour for(int i = 0; i < 3; ++i) { - if(peak[i] >= wtw->peak_so_far[i]) + if(peak[i] > wtw->peak_so_far[i]) { wtw->peak_so_far[i] = peak[i]; if(peak[i] > 235) @@ -222,6 +243,11 @@ needToDumpImage = 1; } } + if(counthi[i] > wtw->peak_num_frames[i]) + { + wtw->peak_num_frames[i] = counthi[i]; + needToDumpImage = 1; + } } if(needToDumpImage) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-28 13:15:07
|
Revision: 4756 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4756&view=rev Author: adcockj Date: 2010-04-28 13:14:59 +0000 (Wed, 28 Apr 2010) Log Message: ----------- Added ability to save snapshots of peak frames in rgb24 mode Modified Paths: -------------- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c Modified: trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c =================================================================== --- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-26 09:29:35 UTC (rev 4755) +++ trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-28 13:14:59 UTC (rev 4756) @@ -19,15 +19,97 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/avstring.h" #include "avformat.h" +#include <strings.h> typedef struct wtwfind_context { uint64_t frame_count; uint64_t max_histogram[3][256]; uint64_t min_histogram[3][256]; + char path[1024]; + uint8_t peak_so_far[3]; } WtwFindContext; +static void dumpImage(struct AVFormatContext *s, AVPacket *pkt) +{ + WtwFindContext *img = s->priv_data; + ByteIOContext *pb[3]; + char filename[1024]; + uint32_t pkt_size; + AVCodecContext *codec= s->streams[ pkt->stream_index ]->codec; + AVPicture *picture; + AVFrame *frame; + uint8_t* buf; + AVCodec* tiffCodec; + AVCodecContext* context; + int sizeUsed; + + if (av_get_frame_filename(filename, sizeof(filename), + img->path, img->frame_count) < 0) + { + av_log(s, AV_LOG_ERROR, "Could not get frame filename from pattern\n"); + return; + } + if (url_fopen(&pb[0], filename, URL_WRONLY) < 0) { + av_log(s, AV_LOG_ERROR, "Could not open file : %s\n",filename); + return; + } + + picture = (AVPicture *)pkt->data; + pkt_size = codec->height * codec->width * 3; + + buf = av_mallocz(pkt_size * 2); + + tiffCodec = avcodec_find_encoder(CODEC_ID_TIFF); + if (!tiffCodec) + { + av_log(s, AV_LOG_ERROR, "Could not find tiff encoder\n"); + return; + } + context = avcodec_alloc_context(); + + context->width = codec->width; + context->height = codec->height; + context->pix_fmt = codec->pix_fmt; + + if (avcodec_open(context, tiffCodec) < 0) + { + av_log(s, AV_LOG_ERROR, "Could not open tiff encoder\n"); + av_free(context); + return; + } + + frame = avcodec_alloc_frame(); + if(!frame) + { + av_log(s, AV_LOG_ERROR, "Out of memory\n"); + avcodec_close(context); + av_free(context); + return; + } + + frame->data[0] = picture->data[0]; + frame->linesize[0] = codec->width * 3; + + sizeUsed = avcodec_encode_video(context, buf, pkt_size * 2, frame); + if(sizeUsed > 0) + { + put_buffer(pb[0], buf, sizeUsed); + put_flush_packet(pb[0]); + } + else + { + av_log(s, AV_LOG_ERROR, "Tiff encode failed\n"); + } + url_fclose(pb[0]); + avcodec_close(context); + av_free(context); + av_free(frame); +} + + static int wtwfind_write_header(AVFormatContext *s) { WtwFindContext *wtw = s->priv_data; @@ -52,11 +134,24 @@ wtw->frame_count = 0; for(int i = 0; i < 3; ++i) + { for(int j =0; j < 256; ++j) { wtw->max_histogram[i][j] = 0; wtw->min_histogram[i][j] = 0; } + wtw->peak_so_far[i] = 0; + } + + if(strncmp(s->filename, "pipe:", 5) != 0) + { + av_strlcpy(wtw->path, s->filename, sizeof(wtw->path)); + } + else + { + av_strlcpy(wtw->path, "frame", sizeof(wtw->path)); + } + av_strlcat(wtw->path, ".%06d.tif", sizeof(wtw->path)); return 0; } @@ -69,6 +164,7 @@ uint8_t peak[3] = {0,0,0}; uint8_t valley[3] = {255,255,255}; char buf[256]; + int needToDumpImage = 0; uint32_t offsety = codecContext->height / 20; uint32_t offsetx = codecContext->width / 20; @@ -114,6 +210,25 @@ snprintf(buf, sizeof(buf), "%"PRId64",%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n", ++wtw->frame_count, counthi[0], counthi[1], counthi[2], peak[0], peak[1], peak[2], countlo[0], countlo[1], countlo[2], valley[0], valley[1], valley[2]); put_buffer(s->pb, buf, strlen(buf)); put_flush_packet(s->pb); + + // look for frames at peaks so far in each colour + for(int i = 0; i < 3; ++i) + { + if(peak[i] >= wtw->peak_so_far[i]) + { + wtw->peak_so_far[i] = peak[i]; + if(peak[i] > 235) + { + needToDumpImage = 1; + } + } + } + + if(needToDumpImage) + { + dumpImage(s, pkt); + } + return 0; } @@ -127,19 +242,14 @@ uint8_t valley[3] = {255,255,255}; char buf[256]; static uint64_t counter = 0; + uint32_t offsety = codecContext->height / 20; + uint32_t offsetx = codecContext->width / 20; + uint8_t* pBuff; AVPicture *picture; picture = (AVPicture *)pkt->data; - //uint32_t offsety = codecContext->height / 20; - //uint32_t offsetx = codecContext->width / 20; - uint32_t offsety = 0; - uint32_t offsetx = 0; - - //av_log(NULL, AV_LOG_ERROR, "R:%d %d\n", pBuff - (uint8_t*)pkt->data, pkt->size); - - - uint8_t* pBuff = picture->data[0]; + pBuff = picture->data[0]; pBuff += offsety * codecContext->width; for(uint32_t i = offsety; i < codecContext->height - offsety; ++i) { @@ -223,7 +333,6 @@ pBuff += offsetx / 2; } pBuff += offsety * codecContext->width / 4; - //av_log(NULL, AV_LOG_ERROR, "R:%d %d\n", pBuff - (uint8_t*)pkt->data, pkt->size); for(int i = 0; i < 3; ++i) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-26 09:29:41
|
Revision: 4755 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4755&view=rev Author: adcockj Date: 2010-04-26 09:29:35 +0000 (Mon, 26 Apr 2010) Log Message: ----------- Correct labelling and loops Modified Paths: -------------- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c Modified: trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c =================================================================== --- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-26 09:22:35 UTC (rev 4754) +++ trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-26 09:29:35 UTC (rev 4755) @@ -39,7 +39,7 @@ } else if(s->streams[0]->codec->pix_fmt == PIX_FMT_YUV420P) { - snprintf(buf, sizeof(buf), "Counter,NumYPixelsOverRange,NumCrPixelsOverRange,NumCbPixelsOverRange,PeakY,PeakCr,PeakCb,NumYPixelsUnderRange,NumCrPixelsUnderRange,NumCbPixelsUnderRange,MinY,MinCr,MinCb\r\n"); + snprintf(buf, sizeof(buf), "Counter,NumYPixelsOverRange,NumCbPixelsOverRange,NumCrPixelsOverRange,PeakY,PeakCb,PeakCr,NumYPixelsUnderRange,NumCbPixelsUnderRange,NumCrPixelsUnderRange,MinY,MinCb,MinCr\r\n"); } else { @@ -73,9 +73,12 @@ uint32_t offsety = codecContext->height / 20; uint32_t offsetx = codecContext->width / 20; + AVPicture *picture; + picture = (AVPicture *)pkt->data; + for(uint32_t i = offsety; i < codecContext->height - offsety; ++i) { - uint8_t* pBuff = (uint8_t*)pkt->data + i * codecContext->width * 3; + uint8_t* pBuff = picture->data[0] + i * codecContext->width * 3; pBuff += offsetx * 3; for(uint32_t j = offsetx; j < codecContext->width -offsetx; ++j) { @@ -125,10 +128,18 @@ char buf[256]; static uint64_t counter = 0; - uint32_t offsety = codecContext->height / 20; - uint32_t offsetx = codecContext->width / 20; + AVPicture *picture; + picture = (AVPicture *)pkt->data; - uint8_t* pBuff = (uint8_t*)pkt->data; + //uint32_t offsety = codecContext->height / 20; + //uint32_t offsetx = codecContext->width / 20; + uint32_t offsety = 0; + uint32_t offsetx = 0; + + //av_log(NULL, AV_LOG_ERROR, "R:%d %d\n", pBuff - (uint8_t*)pkt->data, pkt->size); + + + uint8_t* pBuff = picture->data[0]; pBuff += offsety * codecContext->width; for(uint32_t i = offsety; i < codecContext->height - offsety; ++i) { @@ -156,6 +167,7 @@ pBuff += offsetx; } pBuff += offsety * codecContext->width; + pBuff = picture->data[1]; pBuff += offsety * codecContext->width / 4; for(uint32_t i = offsety / 2; i < (codecContext->height - offsety) / 2; ++i) { @@ -182,14 +194,16 @@ } pBuff += offsetx / 2; } - pBuff += offsety * codecContext->width / 2; + pBuff += offsety * codecContext->width / 4; + pBuff = picture->data[2]; + pBuff += offsety * codecContext->width / 4; for(uint32_t i = offsety / 2; i < (codecContext->height - offsety) / 2; ++i) { pBuff += offsetx / 2; for(uint32_t j = offsetx / 2; j < (codecContext->width - offsetx) / 2; ++j) { uint8_t colour = *pBuff++; - if(colour > 235) + if(colour > 240) { ++counthi[2]; } @@ -208,6 +222,8 @@ } pBuff += offsetx / 2; } + pBuff += offsety * codecContext->width / 4; + //av_log(NULL, AV_LOG_ERROR, "R:%d %d\n", pBuff - (uint8_t*)pkt->data, pkt->size); for(int i = 0; i < 3; ++i) { @@ -244,7 +260,7 @@ } else if(s->streams[0]->codec->pix_fmt == PIX_FMT_YUV420P) { - snprintf(buf, sizeof(buf), "Value,YFramesPeak,CrFramesPeak,CbFramesPeak,YFramesMin,CrFramesMin,CbFramesMin\r\n"); + snprintf(buf, sizeof(buf), "Value,YFramesPeak,CbFramesPeak,CrFramesPeak,YFramesMin,CbFramesMin,CrFramesMin\r\n"); } put_buffer(s->pb, buf, strlen(buf)); put_flush_packet(s->pb); @@ -268,4 +284,5 @@ wtwfind_write_header, wtwfind_write_packet, wtwfind_write_trailer, + .flags = AVFMT_RAWPICTURE, }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-26 09:22:41
|
Revision: 4754 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4754&view=rev Author: adcockj Date: 2010-04-26 09:22:35 +0000 (Mon, 26 Apr 2010) Log Message: ----------- Fix x64 compilation error Modified Paths: -------------- trunk/DScaler5/ffmpeg/libswscale/swscale_template.c Modified: trunk/DScaler5/ffmpeg/libswscale/swscale_template.c =================================================================== --- trunk/DScaler5/ffmpeg/libswscale/swscale_template.c 2010-04-26 09:21:28 UTC (rev 4753) +++ trunk/DScaler5/ffmpeg/libswscale/swscale_template.c 2010-04-26 09:22:35 UTC (rev 4754) @@ -2497,7 +2497,7 @@ /* GCC 3.3 makes MPlayer crash on IA-32 machines when using "g" operand here, which is needed to support GCC 4.0. */ #if ARCH_X86_64 && AV_GCC_VERSION_AT_LEAST(3,4) - :: "m" (src1), "m" (dst), "g" (dstWidth), "m" (xInc_shr16), "m" (xInc_mask), + :: "m" (src1), "m" (dst), "g" ((x86_reg)dstWidth), "m" (xInc_shr16), "m" (xInc_mask), #else :: "m" (src1), "m" (dst), "m" (dstWidth), "m" (xInc_shr16), "m" (xInc_mask), #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-26 09:21:37
|
Revision: 4753 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4753&view=rev Author: adcockj Date: 2010-04-26 09:21:28 +0000 (Mon, 26 Apr 2010) Log Message: ----------- Correct brightness and saturation for studio output Modified Paths: -------------- trunk/DScaler5/ffmpeg/libswscale/utils.c Modified: trunk/DScaler5/ffmpeg/libswscale/utils.c =================================================================== --- trunk/DScaler5/ffmpeg/libswscale/utils.c 2010-04-24 14:48:24 UTC (rev 4752) +++ trunk/DScaler5/ffmpeg/libswscale/utils.c 2010-04-26 09:21:28 UTC (rev 4753) @@ -905,7 +905,7 @@ // use correct matrix for sd and hd also se brightness and contrast to get studio rgb out int swsConvType = (srcH> 576 || srcW > 1024)?SWS_CS_ITU709:SWS_CS_ITU601; - sws_setColorspaceDetails(c, ff_yuv2rgb_coeffs[swsConvType], srcRange, ff_yuv2rgb_coeffs[swsConvType], dstRange, 4112, 56284, 56284); + sws_setColorspaceDetails(c, ff_yuv2rgb_coeffs[swsConvType], srcRange, ff_yuv2rgb_coeffs[swsConvType], dstRange, 4096, 56284, 1<<16); /* unscaled special cases */ if (unscaled && !usesHFilter && !usesVFilter && (srcRange == dstRange || isAnyRGB(dstFormat))) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-24 14:48:30
|
Revision: 4752 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4752&view=rev Author: adcockj Date: 2010-04-24 14:48:24 +0000 (Sat, 24 Apr 2010) Log Message: ----------- Corrected issues found in initial testing, offsets not working and rgb conversion Modified Paths: -------------- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c trunk/DScaler5/ffmpeg/libswscale/utils.c Modified: trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c =================================================================== --- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-23 09:15:42 UTC (rev 4751) +++ trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-24 14:48:24 UTC (rev 4752) @@ -76,6 +76,7 @@ for(uint32_t i = offsety; i < codecContext->height - offsety; ++i) { uint8_t* pBuff = (uint8_t*)pkt->data + i * codecContext->width * 3; + pBuff += offsetx * 3; for(uint32_t j = offsetx; j < codecContext->width -offsetx; ++j) { for(int k = 0; k < 3; ++k) @@ -128,8 +129,10 @@ uint32_t offsetx = codecContext->width / 20; uint8_t* pBuff = (uint8_t*)pkt->data; + pBuff += offsety * codecContext->width; for(uint32_t i = offsety; i < codecContext->height - offsety; ++i) { + pBuff += offsetx; for(uint32_t j = offsetx; j < codecContext->width - offsetx; ++j) { uint8_t colour = *pBuff++; @@ -150,9 +153,13 @@ valley[0] = colour; } } + pBuff += offsetx; } + pBuff += offsety * codecContext->width; + pBuff += offsety * codecContext->width / 4; for(uint32_t i = offsety / 2; i < (codecContext->height - offsety) / 2; ++i) { + pBuff += offsetx / 2; for(uint32_t j = offsetx / 2; j < (codecContext->width - offsetx)/ 2; ++j) { uint8_t colour = *pBuff++; @@ -173,9 +180,12 @@ valley[1] = colour; } } + pBuff += offsetx / 2; } + pBuff += offsety * codecContext->width / 2; for(uint32_t i = offsety / 2; i < (codecContext->height - offsety) / 2; ++i) { + pBuff += offsetx / 2; for(uint32_t j = offsetx / 2; j < (codecContext->width - offsetx) / 2; ++j) { uint8_t colour = *pBuff++; @@ -196,6 +206,7 @@ valley[2] = colour; } } + pBuff += offsetx / 2; } for(int i = 0; i < 3; ++i) Modified: trunk/DScaler5/ffmpeg/libswscale/utils.c =================================================================== --- trunk/DScaler5/ffmpeg/libswscale/utils.c 2010-04-23 09:15:42 UTC (rev 4751) +++ trunk/DScaler5/ffmpeg/libswscale/utils.c 2010-04-24 14:48:24 UTC (rev 4752) @@ -804,8 +804,7 @@ unscaled = (srcW == dstW && srcH == dstH); - // JA force 16-235 conversion - srcRange = 1; + srcRange = handle_jpeg(&srcFormat); dstRange = handle_jpeg(&dstFormat); if (!isSupportedIn(srcFormat)) { @@ -904,8 +903,9 @@ c->chrDstW= -((-dstW) >> c->chrDstHSubSample); c->chrDstH= -((-dstH) >> c->chrDstVSubSample); + // use correct matrix for sd and hd also se brightness and contrast to get studio rgb out int swsConvType = (srcH> 576 || srcW > 1024)?SWS_CS_ITU709:SWS_CS_ITU601; - sws_setColorspaceDetails(c, ff_yuv2rgb_coeffs[swsConvType], srcRange, ff_yuv2rgb_coeffs[swsConvType], dstRange, 0, 1<<16, 1<<16); + sws_setColorspaceDetails(c, ff_yuv2rgb_coeffs[swsConvType], srcRange, ff_yuv2rgb_coeffs[swsConvType], dstRange, 4112, 56284, 56284); /* unscaled special cases */ if (unscaled && !usesHFilter && !usesVFilter && (srcRange == dstRange || isAnyRGB(dstFormat))) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-23 09:15:49
|
Revision: 4751 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4751&view=rev Author: adcockj Date: 2010-04-23 09:15:42 +0000 (Fri, 23 Apr 2010) Log Message: ----------- Updated to wtwfind ready for first preview release Modified Paths: -------------- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c Added Paths: ----------- trunk/DScaler5/ffmpeg/WTWFind_README.txt trunk/DScaler5/ffmpeg/wtwfindrgb.cmd trunk/DScaler5/ffmpeg/wtwfindyuv.cmd Added: trunk/DScaler5/ffmpeg/WTWFind_README.txt =================================================================== --- trunk/DScaler5/ffmpeg/WTWFind_README.txt (rev 0) +++ trunk/DScaler5/ffmpeg/WTWFind_README.txt 2010-04-23 09:15:42 UTC (rev 4751) @@ -0,0 +1,14 @@ +How to use the WTW finder +========================= + +Expand all the files in the zip to a place where you have write access. + +To analyse the decoded yuv content start the wtwfindyuv.cmd batch file. + +To analyse the decoded yuv content start the wtwfindrgb.cmd batch file. + +The 2 batch files can be started with a paramter which is the file you want to +analyse or they can be ruin interactively and you will be asked for the file you +wish to analyze. + + Modified: trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c =================================================================== --- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-21 10:11:21 UTC (rev 4750) +++ trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-23 09:15:42 UTC (rev 4751) @@ -21,31 +21,62 @@ #include "avformat.h" +typedef struct wtwfind_context { + uint64_t frame_count; + uint64_t max_histogram[3][256]; + uint64_t min_histogram[3][256]; +} WtwFindContext; + + static int wtwfind_write_header(AVFormatContext *s) { - if (s->streams[0]->codec->pix_fmt != PIX_FMT_RGB24 && - s->streams[0]->codec->pix_fmt != PIX_FMT_YUV420P) + WtwFindContext *wtw = s->priv_data; + char buf[256]; + + if (s->streams[0]->codec->pix_fmt == PIX_FMT_RGB24) { - av_log(s, AV_LOG_ERROR, "only PIX_FMT_RGBA and PIX_FMT_YUV420 is supported\n"); + snprintf(buf, sizeof(buf), "Counter,NumRPixelsOverRange,NumGPixelsOverRange,NumBPixelsOverRange,PeakR,PeakG,PeakB,NumRPixelsUnderRange,NumGPixelsUnderRange,NumBPixelsUnderRange,MinR,MinG,MinB\r\n"); + } + else if(s->streams[0]->codec->pix_fmt == PIX_FMT_YUV420P) + { + snprintf(buf, sizeof(buf), "Counter,NumYPixelsOverRange,NumCrPixelsOverRange,NumCbPixelsOverRange,PeakY,PeakCr,PeakCb,NumYPixelsUnderRange,NumCrPixelsUnderRange,NumCbPixelsUnderRange,MinY,MinCr,MinCb\r\n"); + } + else + { + av_log(s, AV_LOG_ERROR, "Only PIX_FMT_RGBA and PIX_FMT_YUV420 are supported\n"); return AVERROR_INVALIDDATA; } + + put_buffer(s->pb, buf, strlen(buf)); + put_flush_packet(s->pb); + + wtw->frame_count = 0; + for(int i = 0; i < 3; ++i) + for(int j =0; j < 256; ++j) + { + wtw->max_histogram[i][j] = 0; + wtw->min_histogram[i][j] = 0; + } return 0; } static int wtwfind_write_packet_rgb24(struct AVFormatContext *s, AVPacket *pkt) { AVCodecContext* codecContext = s->streams[0]->codec; + WtwFindContext *wtw = s->priv_data; uint32_t counthi[3] = {0,0,0}; uint32_t countlo[3] = {0,0,0}; uint8_t peak[3] = {0,0,0}; uint8_t valley[3] = {255,255,255}; char buf[256]; - static uint64_t counter = 0; - for(uint32_t i = 0; i < codecContext->height; ++i) + uint32_t offsety = codecContext->height / 20; + uint32_t offsetx = codecContext->width / 20; + + for(uint32_t i = offsety; i < codecContext->height - offsety; ++i) { uint8_t* pBuff = (uint8_t*)pkt->data + i * codecContext->width * 3; - for(uint32_t j = 1; j < codecContext->width; ++j) + for(uint32_t j = offsetx; j < codecContext->width -offsetx; ++j) { for(int k = 0; k < 3; ++k) { @@ -69,7 +100,14 @@ } } } - snprintf(buf, sizeof(buf), "%"PRId64",%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n", ++counter, counthi[0], counthi[1], counthi[2], peak[0], peak[1], peak[2], countlo[0], countlo[1], countlo[2], valley[0], valley[1], valley[2]); + + for(int i = 0; i < 3; ++i) + { + ++(wtw->max_histogram[i][peak[i]]); + ++(wtw->min_histogram[i][valley[i]]); + } + + snprintf(buf, sizeof(buf), "%"PRId64",%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n", ++wtw->frame_count, counthi[0], counthi[1], counthi[2], peak[0], peak[1], peak[2], countlo[0], countlo[1], countlo[2], valley[0], valley[1], valley[2]); put_buffer(s->pb, buf, strlen(buf)); put_flush_packet(s->pb); return 0; @@ -78,6 +116,7 @@ static int wtwfind_write_packet_yuv(struct AVFormatContext *s, AVPacket *pkt) { AVCodecContext* codecContext = s->streams[0]->codec; + WtwFindContext *wtw = s->priv_data; uint32_t counthi[3] = {0,0,0}; uint32_t countlo[3] = {0,0,0}; uint8_t peak[3] = {0,0,0}; @@ -85,10 +124,13 @@ char buf[256]; static uint64_t counter = 0; + uint32_t offsety = codecContext->height / 20; + uint32_t offsetx = codecContext->width / 20; + uint8_t* pBuff = (uint8_t*)pkt->data; - for(uint32_t i = 0; i < codecContext->height; ++i) + for(uint32_t i = offsety; i < codecContext->height - offsety; ++i) { - for(uint32_t j = 1; j < codecContext->width; ++j) + for(uint32_t j = offsetx; j < codecContext->width - offsetx; ++j) { uint8_t colour = *pBuff++; if(colour > 235) @@ -109,9 +151,9 @@ } } } - for(uint32_t i = 0; i < codecContext->height / 2; ++i) + for(uint32_t i = offsety / 2; i < (codecContext->height - offsety) / 2; ++i) { - for(uint32_t j = 1; j < codecContext->width / 2; ++j) + for(uint32_t j = offsetx / 2; j < (codecContext->width - offsetx)/ 2; ++j) { uint8_t colour = *pBuff++; if(colour > 240) @@ -132,9 +174,9 @@ } } } - for(uint32_t i = 0; i < codecContext->height / 2; ++i) + for(uint32_t i = offsety / 2; i < (codecContext->height - offsety) / 2; ++i) { - for(uint32_t j = 1; j < codecContext->width / 2; ++j) + for(uint32_t j = offsetx / 2; j < (codecContext->width - offsetx) / 2; ++j) { uint8_t colour = *pBuff++; if(colour > 235) @@ -156,6 +198,12 @@ } } + for(int i = 0; i < 3; ++i) + { + ++(wtw->max_histogram[i][peak[i]]); + ++(wtw->min_histogram[i][valley[i]]); + } + snprintf(buf, sizeof(buf), "%"PRId64",%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n", ++counter, counthi[0], counthi[1], counthi[2], peak[0], peak[1], peak[2], countlo[0], countlo[1], countlo[2], valley[0], valley[1], valley[2]); put_buffer(s->pb, buf, strlen(buf)); put_flush_packet(s->pb); @@ -175,15 +223,38 @@ return -1; } +static int wtwfind_write_trailer(struct AVFormatContext *s) +{ + WtwFindContext *wtw = s->priv_data; + char buf[256]; + if (s->streams[0]->codec->pix_fmt == PIX_FMT_RGB24) + { + snprintf(buf, sizeof(buf), "Value,RedFramesPeak,GreenFramesPeak,BlueFramesPeak,RedFramesMin,GreenFramesMin,BlueFramesMin\r\n"); + } + else if(s->streams[0]->codec->pix_fmt == PIX_FMT_YUV420P) + { + snprintf(buf, sizeof(buf), "Value,YFramesPeak,CrFramesPeak,CbFramesPeak,YFramesMin,CrFramesMin,CbFramesMin\r\n"); + } + put_buffer(s->pb, buf, strlen(buf)); + put_flush_packet(s->pb); + for(int j =0; j < 256; ++j) + { + snprintf(buf, sizeof(buf), "%d,%"PRId64",%"PRId64",%"PRId64",%"PRId64",%"PRId64",%"PRId64"\r\n", j, wtw->max_histogram[0][j], wtw->max_histogram[1][j], wtw->max_histogram[2][j], wtw->min_histogram[0][j], wtw->min_histogram[1][j], wtw->min_histogram[2][j]); + put_buffer(s->pb, buf, strlen(buf)); + put_flush_packet(s->pb); + } + return 0; +} + AVOutputFormat wtwfind_muxer = { "wtwfind", NULL_IF_CONFIG_SMALL("wtwfind testing format"), NULL, "", - 0, + sizeof(WtwFindContext), CODEC_ID_NONE, CODEC_ID_RAWVIDEO, wtwfind_write_header, wtwfind_write_packet, - NULL, + wtwfind_write_trailer, }; Added: trunk/DScaler5/ffmpeg/wtwfindrgb.cmd =================================================================== --- trunk/DScaler5/ffmpeg/wtwfindrgb.cmd (rev 0) +++ trunk/DScaler5/ffmpeg/wtwfindrgb.cmd 2010-04-23 09:15:42 UTC (rev 4751) @@ -0,0 +1,16 @@ +@echo off +echo Analyse files looking for peak white +echo (c) John Adcock 2010 +if "%~s1" == "" goto askforfile +set flags=-f wtwfind -pix_fmt rgb24 +%~dp0ffmpeg -i "%~1" %flags% "%~dp0%~n1.rgb.csv" +echo * +echo * +echo * +echo Analysis results in file %~dp0%~n1.rgb.csv +pause +exit /b +:askforfile +if "%1" == "" set /p input=File To Process (no quotes, spaces OK)- +if "%input%" == "" exit /b +%0 "%input%" Added: trunk/DScaler5/ffmpeg/wtwfindyuv.cmd =================================================================== --- trunk/DScaler5/ffmpeg/wtwfindyuv.cmd (rev 0) +++ trunk/DScaler5/ffmpeg/wtwfindyuv.cmd 2010-04-23 09:15:42 UTC (rev 4751) @@ -0,0 +1,16 @@ +@echo off +echo Analyse files looking for peak white +echo (c) John Adcock 2010 +if "%~s1" == "" goto askforfile +set flags=-f wtwfind -pix_fmt yuv420p +%~dp0ffmpeg -i "%~1" %flags% "%~dp0%~n1.yuv.csv" +echo * +echo * +echo * +echo Analysis results in file %~dp0%~n1.yuv.csv +pause +exit /b +:askforfile +if "%1" == "" set /p input=File To Process (no quotes, spaces OK)- +if "%input%" == "" exit /b +%0 "%input%" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-21 10:11:28
|
Revision: 4750 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4750&view=rev Author: adcockj Date: 2010-04-21 10:11:21 +0000 (Wed, 21 Apr 2010) Log Message: ----------- Add counter for btb pixels as well ,fix counting bugs and add counter Modified Paths: -------------- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c Modified: trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c =================================================================== --- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-21 10:10:12 UTC (rev 4749) +++ trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-21 10:11:21 UTC (rev 4750) @@ -21,24 +21,26 @@ #include "avformat.h" -static int wtwfind_write_header(AVFormatContext *s) -{ - if (s->streams[0]->codec->pix_fmt != PIX_FMT_RGB24 && - s->streams[0]->codec->pix_fmt != PIX_FMT_YUV420P) - { - av_log(s, AV_LOG_ERROR, "only PIX_FMT_RGBA and PIX_FMT_YUV420 is supported\n"); - return AVERROR_INVALIDDATA; - } - return 0; -} +static int wtwfind_write_header(AVFormatContext *s) +{ + if (s->streams[0]->codec->pix_fmt != PIX_FMT_RGB24 && + s->streams[0]->codec->pix_fmt != PIX_FMT_YUV420P) + { + av_log(s, AV_LOG_ERROR, "only PIX_FMT_RGBA and PIX_FMT_YUV420 is supported\n"); + return AVERROR_INVALIDDATA; + } + return 0; +} static int wtwfind_write_packet_rgb24(struct AVFormatContext *s, AVPacket *pkt) { AVCodecContext* codecContext = s->streams[0]->codec; - uint32_t count[3] = {0,0,0}; + uint32_t counthi[3] = {0,0,0}; + uint32_t countlo[3] = {0,0,0}; uint8_t peak[3] = {0,0,0}; uint8_t valley[3] = {255,255,255}; char buf[256]; + static uint64_t counter = 0; for(uint32_t i = 0; i < codecContext->height; ++i) { @@ -50,8 +52,12 @@ uint8_t colour = *pBuff++; if(colour > 235) { - ++count[k]; + ++counthi[k]; } + if(colour < 16) + { + ++countlo[k]; + } if(colour > peak[k]) { peak[k] = colour; @@ -63,7 +69,7 @@ } } } - snprintf(buf, sizeof(buf), "%d,%d,%d,%d,%d,%d,%d,%d,%d, %dx%d %d\n", count[0], count[2], count[2], peak[0], peak[1], peak[2], valley[0], valley[1], valley[2], codecContext->width, codecContext->height, pkt->size); + snprintf(buf, sizeof(buf), "%"PRId64",%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n", ++counter, counthi[0], counthi[1], counthi[2], peak[0], peak[1], peak[2], countlo[0], countlo[1], countlo[2], valley[0], valley[1], valley[2]); put_buffer(s->pb, buf, strlen(buf)); put_flush_packet(s->pb); return 0; @@ -72,10 +78,12 @@ static int wtwfind_write_packet_yuv(struct AVFormatContext *s, AVPacket *pkt) { AVCodecContext* codecContext = s->streams[0]->codec; - uint32_t count[3] = {0,0,0}; + uint32_t counthi[3] = {0,0,0}; + uint32_t countlo[3] = {0,0,0}; uint8_t peak[3] = {0,0,0}; uint8_t valley[3] = {255,255,255}; char buf[256]; + static uint64_t counter = 0; uint8_t* pBuff = (uint8_t*)pkt->data; for(uint32_t i = 0; i < codecContext->height; ++i) @@ -85,8 +93,12 @@ uint8_t colour = *pBuff++; if(colour > 235) { - ++count[0]; + ++counthi[0]; } + if(colour < 16) + { + ++countlo[0]; + } if(colour > peak[0]) { peak[0] = colour; @@ -102,10 +114,14 @@ for(uint32_t j = 1; j < codecContext->width / 2; ++j) { uint8_t colour = *pBuff++; - if(colour > 235) + if(colour > 240) { - ++count[1]; + ++counthi[1]; } + if(colour < 16) + { + ++countlo[1]; + } if(colour > peak[1]) { peak[1] = colour; @@ -123,8 +139,12 @@ uint8_t colour = *pBuff++; if(colour > 235) { - ++count[2]; + ++counthi[2]; } + if(colour < 16) + { + ++countlo[2]; + } if(colour > peak[2]) { peak[2] = colour; @@ -136,7 +156,7 @@ } } - snprintf(buf, sizeof(buf), "%d,%d,%d,%d,%d,%d,%d,%d,%d, %dx%d %d\n", count[0], count[2], count[2], peak[0], peak[1], peak[2], valley[0], valley[1], valley[2], codecContext->width, codecContext->height, pkt->size); + snprintf(buf, sizeof(buf), "%"PRId64",%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n", ++counter, counthi[0], counthi[1], counthi[2], peak[0], peak[1], peak[2], countlo[0], countlo[1], countlo[2], valley[0], valley[1], valley[2]); put_buffer(s->pb, buf, strlen(buf)); put_flush_packet(s->pb); return 0; @@ -144,15 +164,15 @@ static int wtwfind_write_packet(struct AVFormatContext *s, AVPacket *pkt) { - if (s->streams[0]->codec->pix_fmt == PIX_FMT_RGB24) - { - return wtwfind_write_packet_rgb24(s, pkt); - } - else if(s->streams[0]->codec->pix_fmt == PIX_FMT_YUV420P) - { - return wtwfind_write_packet_yuv(s, pkt); - } - return -1; + if (s->streams[0]->codec->pix_fmt == PIX_FMT_RGB24) + { + return wtwfind_write_packet_rgb24(s, pkt); + } + else if(s->streams[0]->codec->pix_fmt == PIX_FMT_YUV420P) + { + return wtwfind_write_packet_yuv(s, pkt); + } + return -1; } AVOutputFormat wtwfind_muxer = { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-21 10:10:19
|
Revision: 4749 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4749&view=rev Author: adcockj Date: 2010-04-21 10:10:12 +0000 (Wed, 21 Apr 2010) Log Message: ----------- Possible fix for issue with dvr-ms ffmpeg roundup issue870 Modified Paths: -------------- trunk/DScaler5/ffmpeg/libavformat/riff.c Modified: trunk/DScaler5/ffmpeg/libavformat/riff.c =================================================================== --- trunk/DScaler5/ffmpeg/libavformat/riff.c 2010-04-20 12:18:20 UTC (rev 4748) +++ trunk/DScaler5/ffmpeg/libavformat/riff.c 2010-04-21 10:10:12 UTC (rev 4749) @@ -108,7 +108,6 @@ { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', 's') }, { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '1') }, { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '1') }, - { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '2') }, { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'p', 'g', '2') }, { CODEC_ID_MPEG2VIDEO, MKTAG('M', 'P', 'E', 'G') }, { CODEC_ID_MPEG1VIDEO, MKTAG('P', 'I', 'M', '1') }, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-20 12:18:26
|
Revision: 4748 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4748&view=rev Author: adcockj Date: 2010-04-20 12:18:20 +0000 (Tue, 20 Apr 2010) Log Message: ----------- Quick and dirty WTW peak finder application Modified Paths: -------------- trunk/DScaler5/ffmpeg/libavformat/Makefile trunk/DScaler5/ffmpeg/libavformat/allformats.c trunk/DScaler5/ffmpeg/libswscale/utils.c Added Paths: ----------- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c Modified: trunk/DScaler5/ffmpeg/libavformat/Makefile =================================================================== --- trunk/DScaler5/ffmpeg/libavformat/Makefile 2010-04-08 14:05:01 UTC (rev 4747) +++ trunk/DScaler5/ffmpeg/libavformat/Makefile 2010-04-20 12:18:20 UTC (rev 4748) @@ -76,6 +76,7 @@ OBJS-$(CONFIG_FLV_MUXER) += flvenc.o avc.o OBJS-$(CONFIG_FOURXM_DEMUXER) += 4xm.o OBJS-$(CONFIG_FRAMECRC_MUXER) += framecrcenc.o +OBJS-$(CONFIG_FRAMECRC_MUXER) += wtwfindenc.o OBJS-$(CONFIG_GIF_MUXER) += gif.o OBJS-$(CONFIG_GSM_DEMUXER) += raw.o id3v2.o OBJS-$(CONFIG_GXF_DEMUXER) += gxf.o Modified: trunk/DScaler5/ffmpeg/libavformat/allformats.c =================================================================== --- trunk/DScaler5/ffmpeg/libavformat/allformats.c 2010-04-08 14:05:01 UTC (rev 4747) +++ trunk/DScaler5/ffmpeg/libavformat/allformats.c 2010-04-20 12:18:20 UTC (rev 4748) @@ -89,6 +89,7 @@ REGISTER_MUXDEMUX (FLV, flv); REGISTER_DEMUXER (FOURXM, fourxm); REGISTER_MUXER (FRAMECRC, framecrc); + REGISTER_MUXER (FRAMECRC, wtwfind); REGISTER_MUXER (GIF, gif); REGISTER_DEMUXER (GSM, gsm); REGISTER_MUXDEMUX (GXF, gxf); Added: trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c =================================================================== --- trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c (rev 0) +++ trunk/DScaler5/ffmpeg/libavformat/wtwfindenc.c 2010-04-20 12:18:20 UTC (rev 4748) @@ -0,0 +1,169 @@ +/* + * wtw finder + * Copyright (c) 2010 John Adcock + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "avformat.h" + +static int wtwfind_write_header(AVFormatContext *s) +{ + if (s->streams[0]->codec->pix_fmt != PIX_FMT_RGB24 && + s->streams[0]->codec->pix_fmt != PIX_FMT_YUV420P) + { + av_log(s, AV_LOG_ERROR, "only PIX_FMT_RGBA and PIX_FMT_YUV420 is supported\n"); + return AVERROR_INVALIDDATA; + } + return 0; +} + +static int wtwfind_write_packet_rgb24(struct AVFormatContext *s, AVPacket *pkt) +{ + AVCodecContext* codecContext = s->streams[0]->codec; + uint32_t count[3] = {0,0,0}; + uint8_t peak[3] = {0,0,0}; + uint8_t valley[3] = {255,255,255}; + char buf[256]; + + for(uint32_t i = 0; i < codecContext->height; ++i) + { + uint8_t* pBuff = (uint8_t*)pkt->data + i * codecContext->width * 3; + for(uint32_t j = 1; j < codecContext->width; ++j) + { + for(int k = 0; k < 3; ++k) + { + uint8_t colour = *pBuff++; + if(colour > 235) + { + ++count[k]; + } + if(colour > peak[k]) + { + peak[k] = colour; + } + if(colour < valley[k]) + { + valley[k] = colour; + } + } + } + } + snprintf(buf, sizeof(buf), "%d,%d,%d,%d,%d,%d,%d,%d,%d, %dx%d %d\n", count[0], count[2], count[2], peak[0], peak[1], peak[2], valley[0], valley[1], valley[2], codecContext->width, codecContext->height, pkt->size); + put_buffer(s->pb, buf, strlen(buf)); + put_flush_packet(s->pb); + return 0; +} + +static int wtwfind_write_packet_yuv(struct AVFormatContext *s, AVPacket *pkt) +{ + AVCodecContext* codecContext = s->streams[0]->codec; + uint32_t count[3] = {0,0,0}; + uint8_t peak[3] = {0,0,0}; + uint8_t valley[3] = {255,255,255}; + char buf[256]; + + uint8_t* pBuff = (uint8_t*)pkt->data; + for(uint32_t i = 0; i < codecContext->height; ++i) + { + for(uint32_t j = 1; j < codecContext->width; ++j) + { + uint8_t colour = *pBuff++; + if(colour > 235) + { + ++count[0]; + } + if(colour > peak[0]) + { + peak[0] = colour; + } + if(colour < valley[0]) + { + valley[0] = colour; + } + } + } + for(uint32_t i = 0; i < codecContext->height / 2; ++i) + { + for(uint32_t j = 1; j < codecContext->width / 2; ++j) + { + uint8_t colour = *pBuff++; + if(colour > 235) + { + ++count[1]; + } + if(colour > peak[1]) + { + peak[1] = colour; + } + if(colour < valley[1]) + { + valley[1] = colour; + } + } + } + for(uint32_t i = 0; i < codecContext->height / 2; ++i) + { + for(uint32_t j = 1; j < codecContext->width / 2; ++j) + { + uint8_t colour = *pBuff++; + if(colour > 235) + { + ++count[2]; + } + if(colour > peak[2]) + { + peak[2] = colour; + } + if(colour < valley[2]) + { + valley[2] = colour; + } + } + } + + snprintf(buf, sizeof(buf), "%d,%d,%d,%d,%d,%d,%d,%d,%d, %dx%d %d\n", count[0], count[2], count[2], peak[0], peak[1], peak[2], valley[0], valley[1], valley[2], codecContext->width, codecContext->height, pkt->size); + put_buffer(s->pb, buf, strlen(buf)); + put_flush_packet(s->pb); + return 0; +} + +static int wtwfind_write_packet(struct AVFormatContext *s, AVPacket *pkt) +{ + if (s->streams[0]->codec->pix_fmt == PIX_FMT_RGB24) + { + return wtwfind_write_packet_rgb24(s, pkt); + } + else if(s->streams[0]->codec->pix_fmt == PIX_FMT_YUV420P) + { + return wtwfind_write_packet_yuv(s, pkt); + } + return -1; +} + +AVOutputFormat wtwfind_muxer = { + "wtwfind", + NULL_IF_CONFIG_SMALL("wtwfind testing format"), + NULL, + "", + 0, + CODEC_ID_NONE, + CODEC_ID_RAWVIDEO, + wtwfind_write_header, + wtwfind_write_packet, + NULL, +}; Modified: trunk/DScaler5/ffmpeg/libswscale/utils.c =================================================================== --- trunk/DScaler5/ffmpeg/libswscale/utils.c 2010-04-08 14:05:01 UTC (rev 4747) +++ trunk/DScaler5/ffmpeg/libswscale/utils.c 2010-04-20 12:18:20 UTC (rev 4748) @@ -804,7 +804,8 @@ unscaled = (srcW == dstW && srcH == dstH); - srcRange = handle_jpeg(&srcFormat); + // JA force 16-235 conversion + srcRange = 1; dstRange = handle_jpeg(&dstFormat); if (!isSupportedIn(srcFormat)) { @@ -903,7 +904,8 @@ c->chrDstW= -((-dstW) >> c->chrDstHSubSample); c->chrDstH= -((-dstH) >> c->chrDstVSubSample); - sws_setColorspaceDetails(c, ff_yuv2rgb_coeffs[SWS_CS_DEFAULT], srcRange, ff_yuv2rgb_coeffs[SWS_CS_DEFAULT] /* FIXME*/, dstRange, 0, 1<<16, 1<<16); + int swsConvType = (srcH> 576 || srcW > 1024)?SWS_CS_ITU709:SWS_CS_ITU601; + sws_setColorspaceDetails(c, ff_yuv2rgb_coeffs[swsConvType], srcRange, ff_yuv2rgb_coeffs[swsConvType], dstRange, 0, 1<<16, 1<<16); /* unscaled special cases */ if (unscaled && !usesHFilter && !usesVFilter && (srcRange == dstRange || isAnyRGB(dstFormat))) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-08 14:05:07
|
Revision: 4747 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4747&view=rev Author: adcockj Date: 2010-04-08 14:05:01 +0000 (Thu, 08 Apr 2010) Log Message: ----------- Convert to use inno setup preprocessor so that version is automatic Modified Paths: -------------- trunk/DScaler/Install/MakeSfBuild.bat trunk/DScaler/Install/MakeSfBuild2008.bat trunk/DScaler/Install/dscaler.iss Modified: trunk/DScaler/Install/MakeSfBuild.bat =================================================================== --- trunk/DScaler/Install/MakeSfBuild.bat 2010-04-08 13:46:57 UTC (rev 4746) +++ trunk/DScaler/Install/MakeSfBuild.bat 2010-04-08 14:05:01 UTC (rev 4747) @@ -23,7 +23,7 @@ 7z a -tzip pdb.zip *.pdb -r copy pdb.zip ..\..\DScaler%buildnum%pdb_95.zip cd ..\Install -"c:\Program Files\Inno Setup 5\Compil32.exe" /cc DScaler.iss +"c:\Program Files\Inno Setup 5\iscc.exe" DScaler.iss copy Output\Setup.exe ..\..\DScaler%buildnum%_95.exe cd ..\.. del /f /q /s DScaler Modified: trunk/DScaler/Install/MakeSfBuild2008.bat =================================================================== --- trunk/DScaler/Install/MakeSfBuild2008.bat 2010-04-08 13:46:57 UTC (rev 4746) +++ trunk/DScaler/Install/MakeSfBuild2008.bat 2010-04-08 14:05:01 UTC (rev 4747) @@ -25,7 +25,7 @@ 7z a -tzip pdb.zip *.pdb -r copy pdb.zip ..\..\DScaler%buildnum%pdb.zip cd ..\Install -"c:\Program Files\Inno Setup 5\Compil32.exe" /cc DScaler.iss +"c:\Program Files\Inno Setup 5\iscc.exe" DScaler.iss copy Output\Setup.exe ..\..\DScaler%buildnum%.exe cd ..\.. del /f /q /s DScaler Modified: trunk/DScaler/Install/dscaler.iss =================================================================== --- trunk/DScaler/Install/dscaler.iss 2010-04-08 13:46:57 UTC (rev 4746) +++ trunk/DScaler/Install/dscaler.iss 2010-04-08 14:05:01 UTC (rev 4747) @@ -19,12 +19,15 @@ ; This is an InnoSetup script. ; For more information about InnoSetup see http://www.innosetup.com +#define MyAppVersion GetFileVersion("..\Release\DScaler.exe") + [Setup] -AppName=DScaler {%DSCALERVER|4 Test Version} -AppVerName=DScaler {%DSCALERVER|4 Test Version} +AppName=DScaler +AppVerName=DScaler {#MyAppVersion} AppPublisherURL=http://www.dscaler.org AppSupportURL=http://www.dscaler.org/phpBB/ AppUpdatesURL=http://www.dscaler.org +AppVersion={#MyAppVersion} DefaultDirName={pf}\DScaler DefaultGroupName=DScaler AllowNoIcons=yes @@ -34,11 +37,19 @@ ;required for installing the driver on NT platforms PrivilegesRequired=Admin DisableStartupPrompt=yes +AppCopyright=Copyright (C) 2010 DScaler Team +VersionInfoDescription=DScaler Setup +VersionInfoProductVersion={#MyAppVersion} +VersionInfoVersion={#MyAppVersion} +SetupIconFile=..\DScaler\Res\DScaler.ico + [Messages] BeveledLabel=DScaler WizardLicense=GPL License Agreement -LicenseLabel3=Do you want to continue to install [name]? If you choose No, Setup will close. +LicenseLabel3=Do you want to continue to install [name]?. +LicenseAccepted=Yes, I would like to &continue +LicenseNotAccepted=&No WizardInfoBefore=Warning InfoBeforeLabel=Please read the following important warning before continuing. InfoBeforeClickLabel=When you are ready and happy to continue with Setup, click Next. @@ -176,3 +187,6 @@ MoveFileToUsersArea('program.txt'); MoveFileToUsersArea('programs.xml'); end; + + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-08 13:47:04
|
Revision: 4746 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4746&view=rev Author: adcockj Date: 2010-04-08 13:46:57 +0000 (Thu, 08 Apr 2010) Log Message: ----------- Updated year Modified Paths: -------------- trunk/DScaler/DScaler/RES/STARTUP.BMP Modified: trunk/DScaler/DScaler/RES/STARTUP.BMP =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-08 13:42:40
|
Revision: 4745 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4745&view=rev Author: adcockj Date: 2010-04-08 13:42:34 +0000 (Thu, 08 Apr 2010) Log Message: ----------- Better handling of repainting of splash screen, especially when dscaler is always on top Modified Paths: -------------- trunk/DScaler/DScaler/Splash.cpp Modified: trunk/DScaler/DScaler/Splash.cpp =================================================================== --- trunk/DScaler/DScaler/Splash.cpp 2010-04-08 13:41:16 UTC (rev 4744) +++ trunk/DScaler/DScaler/Splash.cpp 2010-04-08 13:42:34 UTC (rev 4745) @@ -74,6 +74,7 @@ BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY); SelectObject(hMemDC, hOldBm); DeleteDC(hMemDC); + InvalidateRect(GetDlgItem(hDlg, IDC_LIST1), NULL, FALSE); EndPaint(hDlg, &wps); return TRUE; break; @@ -94,6 +95,8 @@ void ShowSpashScreen() { SplashWnd = CreateDialog(hResourceInst, MAKEINTRESOURCE(IDD_SPLASHBOX), NULL, SplashProc); + ShowWindow(SplashWnd, SW_SHOW); + UpdateWindow(SplashWnd); } void HideSplashScreen() @@ -111,10 +114,17 @@ if(SplashWnd) { int nItem; - nItem = ListBox_AddString(GetDlgItem(SplashWnd, IDC_LIST1), szText); - ListBox_SetCurSel(GetDlgItem(SplashWnd, IDC_LIST1), nItem); - InvalidateRect(GetDlgItem(SplashWnd, IDC_LIST1), NULL, TRUE); - Sleep(20); - } + HWND listWnd(GetDlgItem(SplashWnd, IDC_LIST1)); + nItem = ListBox_AddString(listWnd, szText); + ListBox_SetCurSel(listWnd, nItem); + // update the list box + UpdateWindow(listWnd); + // make sure we're on top + // otherwise we don't get painted + SetWindowPos(SplashWnd,HWND_TOPMOST, + 0,0,0,0, + SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW | SWP_NOACTIVATE); + + } LOG(1, szText); } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-08 13:41:22
|
Revision: 4744 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4744&view=rev Author: adcockj Date: 2010-04-08 13:41:16 +0000 (Thu, 08 Apr 2010) Log Message: ----------- Updated year Modified Paths: -------------- trunk/DScaler/Api/DScalerVersion.h trunk/DScaler/DScalerRes/DScalerRes.rc trunk/DScaler/DScalerRes/VersionRes.rc Modified: trunk/DScaler/Api/DScalerVersion.h =================================================================== --- trunk/DScaler/Api/DScalerVersion.h 2010-04-08 11:36:20 UTC (rev 4743) +++ trunk/DScaler/Api/DScalerVersion.h 2010-04-08 13:41:16 UTC (rev 4744) @@ -21,7 +21,7 @@ // should be updated before each release #define DSCALERVERSION_MAJOR 4 #define DSCALERVERSION_MINOR 1 -#define DSCALERVERSION_REVISION 19 +#define DSCALERVERSION_REVISION 20 // need to have an extra macro for stingify otherwise we get the // name of the definition not the value @@ -32,6 +32,6 @@ #define VERSTRING MAKEVERSTRING(DSCALERVERSION_MAJOR, DSCALERVERSION_MINOR, DSCALERVERSION_REVISION) #define VERSTRING_ZT MAKEVERSTRING_ZT(DSCALERVERSION_MAJOR, DSCALERVERSION_MINOR, DSCALERVERSION_REVISION) -#define COPYRIGHT_ZT "Copyright \xA9 2009\0" +#define COPYRIGHT_ZT "Copyright \xA9 2010\0" #endif Modified: trunk/DScaler/DScalerRes/DScalerRes.rc =================================================================== --- trunk/DScaler/DScalerRes/DScalerRes.rc 2010-04-08 11:36:20 UTC (rev 4743) +++ trunk/DScaler/DScalerRes/DScalerRes.rc 2010-04-08 13:41:16 UTC (rev 4744) @@ -287,7 +287,7 @@ EXSTYLE WS_EX_NOPARENTNOTIFY | WS_EX_TOOLWINDOW FONT 8, "System", 0, 0, 0x1 BEGIN - LISTBOX IDC_LIST1,38,140,66,48,NOT LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | NOT WS_BORDER | WS_TABSTOP + LISTBOX IDC_LIST1,38,140,66,48,NOT LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | NOT WS_BORDER END IDD_VIDEOSETTINGS DIALOGEX 0, 0, 358, 158 @@ -462,7 +462,7 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,105,127,58,13 CTEXT "DScaler Version 4.x",IDC_VERSION,0,3,277,9 - CTEXT "Copyright \xA9 2000-2009 John Adcock",IDC_STATIC,0,27,277,10 + CTEXT "Copyright \xA9 2000-2010 John Adcock",IDC_STATIC,0,27,277,10 GROUPBOX "License Information",IDC_STATIC,0,39,277,82 CTEXT "http://www.dscaler.org",IDC_LINK,0,15,277,9,SS_NOTIFY | SS_SUNKEN LTEXT "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.",IDC_STATIC,3,51,273,26 Modified: trunk/DScaler/DScalerRes/VersionRes.rc =================================================================== --- trunk/DScaler/DScalerRes/VersionRes.rc 2010-04-08 11:36:20 UTC (rev 4743) +++ trunk/DScaler/DScalerRes/VersionRes.rc 2010-04-08 13:41:16 UTC (rev 4744) @@ -27,7 +27,7 @@ VALUE "FileDescription", "DScaler English (US) Resources\0" VALUE "FileVersion", VERSTRING_ZT VALUE "InternalName", "DScaler Resources\0" - VALUE "LegalCopyright", "Copyright \xA9 2009\0" + VALUE "LegalCopyright", COPYRIGHT_ZT VALUE "LegalTrademarks", "This Program is covered by the term of the GNU GPL\0" VALUE "OriginalFilename", "DScalerRes.dll\0" VALUE "PrivateBuild", "\0" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-04-08 11:36:27
|
Revision: 4743 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4743&view=rev Author: adcockj Date: 2010-04-08 11:36:20 +0000 (Thu, 08 Apr 2010) Log Message: ----------- Fixes for GDI leaks and other issues identified using boundschecker Modified Paths: -------------- trunk/DScaler/DScaler/Audio.cpp trunk/DScaler/DScaler/Bitmap.cpp trunk/DScaler/DScaler/Bitmap.h trunk/DScaler/DScaler/BitmapAsButton.h trunk/DScaler/DScaler/LibraryCache.cpp trunk/DScaler/DScaler/MixerDevClasses.cpp trunk/DScaler/DScaler/OverlayOutput.cpp trunk/DScaler/DScaler/SettingsMaster.cpp trunk/DScaler/DScaler/Splash.cpp trunk/DScaler/DScaler/ToolbarWindow.cpp trunk/DScaler/DScaler/ToolbarWindow.h trunk/DScaler/DScaler/Toolbars.cpp trunk/DScaler/DScaler/Toolbars.h trunk/DScaler/DScaler/WindowBorder.cpp trunk/DScaler/DScaler/WindowBorder.h trunk/DScaler/DScaler/dshowsource/DSSource.cpp trunk/DScaler/DScaler/events.cpp trunk/DScaler/DScaler/events.h Modified: trunk/DScaler/DScaler/Audio.cpp =================================================================== --- trunk/DScaler/DScaler/Audio.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Audio.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -27,9 +27,10 @@ #include "Status.h" #include "MixerDev.h" #include "Providers.h" +#include "ProtectCode.h" #include "DebugLog.h" -CRITICAL_SECTION AudioMuteCriticalSection; +CCanLock AudioMuteLocker; DWORD dwTimerProcThreadId = 0; BYTE AudioMuteStatus = 0; BOOL bUserMute = FALSE; @@ -43,11 +44,6 @@ void Initialize_Mute() { - // This critical section isn't needed but may - // be in future if Audio_Mute/Unmute are going - // to be used asynchronously. - InitializeCriticalSection(&AudioMuteCriticalSection); - // Set the timer proc to only be called on this thread dwTimerProcThreadId = GetCurrentThreadId(); @@ -63,7 +59,7 @@ void Audio_Mute(DWORD PostMuteDelay) { - EnterCriticalSection(&AudioMuteCriticalSection); + CProtectCode inScope(&AudioMuteLocker); // Multi-state muting and the handling PostMuteDelay // and PreMuteDelay within these two simple @@ -89,15 +85,13 @@ } } - LeaveCriticalSection(&AudioMuteCriticalSection); - LOG(2, _T(" Mute Called Status on Exit %d"), AudioMuteStatus); } void Audio_Unmute(DWORD PreUnmuteDelay) { - EnterCriticalSection(&AudioMuteCriticalSection); + CProtectCode inScope(&AudioMuteLocker); if(AudioMuteStatus > 0) { @@ -136,7 +130,6 @@ } } - LeaveCriticalSection(&AudioMuteCriticalSection); LOG(2, _T(" UnMute Called Status on Exit %d"), AudioMuteStatus); } Modified: trunk/DScaler/DScaler/Bitmap.cpp =================================================================== --- trunk/DScaler/DScaler/Bitmap.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Bitmap.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -177,8 +177,8 @@ BITMAP bm; ::GetObject(hBmpMask, sizeof(bm), &bm); - HDC hDC = ::CreateCompatibleDC(NULL); - SmartHandle<HBITMAP> h((HBITMAP)::SelectObject(hDC, hBmpMask)); + HDC hDC = CreateCompatibleDC(NULL); + HBITMAP hOld =(HBITMAP)SelectObject(hDC, hBmpMask); for (int y = 0; y < bm.bmHeight; y++) { @@ -209,8 +209,8 @@ // Go to next row (remember, the bitmap is inverted vertically) } - ::SelectObject(hDC, h); - ::DeleteDC(hDC); + SelectObject(hDC, hOld); + DeleteDC(hDC); return TRUE; } @@ -226,23 +226,20 @@ if (NumRects == 0) return NULL; do { - Num = 2000; //win98 gets confused if number of rects gets large - if (NumRects < Num) { Num = NumRects; } + Num = min(2000, NumRects); //win98 gets confused if number of rects gets large - HANDLE hData = ::GlobalAlloc(GMEM_MOVEABLE, sizeof(RGNDATAHEADER) + (sizeof(RECT) * Num)); - RGNDATA *pData = (RGNDATA *)::GlobalLock(hData); + HLOCAL hData = LocalAlloc(LMEM_MOVEABLE, sizeof(RGNDATAHEADER) + (sizeof(RECT) * Num)); + RGNDATA *pData = (RGNDATA *)LocalLock(hData); pData->rdh.dwSize = sizeof(RGNDATAHEADER); pData->rdh.iType = RDH_RECTANGLES; pData->rdh.nCount = Num; pData->rdh.nRgnSize = 0; pData->rdh.rcBound = rcBound; - //::SetRect(&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0); RECT *prDest = (RECT *)&pData->Buffer; for (int i = 0; i < Num; i++) { - RECT prSource = RegionList[i]; - *prDest = prSource; + *prDest = RegionList[i]; if (pPosition != NULL) { prDest->left += pPosition->x; @@ -253,19 +250,20 @@ prDest++; } - HRGN h = ::ExtCreateRegion(NULL, sizeof(RGNDATAHEADER) + (sizeof(RECT) * Num), pData); + HRGN h = ExtCreateRegion(NULL, sizeof(RGNDATAHEADER) + (sizeof(RECT) * Num), pData); if (hRgn != NULL) { - ::CombineRgn(hRgn, hRgn, h, RGN_OR); - ::DeleteObject(h); + CombineRgn(hRgn, hRgn, h, RGN_OR); + DeleteObject(h); } else { hRgn = h; } - ::GlobalFree(hData); + LocalUnlock(hData); + LocalFree(hData); NumRects -= Num; } while (NumRects>0); @@ -279,7 +277,7 @@ if(!hbmp) return; HDC memdc; memdc = ::CreateCompatibleDC(hDC); - ::SelectObject(memdc,hbmp); + HGDIOBJ oldBmp = SelectObject(memdc,hbmp); int startbmx = 0; int startbmy = 0; int startx; @@ -288,7 +286,7 @@ int x,y,z; BITMAP bm; - ::GetObject (hbmp, sizeof (bm), & bm); + GetObject (hbmp, sizeof (bm), & bm); int bx = bm.bmWidth; int by = bm.bmHeight; int drawy = by; @@ -302,16 +300,21 @@ drawy = by-startbmy; } - for (y = 0; y < h ; y += drawy){ + for (y = 0; y < h ; y += drawy) + { if ((y+drawy)>h) drawy=h-y; startx=startbmx; z=bx-startx; - for (x = 0 ; x < w ; x += z){ - if ((x+z)>w) { + for (x = 0 ; x < w ; x += z) + { + if ((x+z)>w) + { z=w-x; BitBlt(hDC, r->left + x, r->top + y, z, drawy, memdc, startx, startbmy, SRCCOPY); //LOG(2,_T("DrawBM: (%d,%d,%dx%d) (bm: %d,%d)"),r->left+x,r->top+y,z,by,startx,startbmy); - } else { + } + else + { BitBlt(hDC, r->left + x, r->top + y, z, drawy, memdc, startx, startbmy, SRCCOPY); //LOG(2,_T("DrawBM: (%d,%d,%dx%d) (bm: %d,%d)"),r->left+x,r->top+y,z,by,startx,startbmy); } @@ -325,7 +328,8 @@ } } - ::DeleteDC(memdc); + SelectObject(memdc, oldBmp); + DeleteDC(memdc); } void CBitmapHolder::BitmapDraw(HDC hDC, SmartHandle<HBITMAP> hbmp, SmartHandle<HBITMAP> hmask, POINT * bmstart, LPRECT r, int DrawMode) @@ -351,28 +355,32 @@ int cx=r->right - r->left; int cy=r->bottom - r->top; HDC dcBmp, dcMask; - dcBmp = ::CreateCompatibleDC(hDC); - ::SelectObject(dcBmp, hbmp); + dcBmp = CreateCompatibleDC(hDC); + HGDIOBJ oldBmp = SelectObject(dcBmp, hbmp); - if (hmask!=NULL){ - dcMask = ::CreateCompatibleDC(hDC); - ::SelectObject(dcMask, hmask); + if (hmask!=NULL) + { + dcMask = CreateCompatibleDC(hDC); + SelectObject(dcMask, hmask); HDC hdcMem; - hdcMem = ::CreateCompatibleDC(hDC); + hdcMem = CreateCompatibleDC(hDC); HBITMAP hBitmap; - hBitmap = ::CreateCompatibleBitmap(hDC,cx,cy); - ::SelectObject(hdcMem, hBitmap); + hBitmap = CreateCompatibleBitmap(hDC,cx,cy); + SelectObject(hdcMem, hBitmap); BitBlt(hdcMem,r->left,r->top,cx,cy,hDC,startbmx,startbmy,SRCCOPY); - if(!DrawMode){ + if(!DrawMode) + { BitBlt(hdcMem,r->left,r->top,cx,cy,dcBmp,startbmx,startbmy,SRCINVERT); BitBlt(hdcMem,r->left,r->top,cx,cy,dcMask,startbmx,startbmy,SRCAND); BitBlt(hdcMem,r->left,r->top,cx,cy,dcBmp,startbmx,startbmy,SRCINVERT); - } else { + } + else + { BITMAP bm; - ::GetObject (hbmp, sizeof (bm), & bm); + GetObject (hbmp, sizeof (bm), & bm); int bx = bm.bmWidth; int by = bm.bmHeight; @@ -385,23 +393,31 @@ BitBlt(hDC, r->left,r->top,cx,cy,hdcMem,0,0,SRCCOPY); - ::DeleteDC(hdcMem); - ::DeleteObject(hBitmap); + DeleteDC(hdcMem); + DeleteObject(hBitmap); - ::DeleteDC(dcMask); - } else { + DeleteDC(dcMask); + } + else + { //LOG(2,_T("DrawBM: to (%d,%d,%dx%d) (bm %d,%d)"),r->left,r->top,cx,cy,startbmx,startbmy); - if(!DrawMode){ + if(!DrawMode) + { BitBlt(hDC, r->left,r->top,cx,cy,dcBmp,startbmx,startbmy,SRCCOPY); - } else { + } + else + { BITMAP bm; - ::GetObject (hbmp, sizeof (bm), & bm); + GetObject (hbmp, sizeof (bm), & bm); int bx = bm.bmWidth; int by = bm.bmHeight; StretchBlt(hDC, r->left,r->top,cx,cy,dcBmp,startbmx,startbmy,bx,by,SRCCOPY); } } - ::DeleteDC(dcBmp); + + SelectObject(dcBmp, oldBmp); + + DeleteDC(dcBmp); } SmartHandle<HBITMAP> CBitmapHolder::BitmapCopyPieceRGB(HDC hdestDC, HDC hsrcDC, LPRECT lpRect) @@ -413,80 +429,17 @@ 1, 32, BI_RGB, 0,0,0,0, 0}; void *pvBits; - SmartHandle<HBITMAP> hNewBmp(::CreateDIBSection(hdestDC,(BITMAPINFO *)&bmi,DIB_RGB_COLORS,&pvBits,NULL,0)); + SmartHandle<HBITMAP> hNewBmp(CreateDIBSection(hdestDC,(BITMAPINFO *)&bmi,DIB_RGB_COLORS,&pvBits,NULL,0)); - ::SelectObject(hdestDC, hNewBmp); - ::BitBlt(hdestDC, 0,0, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top, hsrcDC, lpRect->left, lpRect->top, SRCCOPY); + HGDIOBJ oldBmp = SelectObject(hdestDC, hNewBmp); - return hNewBmp; -} + BitBlt(hdestDC, 0,0, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top, hsrcDC, lpRect->left, lpRect->top, SRCCOPY); + SelectObject(hdestDC, oldBmp); -///\todo: Doesn't work? fix it -// load *.bmp, *.jpg, *.gif, *.ico, *.emf, or *.wmf files -SmartHandle<HBITMAP> CBitmapHolder::BitmapLoadFromFile(const TCHAR* szFile) -{ - SmartHandle<HBITMAP> ret; - - LPPICTURE gpPicture; - // open file - HANDLE hFile = CreateFile(szFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); - if (INVALID_HANDLE_VALUE == hFile) return ret; - - // get file size - DWORD dwFileSize = GetFileSize(hFile, NULL); - if (-1 != dwFileSize) - { - LPVOID pvData = NULL; - // alloc memory based on file size - HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); - if (NULL != hGlobal) - { - - pvData = GlobalLock(hGlobal); - if (NULL != pvData) - { - DWORD dwBytesRead = 0; - // read file and store in global memory - BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL); - if (bRead != FALSE) - { - LPSTREAM pstm = NULL; - // create IStream* from global memory - HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm); - if (SUCCEEDED(hr) && pstm) - { - // Create IPicture from image file - hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture); - if (SUCCEEDED(hr) && gpPicture) - { - pstm->Release(); - - OLE_HANDLE m_picHandle; - - gpPicture->get_Handle(&m_picHandle); - - HDC hdc = CreateCompatibleDC(NULL); - - SelectObject(hdc, (HGDIOBJ) m_picHandle); - - ret = (HBITMAP)GetCurrentObject(hdc, OBJ_BITMAP); - - DeleteDC(hdc); - } - } - - } - GlobalUnlock(hGlobal); - } - } - - } - CloseHandle(hFile); - return ret; + return hNewBmp; } - //////////////////////////////////////////////////////////////////////////////// // Cache for bitmaps from disk ///////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -494,11 +447,7 @@ { if(m_CacheList.find(szFileName) == m_CacheList.end()) { - SmartHandle<HBITMAP> hBmp = CBitmapHolder::BitmapLoadFromFile(szFileName); - if (!hBmp) - { - hBmp = (HBITMAP)::LoadImage(NULL,szFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE); - } + SmartHandle<HBITMAP> hBmp((HBITMAP)LoadImage(NULL,szFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE)); m_CacheList[szFileName] = hBmp; return hBmp; } @@ -596,11 +545,11 @@ } BITMAP bm1; BITMAP bm2; - if(::GetObject (hMainBmp, sizeof (bm1), & bm1) == 0) + if(GetObject (hMainBmp.GetRawHandle(), sizeof (bm1), & bm1) == 0) { return -5; } - if(::GetObject (hMainBmpMask, sizeof (bm2), & bm2) == 0) + if(GetObject (hMainBmpMask.GetRawHandle(), sizeof (bm2), & bm2) == 0) { return -5; } @@ -651,18 +600,20 @@ && (right>left) && (bottom>top)) { RECT rc; - ::SetRect(&rc,left,top,right,bottom); - ::SelectObject(hsrcDC, hMainBmp); + SetRect(&rc,left,top,right,bottom); + HGDIOBJ oldBmp = SelectObject(hsrcDC, hMainBmp); hBmp = CBitmapHolder::BitmapCopyPieceRGB(hdestDC, hsrcDC, &rc); if (hMainBmpMask != NULL) { - ::SelectObject(hsrcDC, hMainBmpMask); + SelectObject(hsrcDC, hMainBmpMask); hBmpMask = CBitmapHolder::BitmapCopyPieceRGB(hdestDC, hsrcDC, &rc); } (*it).second = SmartPtr<CBitmapState>(new CBitmapState(hBmp, hBmpMask)); (*it).second->m_ExtraInfo = szExtra; Result = 0; + + SelectObject(hsrcDC, oldBmp); } else { @@ -679,8 +630,8 @@ } } - ::DeleteDC(hsrcDC); - ::DeleteDC(hdestDC); + DeleteDC(hsrcDC); + DeleteDC(hdestDC); return Result; } Modified: trunk/DScaler/DScaler/Bitmap.h =================================================================== --- trunk/DScaler/DScaler/Bitmap.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Bitmap.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -71,9 +71,6 @@ static HRGN CreateWindowRegion(RECT& rcBound, std::vector<RECT>& RegionList, POINT* pPosition = NULL); static BOOL BitmapToRegionList(SmartHandle<HBITMAP> hBmpMask, std::vector<RECT>& RegionList); - static SmartHandle<HBITMAP> BitmapLoadFromFile(const TCHAR* szFile); - //static void BitmapLoad_Free(HBITMAP hBm); - protected: BOOL MakeRegionList(); Modified: trunk/DScaler/DScaler/BitmapAsButton.h =================================================================== --- trunk/DScaler/DScaler/BitmapAsButton.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/BitmapAsButton.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -74,8 +74,41 @@ ... */ -class CBitmapAsButton { +class CBitmapAsButton +{ +public: + CBitmapAsButton(eBitmapAsButtonType ButtonType); + ~CBitmapAsButton(); + + HWND hWnd() { if (bFailed) return NULL; return hWndButton; } + int Width() { return ButtonWidth; } + int Height() { return ButtonHeight; } + tstring GetID() { return sID; } + + void AddBitmap(int State, SmartPtr<CBitmapState> BitmapState); + + HRGN SetRegion(); + + void SetProcessMessage(void *pThis, BUTTONPROC* pfnButtonProc) + { + this->pfnButtonProc_pThis = pThis; + this->pfnButtonProc = pfnButtonProc; + } + + BOOL Create(tstring sID, HWND hWndParent, int x, int y, HINSTANCE hInst); + BOOL TakeOver(HWND hWnd, tstring sID, HWND hWndParent); + BOOL RestoreBack(HWND hWnd = NULL); + protected: + + void Draw(HDC hDC, LPRECT lpRect); + void SetWindowRegion(); + + LRESULT ButtonProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); + + static LRESULT CALLBACK StaticButtonProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); + +protected: tstring sID; eBitmapAsButtonType ButtonType; @@ -108,36 +141,6 @@ int SliderPos; int SliderRangeMin; int SliderRangeMax; -protected: - - void Draw(HDC hDC, LPRECT lpRect); - void SetWindowRegion(); - - LRESULT ButtonProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); - - static LRESULT CALLBACK StaticButtonProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -public: - CBitmapAsButton(eBitmapAsButtonType ButtonType); - ~CBitmapAsButton(); - - HWND hWnd() { if (bFailed) return NULL; return hWndButton; } - int Width() { return ButtonWidth; } - int Height() { return ButtonHeight; } - tstring GetID() { return sID; } - - void AddBitmap(int State, SmartPtr<CBitmapState> BitmapState); - - HRGN SetRegion(); - - void SetProcessMessage(void *pThis, BUTTONPROC* pfnButtonProc) - { - this->pfnButtonProc_pThis = pThis; - this->pfnButtonProc = pfnButtonProc; - } - - BOOL Create(tstring sID, HWND hWndParent, int x, int y, HINSTANCE hInst); - BOOL TakeOver(HWND hWnd, tstring sID, HWND hWndParent); - BOOL RestoreBack(HWND hWnd = NULL); }; Modified: trunk/DScaler/DScaler/LibraryCache.cpp =================================================================== --- trunk/DScaler/DScaler/LibraryCache.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/LibraryCache.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -22,7 +22,10 @@ void LibraryCache::Unload(LibraryMap::value_type& MapValueToUnload) { - FreeLibrary(MapValueToUnload.second); + if(MapValueToUnload.second != NULL) + { + FreeLibrary(MapValueToUnload.second); + } } HMODULE LibraryCache::GetLibraryHandle(const TCHAR* LibaryName) Modified: trunk/DScaler/DScaler/MixerDevClasses.cpp =================================================================== --- trunk/DScaler/DScaler/MixerDevClasses.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/MixerDevClasses.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -34,6 +34,8 @@ # if VER_PRODUCTMAJORVERSION > 5 # include "Mmdeviceapi.h" # define __IKsJackDescription_INTERFACE_DEFINED__ +# define __IKsJackDescription2_INTERFACE_DEFINED__ +# define __IKsJackSinkInformation_INTERFACE_DEFINED__ # include "Endpointvolume.h" # define _DO_NEW_MIXER_CODE_ #else Modified: trunk/DScaler/DScaler/OverlayOutput.cpp =================================================================== --- trunk/DScaler/DScaler/OverlayOutput.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/OverlayOutput.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -88,7 +88,7 @@ //----------------------------------------------------------------------------- BOOL COverlayOutput::ListMonitors(HWND hWnd) { - static DynamicFunctionS3<HRESULT, LPDDENUMCALLBACKEX, LPVOID, DWORD> lpDDEnumEx(_T("ddraw.lib"), ADD_API_LETTER(DirectDrawEnumerateEx)); + static DynamicFunctionS3<HRESULT, LPDDENUMCALLBACKEX, LPVOID, DWORD> lpDDEnumEx(_T("ddraw.dll"), ADD_API_LETTER(DirectDrawEnumerateEx)); BOOL RetVal = TRUE; // Retrieve the function from the DirectDraw DLL Modified: trunk/DScaler/DScaler/SettingsMaster.cpp =================================================================== --- trunk/DScaler/DScaler/SettingsMaster.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/SettingsMaster.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -406,7 +406,7 @@ Providers_WriteToIni(bOptimizeFileAccess); // These two lines flushes current INI file to disk (in case of abrupt poweroff shortly afterwards) - WritePrivateProfileString(NULL, NULL, NULL, m_sIniFile.c_str()); + WritePrivateProfileString(NULL, NULL, NULL, NULL); //BeautifyIniFile(m_sIniFile.c_str()); } Modified: trunk/DScaler/DScaler/Splash.cpp =================================================================== --- trunk/DScaler/DScaler/Splash.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Splash.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -74,7 +74,6 @@ BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY); SelectObject(hMemDC, hOldBm); DeleteDC(hMemDC); - DeleteDC(hdc); EndPaint(hDlg, &wps); return TRUE; break; Modified: trunk/DScaler/DScaler/ToolbarWindow.cpp =================================================================== --- trunk/DScaler/DScaler/ToolbarWindow.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/ToolbarWindow.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -116,12 +116,7 @@ { if (vChildList[i].pChild != NULL) { - ::SetWindowLongPtr(vChildList[i].pChild->GethWnd(), GWLP_USERDATA, NULL); - - - //Doesn't work. - //Is 'pure virtual function call', somehow fix this.. - //delete vChildList[i].pChild; + delete vChildList[i].pChild; } } vChildList.clear(); @@ -887,6 +882,19 @@ { int i; + if (m_BgBrush != NULL) + { + DeleteObject(m_BgBrush); + } + if (m_hPen3DShadow != NULL) + { + DeleteObject(m_hPen3DShadow); + } + if (m_hPen3DLight != NULL) + { + DeleteObject(m_hPen3DLight); + } + for (i = 0; i < Buttons.size(); i++) { if (Buttons[i] != NULL) @@ -1224,17 +1232,17 @@ LPRECT lpRect = &pDrawItem->rcItem; if ((m_hPen3DShadow != NULL) && (m_hPen3DLight!=NULL)) { - HPEN hPenOld = (HPEN)::SelectObject(pDrawItem->hDC, m_hPen3DShadow); + HPEN hPenOld = (HPEN)SelectObject(pDrawItem->hDC, m_hPen3DShadow); MoveToEx(pDrawItem->hDC, lpRect->left, lpRect->bottom-1, NULL); LineTo(pDrawItem->hDC, lpRect->left, lpRect->top); LineTo(pDrawItem->hDC, lpRect->right-1, lpRect->top); - ::SelectObject(pDrawItem->hDC, m_hPen3DLight); + SelectObject(pDrawItem->hDC, m_hPen3DLight); LineTo(pDrawItem->hDC, lpRect->right-1, lpRect->bottom-1); LineTo(pDrawItem->hDC, lpRect->left, lpRect->bottom-1); - ::SelectObject(pDrawItem->hDC, hPenOld); + SelectObject(pDrawItem->hDC, hPenOld); } } if (hIcon != NULL) @@ -1247,7 +1255,7 @@ if (GetIconInfo(hIcon, &IconInfo)) //try to align icon { BITMAP bm; - if (::GetObject (IconInfo.hbmColor, sizeof (bm), & bm)) + if (GetObject (IconInfo.hbmColor, sizeof (bm), & bm)) { int BmWidth = bm.bmWidth; int BmHeight = bm.bmHeight; @@ -1271,6 +1279,8 @@ X += pDrawItem->rcItem.left; Y += pDrawItem->rcItem.top; } + DeleteObject(IconInfo.hbmMask); + DeleteObject(IconInfo.hbmColor); } if (pDrawItem->itemState & ODS_SELECTED) Modified: trunk/DScaler/DScaler/ToolbarWindow.h =================================================================== --- trunk/DScaler/DScaler/ToolbarWindow.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/ToolbarWindow.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -105,7 +105,7 @@ BOOL Add(CToolbarChild *pChild, eToolbarRowAlign Align, int Order, int Row); void Remove(CToolbarChild *pChild); CToolbarWindow(HWND hWndParent, HINSTANCE hInst, int Child); - ~CToolbarWindow(); + virtual ~CToolbarWindow(); BOOL Visible() { return IsToolbarVisible; } void AdjustArea(RECT *ar, int Crop); @@ -137,26 +137,10 @@ class CToolbarChild { -protected: - HWND hWnd; - HINSTANCE hResourceInst; - CToolbarWindow *m_pToolbar; - std::vector<CBitmapAsButton*> Buttons; - CBitmapsFromIniSection BitmapsFromIniSection; +public: + CToolbarChild(CToolbarWindow *pToolbar); + virtual ~CToolbarChild(); - virtual LRESULT ToolbarChildProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) = 0; - - int m_PosX; - int m_PosY; - int m_PosW; - int m_PosH; - - HBRUSH m_BgBrush; - HPEN m_hPen3DShadow; - HPEN m_hPen3DLight; - - int m_Visible; -public: int Visible(); BOOL Show(); @@ -176,9 +160,6 @@ virtual void UpdateWindow() {;}; - CToolbarChild(CToolbarWindow *pToolbar); - ~CToolbarChild(); - virtual HWND Create(LPCTSTR szClassName, HINSTANCE hResourceInst); virtual HWND CreateFromDialog(LPCTSTR lpTemplate, HINSTANCE hResourceInst); @@ -193,6 +174,26 @@ static LRESULT CALLBACK StaticToolbarChildProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK StaticToolbarChildDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); static LRESULT StaticToolbarChildButtonProc(tstring sID, void *pThis, HWND hWndParent, UINT MouseFlags, HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); + +protected: + HWND hWnd; + HINSTANCE hResourceInst; + CToolbarWindow *m_pToolbar; + std::vector<CBitmapAsButton*> Buttons; + CBitmapsFromIniSection BitmapsFromIniSection; + + virtual LRESULT ToolbarChildProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) = 0; + + int m_PosX; + int m_PosY; + int m_PosW; + int m_PosH; + + HBRUSH m_BgBrush; + HPEN m_hPen3DShadow; + HPEN m_hPen3DLight; + + int m_Visible; }; #endif Modified: trunk/DScaler/DScaler/Toolbars.cpp =================================================================== --- trunk/DScaler/DScaler/Toolbars.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Toolbars.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -80,17 +80,29 @@ { if (m_hIconChannelUp != NULL) { - ::DestroyIcon(m_hIconChannelUp); + if(!DestroyIcon(m_hIconChannelUp)) + { + DeleteObject(m_hIconChannelUp); + } m_hIconChannelUp = NULL; } if (m_hIconChannelDown != NULL) { - ::DestroyIcon(m_hIconChannelDown); + if(!DestroyIcon(m_hIconChannelDown)) + { + DeleteObject(m_hIconChannelDown); + } m_hIconChannelDown = NULL; } if (m_hIconChannelPrevious != NULL) { - ::DestroyIcon(m_hIconChannelPrevious); + if(!DestroyIcon(m_hIconChannelPrevious)) + { + if(!(DeleteObject(m_hIconChannelPrevious))) + { + MessageBox(NULL, _T("Help"), _T("Help"), MB_OK); + } + } m_hIconChannelPrevious = NULL; } } Modified: trunk/DScaler/DScaler/Toolbars.h =================================================================== --- trunk/DScaler/DScaler/Toolbars.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Toolbars.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -34,7 +34,7 @@ { public: CToolbarChannels(CToolbarWindow *pToolbar); - ~CToolbarChannels(); + virtual ~CToolbarChannels(); HWND CreateFromDialog(LPCTSTR lpTemplate, HINSTANCE hResourceInst); void Reset(); @@ -62,7 +62,7 @@ { public: CToolbarVolume(CToolbarWindow *pToolbar); - ~CToolbarVolume(); + virtual ~CToolbarVolume(); LRESULT ToolbarChildProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); @@ -138,7 +138,7 @@ HBITMAP hBmp; public: CToolbar1Bar(CToolbarWindow *pToolbar); - ~CToolbar1Bar(); + virtual ~CToolbar1Bar(); HWND Create(LPCTSTR lpClassName, HINSTANCE hResourceInst); LRESULT ToolbarChildProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); BOOL LoadSkin(const TCHAR* szSkinIniFile, const TCHAR* szSection, std::vector<int> *Results); Modified: trunk/DScaler/DScaler/WindowBorder.cpp =================================================================== --- trunk/DScaler/DScaler/WindowBorder.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/WindowBorder.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -91,13 +91,13 @@ //Width of bitmap at border position 'Pos' int CWindowBorder::BmpWidth(int Pos) { - if (!Bitmaps[Pos].IsValid()) return 0; + if (Bitmaps.size() < WINDOWBORDER_LASTONE || !Bitmaps[Pos].IsValid()) return 0; return Bitmaps[Pos]->Width(); } int CWindowBorder::BmpHeight(int Pos) { - if (!Bitmaps[Pos].IsValid()) return 0; + if (Bitmaps.size() < WINDOWBORDER_LASTONE || !Bitmaps[Pos].IsValid()) return 0; return Bitmaps[Pos]->Height(); } @@ -240,14 +240,8 @@ if (bBitmapsChanged) { bBitmapsChanged = FALSE; + Bitmaps.resize(WINDOWBORDER_LASTONE); - if (Bitmaps.size() == 0) { - for (int Pos = 0; Pos < WINDOWBORDER_LASTONE; Pos++) - { - Bitmaps.push_back(SmartPtr<CBitmapHolder>()); - } - } - #define ADJUSTWIDTH(Pos) \ if ((Bitmaps[(Pos)].IsValid()) && (Bitmaps[(Pos)]->Width() > MaxWidth)) { MaxWidth = Bitmaps[(Pos)]->Width(); } #define ADJUSTHEIGHT(Pos) \ @@ -540,16 +534,16 @@ } } - POINT *pRowList = NULL; + std::vector<POINT> pRowList; POINT *p; - int *pRowListSize = NULL; + std::vector<int> pRowListSize; //LPRECT lpRc; //Process top lines if (TopSize > 0) { - vector<POINT> pRowList(TopSize * (TotalWidth+2)); - vector<int> pRowListSize(TopSize); + pRowList.resize(TopSize * (TotalWidth+2)); + pRowListSize.resize(TopSize); int h; for (h = 0; h < TopSize; h++) @@ -618,8 +612,10 @@ //Process bottom lines if (BottomSize > 0) { - pRowList = new POINT[BottomSize * (TotalWidth+2)]; - pRowListSize = new int[BottomSize]; + pRowList.clear(); + pRowListSize.clear(); + pRowList.resize(BottomSize * (TotalWidth+2)); + pRowListSize.resize(BottomSize); int h; for (h = 0; h < BottomSize; h++) { @@ -737,11 +733,9 @@ //LOG(2,_T("Skin: 0x%08x: Update area (%d,%d,%d,%d) at (%d,%d)"),this->hWnd,lpRect->left,lpRect->top,lpRect->right,lpRect->bottom,(pPShift==NULL)?0:pPShift->x,(pPShift==NULL)?0:pPShift->y); - if (Bitmaps.size() == 0) { - for (int Pos = 0; Pos < WINDOWBORDER_LASTONE; Pos++) - { - Bitmaps.push_back(SmartPtr<CBitmapHolder>()); - } + if (Bitmaps.size() == 0) + { + Bitmaps.resize(WINDOWBORDER_LASTONE); } RECT rcPaint; @@ -1007,6 +1001,7 @@ void CWindowBorder::ClearSkin() { Bitmaps.clear(); + bBitmapsChanged = TRUE; Buttons.clear(); Modified: trunk/DScaler/DScaler/WindowBorder.h =================================================================== --- trunk/DScaler/DScaler/WindowBorder.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/WindowBorder.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -128,7 +128,7 @@ static const TCHAR* szBorderNames[]; public: CWindowBorder(HWND hWnd, HINSTANCE hInst, BOOL (*CustomGetClientRect)(HWND hWnd, LPRECT lpRect) = NULL); - ~CWindowBorder(); + virtual ~CWindowBorder(); void AdjustArea(RECT *ar, int Crop); Modified: trunk/DScaler/DScaler/dshowsource/DSSource.cpp =================================================================== --- trunk/DScaler/DScaler/dshowsource/DSSource.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/dshowsource/DSSource.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -449,7 +449,7 @@ m_VideoFmt.push_back(fmt); } - delete pcData; + delete [] pcData; } ReadFromIni(); Modified: trunk/DScaler/DScaler/events.cpp =================================================================== --- trunk/DScaler/DScaler/events.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/events.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -152,7 +152,7 @@ { if (m_EventObjects[i].EventList != NULL) { - delete m_EventObjects[i].EventList; + delete [] m_EventObjects[i].EventList; } } else { NewList.push_back(m_EventObjects[i]); @@ -183,7 +183,7 @@ { if (m_EventObjects[i].EventList != NULL) { - delete m_EventObjects[i].EventList; + delete [] m_EventObjects[i].EventList; } } else { NewList.push_back(m_EventObjects[i]); @@ -431,7 +431,7 @@ RaiseScheduledEvent(ei.pEventObject, ei.Event, ei.OldValue, ei.NewValue, ei.ComingUp); if (ei.ComingUp != NULL) { - delete[] ei.ComingUp; + delete [] ei.ComingUp; } } else Modified: trunk/DScaler/DScaler/events.h =================================================================== --- trunk/DScaler/DScaler/events.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/events.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -66,7 +66,7 @@ { public: CEventObject(); - ~CEventObject(); + virtual ~CEventObject(); virtual void OnEvent(CEventObject *pEventObject, eEventType Event, long OldValue, long NewValue, eEventType *ComingUp) {;} }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-03-12 14:37:11
|
Revision: 4740 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4740&view=rev Author: adcockj Date: 2010-03-12 12:16:58 +0000 (Fri, 12 Mar 2010) Log Message: ----------- tag the current version Added Paths: ----------- vendor/ffmpeg/svn-22478/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2010-03-12 13:32:45
|
Revision: 4742 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4742&view=rev Author: adcockj Date: 2010-03-12 13:32:37 +0000 (Fri, 12 Mar 2010) Log Message: ----------- Added Justin Riggle's eac3_spx_8 patch to support spectral extensions in e-ac3 Modified Paths: -------------- trunk/DScaler5/ffmpeg/Changelog trunk/DScaler5/ffmpeg/libavcodec/ac3dec.c trunk/DScaler5/ffmpeg/libavcodec/ac3dec.h trunk/DScaler5/ffmpeg/libavcodec/ac3dec_data.c trunk/DScaler5/ffmpeg/libavcodec/ac3dec_data.h trunk/DScaler5/ffmpeg/libavcodec/eac3dec.c trunk/DScaler5/ffmpeg/libavcodec/eac3dec_data.c trunk/DScaler5/ffmpeg/libavcodec/eac3dec_data.h Modified: trunk/DScaler5/ffmpeg/Changelog =================================================================== --- trunk/DScaler5/ffmpeg/Changelog 2010-03-12 12:57:39 UTC (rev 4741) +++ trunk/DScaler5/ffmpeg/Changelog 2010-03-12 13:32:37 UTC (rev 4742) @@ -226,9 +226,9 @@ - Gopher client support - MXF D-10 muxer - generic metadata API +- spectral extension support in the E-AC-3 decoder - version 0.4.9-pre1: - DV encoder, DV muxer Modified: trunk/DScaler5/ffmpeg/libavcodec/ac3dec.c =================================================================== --- trunk/DScaler5/ffmpeg/libavcodec/ac3dec.c 2010-03-12 12:57:39 UTC (rev 4741) +++ trunk/DScaler5/ffmpeg/libavcodec/ac3dec.c 2010-03-12 13:32:37 UTC (rev 4742) @@ -815,15 +815,105 @@ /* spectral extension strategy */ if (s->eac3 && (!blk || get_bits1(gbc))) { - if (get_bits1(gbc)) { - av_log_missing_feature(s->avctx, "Spectral extension", 1); - return -1; + s->spx_in_use = get_bits1(gbc); + if (s->spx_in_use) { + int copy_start, start_subband, end_subband, start_freq, end_freq; + + /* determine which channels use spx */ + if (s->channel_mode == AC3_CHMODE_MONO) { + s->channel_uses_spx[1] = 1; + } else { + for (ch = 1; ch <= fbw_channels; ch++) + s->channel_uses_spx[ch] = get_bits1(gbc); + } + + /* get the frequency bins of the spx copy region and the spx start + and end subbands */ + copy_start = get_bits(gbc, 2); + start_subband = get_bits(gbc, 3) + 2; + if (start_subband > 7) + start_subband += start_subband - 7; + end_subband = get_bits(gbc, 3) + 5; + if (end_subband > 7) + end_subband += end_subband - 7; + copy_start = copy_start * 12 + 25; + start_freq = start_subband * 12 + 25; + end_freq = end_subband * 12 + 25; + + /* check validity of spx ranges */ + if (start_subband >= end_subband) { + av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension " + "range (%d >= %d)\n", start_subband, end_subband); + return -1; + } + if (copy_start >= start_freq) { + av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension " + "copy start bin (%d >= %d)\n", copy_start, start_freq); + return -1; + } + + s->spx_copy_start_freq = copy_start; + s->spx_start_freq = start_freq; + s->spx_end_freq = end_freq; + + decode_band_structure(gbc, blk, s->eac3, 0, + start_subband, end_subband, + ff_eac3_default_spx_band_struct, + &s->num_spx_bands, + s->spx_band_sizes); + } else { + for (ch = 1; ch <= fbw_channels; ch++) { + s->channel_uses_spx[ch] = 0; + s->first_spx_coords[ch] = 1; + } } - /* TODO: parse spectral extension strategy info */ } - /* TODO: spectral extension coordinates */ + /* spectral extension coordinates */ + if (s->spx_in_use) { + for (ch = 1; ch <= fbw_channels; ch++) { + if (s->channel_uses_spx[ch]) { + if (s->first_spx_coords[ch] || get_bits1(gbc)) { + float spx_blend; + int bin, master_spx_coord; + s->first_spx_coords[ch] = 0; + spx_blend = get_bits(gbc, 5) * (1.0f/32); + master_spx_coord = get_bits(gbc, 2) * 3; + + bin = s->spx_start_freq; + for (bnd = 0; bnd < s->num_spx_bands; bnd++) { + int bandsize; + int spx_coord_exp, spx_coord_mant; + float nratio, sblend, nblend, spx_coord; + + /* calculate blending factors */ + bandsize = s->spx_band_sizes[bnd]; + nratio = ((float)((bin + (bandsize >> 1))) / s->spx_end_freq) - spx_blend; + nratio = av_clipf(nratio, 0.0f, 1.0f); + nblend = sqrtf(3.0f * nratio); // noise is scaled by sqrt(3) to give unity variance + sblend = sqrtf(1.0f - nratio); + bin += bandsize; + + /* decode spx coordinates */ + spx_coord_exp = get_bits(gbc, 4); + spx_coord_mant = get_bits(gbc, 2); + if (spx_coord_exp == 15) spx_coord_mant <<= 1; + else spx_coord_mant += 4; + spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord); + spx_coord = spx_coord_mant * (1.0f/(1<<23)); + + /* multiply noise and signal blending factors by spx coordinate */ + s->spx_noise_blend [ch][bnd] = nblend * spx_coord; + s->spx_signal_blend[ch][bnd] = sblend * spx_coord; + } + } + } else { + s->first_spx_coords[ch] = 1; + } + } + } + /* coupling strategy */ if (s->eac3 ? s->cpl_strategy_exists[blk] : get_bits1(gbc)) { memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS); @@ -859,9 +949,9 @@ s->phase_flags_in_use = get_bits1(gbc); /* coupling frequency range */ - /* TODO: modify coupling end freq if spectral extension is used */ cpl_start_subband = get_bits(gbc, 4); - cpl_end_subband = get_bits(gbc, 4) + 3; + cpl_end_subband = s->spx_in_use ? (s->spx_start_freq - 37) / 12 : + get_bits(gbc, 4) + 3; if (cpl_start_subband >= cpl_end_subband) { av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n", cpl_start_subband, cpl_end_subband); @@ -934,8 +1024,11 @@ if (channel_mode == AC3_CHMODE_STEREO) { if ((s->eac3 && !blk) || get_bits1(gbc)) { s->num_rematrixing_bands = 4; - if(cpl_in_use && s->start_freq[CPL_CH] <= 61) + if (cpl_in_use && s->start_freq[CPL_CH] <= 61) { s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37); + } else if (s->spx_in_use && s->spx_start_freq <= 61) { + s->num_rematrixing_bands -= 1; + } for(bnd=0; bnd<s->num_rematrixing_bands; bnd++) s->rematrixing_flags[bnd] = get_bits1(gbc); } else if (!blk) { @@ -960,6 +1053,8 @@ int prev = s->end_freq[ch]; if (s->channel_in_cpl[ch]) s->end_freq[ch] = s->start_freq[CPL_CH]; + else if (s->channel_uses_spx[ch]) + s->end_freq[ch] = s->spx_start_freq; else { int bandwidth_code = get_bits(gbc, 6); if (bandwidth_code > 60) { @@ -1156,8 +1251,6 @@ /* TODO: generate enhanced coupling coordinates and uncouple */ - /* TODO: apply spectral extension */ - /* recover coefficients if rematrixing is in use */ if(s->channel_mode == AC3_CHMODE_STEREO) do_rematrixing(s); @@ -1173,6 +1266,10 @@ s->dsp.int32_to_float_fmul_scalar(s->transform_coeffs[ch], s->fixed_coeffs[ch], gain, 256); } + /* apply spectral extension to high frequency bins */ + if (s->spx_in_use) + ff_eac3_apply_spectral_extension(s); + /* downmix and MDCT. order depends on whether block switching is used for any channel in this block. this is because coefficients for the long and short transforms cannot be mixed. */ Modified: trunk/DScaler5/ffmpeg/libavcodec/ac3dec.h =================================================================== --- trunk/DScaler5/ffmpeg/libavcodec/ac3dec.h 2010-03-12 12:57:39 UTC (rev 4741) +++ trunk/DScaler5/ffmpeg/libavcodec/ac3dec.h 2010-03-12 13:32:37 UTC (rev 4742) @@ -22,6 +22,29 @@ /** * @file libavcodec/ac3.h * Common code between the AC-3 and E-AC-3 decoders. + * + * Summary of MDCT Coefficient Grouping: + * The individual MDCT coefficient indices are often referred to in the + * (E-)AC-3 specification as frequency bins. These bins are grouped together + * into subbands of 12 coefficients each. The subbands are grouped together + * into bands as defined in the bitstream by the band structures, which + * determine the number of bands and the size of each band. The full spectrum + * of 256 frequency bins is divided into 1 DC bin + 21 subbands = 253 bins. + * This system of grouping coefficients is used for channel bandwidth, stereo + * rematrixing, channel coupling, enhanced coupling, and spectral extension. + * + * +-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-+ + * |1| |12| | [12|12|12|12] | | | | | | | | | | | | |3| + * +-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-+ + * ~~~ ~~~~ ~~~~~~~~~~~~~ ~~~ + * | | | | + * | | | 3 unused frequency bins--+ + * | | | + * | | +--1 band containing 4 subbands + * | | + * | +--1 subband of 12 frequency bins + * | + * +--DC frequency bin */ #ifndef AVCODEC_AC3DEC_H @@ -43,6 +66,7 @@ #define AC3_MAX_COEFS 256 #define AC3_BLOCK_SIZE 256 #define MAX_BLOCKS 6 +#define SPX_MAX_BANDS 17 typedef struct { AVCodecContext *avctx; ///< parent context @@ -89,6 +113,22 @@ int cpl_coords[AC3_MAX_CHANNELS][18]; ///< coupling coordinates (cplco) ///@} +///@defgroup spx spectral extension +///@{ + int spx_in_use; ///< spectral extension in use (spxinu) + uint8_t channel_uses_spx[AC3_MAX_CHANNELS]; ///< channel uses spectral extension (chinspx) + int8_t spx_atten_code[AC3_MAX_CHANNELS]; ///< spx attenuation code (spxattencod) + int spx_start_freq; ///< spx start frequency bin + int spx_end_freq; ///< spx end frequency bin + int spx_copy_start_freq; ///< spx starting frequency bin for copying (copystartmant) + ///< the copy region ends at the start of the spx region. + int num_spx_bands; ///< number of spx bands (nspxbnds) + uint8_t spx_band_sizes[SPX_MAX_BANDS]; ///< number of bins in each spx band + uint8_t first_spx_coords[AC3_MAX_CHANNELS]; ///< first spx coordinates states (firstspxcos) + float spx_noise_blend[AC3_MAX_CHANNELS][SPX_MAX_BANDS]; ///< spx noise blending factor (nblendfact) + float spx_signal_blend[AC3_MAX_CHANNELS][SPX_MAX_BANDS];///< spx signal blending factor (sblendfact) +///@} + ///@defgroup aht adaptive hybrid transform int channel_uses_aht[AC3_MAX_CHANNELS]; ///< channel AHT in use (chahtinu) int pre_mantissa[AC3_MAX_CHANNELS][AC3_MAX_COEFS][MAX_BLOCKS]; ///< pre-IDCT mantissas @@ -182,4 +222,11 @@ void ff_ac3_downmix_c(float (*samples)[256], float (*matrix)[2], int out_ch, int in_ch, int len); +/** + * Apply spectral extension to each channel by copying lower frequency + * coefficients to higher frequency bins and applying side information to + * approximate the original high frequency signal. + */ +void ff_eac3_apply_spectral_extension(AC3DecodeContext *s); + #endif /* AVCODEC_AC3DEC_H */ Modified: trunk/DScaler5/ffmpeg/libavcodec/ac3dec_data.c =================================================================== --- trunk/DScaler5/ffmpeg/libavcodec/ac3dec_data.c 2010-03-12 12:57:39 UTC (rev 4741) +++ trunk/DScaler5/ffmpeg/libavcodec/ac3dec_data.c 2010-03-12 13:32:37 UTC (rev 4742) @@ -64,3 +64,9 @@ */ const uint8_t ff_eac3_default_cpl_band_struct[18] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1 }; + +/** + * Table E2.15 Default Spectral Extension Banding Structure + */ +const uint8_t ff_eac3_default_spx_band_struct[17] = +{ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }; Modified: trunk/DScaler5/ffmpeg/libavcodec/ac3dec_data.h =================================================================== --- trunk/DScaler5/ffmpeg/libavcodec/ac3dec_data.h 2010-03-12 12:57:39 UTC (rev 4741) +++ trunk/DScaler5/ffmpeg/libavcodec/ac3dec_data.h 2010-03-12 13:32:37 UTC (rev 4742) @@ -29,5 +29,6 @@ extern const uint8_t ff_eac3_hebap_tab[64]; extern const uint8_t ff_eac3_default_cpl_band_struct[18]; +extern const uint8_t ff_eac3_default_spx_band_struct[17]; #endif /* AVCODEC_AC3DEC_DATA_H */ Modified: trunk/DScaler5/ffmpeg/libavcodec/eac3dec.c =================================================================== --- trunk/DScaler5/ffmpeg/libavcodec/eac3dec.c 2010-03-12 12:57:39 UTC (rev 4741) +++ trunk/DScaler5/ffmpeg/libavcodec/eac3dec.c 2010-03-12 13:32:37 UTC (rev 4742) @@ -23,10 +23,6 @@ /* * There are several features of E-AC-3 that this decoder does not yet support. * - * Spectral Extension - * There is a patch to get this working for the two samples we have that - * use it, but it needs some minor changes in order to be accepted. - * * Enhanced Coupling * No known samples exist. If any ever surface, this feature should not be * too difficult to implement. @@ -67,6 +63,95 @@ #define EAC3_SR_CODE_REDUCED 3 +void ff_eac3_apply_spectral_extension(AC3DecodeContext *s) +{ + int bin, bnd, ch, i; + uint8_t wrapflag[SPX_MAX_BANDS]={1,0,}, num_copy_sections, copy_sizes[SPX_MAX_BANDS]; + float rms_energy[SPX_MAX_BANDS]; + + /* Set copy index mapping table. Set wrap flags to apply a notch filter at + wrap points later on. */ + bin = s->spx_copy_start_freq; + num_copy_sections = 0; + for (bnd = 0; bnd < s->num_spx_bands; bnd++) { + int copysize; + int bandsize = s->spx_band_sizes[bnd]; + if (bin + bandsize > s->spx_start_freq) { + copy_sizes[num_copy_sections++] = bin - s->spx_copy_start_freq; + bin = s->spx_copy_start_freq; + wrapflag[bnd] = 1; + } + for (i = 0; i < bandsize; i += copysize) { + if (bin == s->spx_start_freq) { + copy_sizes[num_copy_sections++] = bin - s->spx_copy_start_freq; + bin = s->spx_copy_start_freq; + } + copysize = FFMIN(bandsize - i, s->spx_start_freq - bin); + bin += copysize; + } + } + copy_sizes[num_copy_sections++] = bin - s->spx_copy_start_freq; + + for (ch = 1; ch <= s->fbw_channels; ch++) { + if (!s->channel_uses_spx[ch]) + continue; + + /* Copy coeffs from normal bands to extension bands */ + bin = s->spx_start_freq; + for (i = 0; i < num_copy_sections; i++) { + memcpy(&s->transform_coeffs[ch][bin], + &s->transform_coeffs[ch][s->spx_copy_start_freq], + copy_sizes[i]*sizeof(float)); + bin += copy_sizes[i]; + } + + /* Calculate RMS energy for each SPX band. */ + bin = s->spx_start_freq; + for (bnd = 0; bnd < s->num_spx_bands; bnd++) { + int bandsize = s->spx_band_sizes[bnd]; + float accum = 0.0f; + for (i = 0; i < bandsize; i++) { + float coeff = s->transform_coeffs[ch][bin++]; + accum += coeff * coeff; + } + rms_energy[bnd] = sqrtf(accum / bandsize); + } + + /* Apply a notch filter at transitions between normal and extension + bands and at all wrap points. */ + if (s->spx_atten_code[ch] >= 0) { + const float *atten_tab = ff_eac3_spx_atten_tab[s->spx_atten_code[ch]]; + bin = s->spx_start_freq - 2; + for (bnd = 0; bnd < s->num_spx_bands; bnd++) { + if (wrapflag[bnd]) { + float *coeffs = &s->transform_coeffs[ch][bin]; + coeffs[0] *= atten_tab[0]; + coeffs[1] *= atten_tab[1]; + coeffs[2] *= atten_tab[2]; + coeffs[3] *= atten_tab[1]; + coeffs[4] *= atten_tab[0]; + } + bin += s->spx_band_sizes[bnd]; + } + } + + /* Apply noise-blended coefficient scaling based on previously + calculated RMS energy, blending factors, and SPX coordinates for + each band. */ + bin = s->spx_start_freq; + for (bnd = 0; bnd < s->num_spx_bands; bnd++) { + float nscale = s->spx_noise_blend[ch][bnd] * rms_energy[bnd] * (1.0f/(1<<31)); + float sscale = s->spx_signal_blend[ch][bnd]; + for (i = 0; i < s->spx_band_sizes[bnd]; i++) { + float noise = nscale * (int32_t)av_lfg_get(&s->dith_state); + s->transform_coeffs[ch][bin] *= sscale; + s->transform_coeffs[ch][bin++] += noise; + } + } + } +} + + /** lrint(M_SQRT2*cos(2*M_PI/12)*(1<<23)) */ #define COEFF_0 10273905LL @@ -492,13 +577,11 @@ } /* spectral extension attenuation data */ - if (parse_spx_atten_data) { - av_log_missing_feature(s->avctx, "Spectral extension attenuation", 1); - for (ch = 1; ch <= s->fbw_channels; ch++) { - if (get_bits1(gbc)) { // channel has spx attenuation - skip_bits(gbc, 5); // skip spx attenuation code - } - } + for (ch = 1; ch <= s->fbw_channels; ch++) { + if (parse_spx_atten_data && get_bits1(gbc)) + s->spx_atten_code[ch] = get_bits(gbc, 5); + else + s->spx_atten_code[ch] = -1; } /* block start information */ @@ -514,6 +597,7 @@ /* syntax state initialization */ for (ch = 1; ch <= s->fbw_channels; ch++) { + s->first_spx_coords[ch] = 1; s->first_cpl_coords[ch] = 1; } s->first_cpl_leak = 1; Modified: trunk/DScaler5/ffmpeg/libavcodec/eac3dec_data.c =================================================================== --- trunk/DScaler5/ffmpeg/libavcodec/eac3dec_data.c 2010-03-12 12:57:39 UTC (rev 4741) +++ trunk/DScaler5/ffmpeg/libavcodec/eac3dec_data.c 2010-03-12 13:32:37 UTC (rev 4742) @@ -1093,3 +1093,42 @@ { EXP_D45, EXP_D45, EXP_D45, EXP_D45, EXP_D25, EXP_REUSE}, { EXP_D45, EXP_D45, EXP_D45, EXP_D45, EXP_D45, EXP_D45}, }; + +/** + * Table E.25: Spectral Extension Attenuation Table + * ff_eac3_spx_atten_tab[code][bin]=pow(2.0,(bin+1)*(code+1)/-15.0); + */ +const float ff_eac3_spx_atten_tab[32][3] = { + { 0.954841603910416503f, 0.911722488558216804f, 0.870550563296124125f }, + { 0.911722488558216804f, 0.831237896142787758f, 0.757858283255198995f }, + { 0.870550563296124125f, 0.757858283255198995f, 0.659753955386447100f }, + { 0.831237896142787758f, 0.690956439983888004f, 0.574349177498517438f }, + { 0.793700525984099792f, 0.629960524947436595f, 0.500000000000000000f }, + { 0.757858283255198995f, 0.574349177498517438f, 0.435275281648062062f }, + { 0.723634618720189082f, 0.523647061410313364f, 0.378929141627599553f }, + { 0.690956439983888004f, 0.477420801955208307f, 0.329876977693223550f }, + { 0.659753955386447100f, 0.435275281648062062f, 0.287174588749258719f }, + { 0.629960524947436595f, 0.396850262992049896f, 0.250000000000000000f }, + { 0.601512518041058319f, 0.361817309360094541f, 0.217637640824031003f }, + { 0.574349177498517438f, 0.329876977693223550f, 0.189464570813799776f }, + { 0.548412489847312945f, 0.300756259020529160f, 0.164938488846611775f }, + { 0.523647061410313364f, 0.274206244923656473f, 0.143587294374629387f }, + { 0.500000000000000000f, 0.250000000000000000f, 0.125000000000000000f }, + { 0.477420801955208307f, 0.227930622139554201f, 0.108818820412015502f }, + { 0.455861244279108402f, 0.207809474035696939f, 0.094732285406899888f }, + { 0.435275281648062062f, 0.189464570813799776f, 0.082469244423305887f }, + { 0.415618948071393879f, 0.172739109995972029f, 0.071793647187314694f }, + { 0.396850262992049896f, 0.157490131236859149f, 0.062500000000000000f }, + { 0.378929141627599553f, 0.143587294374629387f, 0.054409410206007751f }, + { 0.361817309360094541f, 0.130911765352578369f, 0.047366142703449930f }, + { 0.345478219991944002f, 0.119355200488802049f, 0.041234622211652958f }, + { 0.329876977693223550f, 0.108818820412015502f, 0.035896823593657347f }, + { 0.314980262473718298f, 0.099212565748012460f, 0.031250000000000000f }, + { 0.300756259020529160f, 0.090454327340023621f, 0.027204705103003875f }, + { 0.287174588749258719f, 0.082469244423305887f, 0.023683071351724965f }, + { 0.274206244923656473f, 0.075189064755132290f, 0.020617311105826479f }, + { 0.261823530705156682f, 0.068551561230914118f, 0.017948411796828673f }, + { 0.250000000000000000f, 0.062500000000000000f, 0.015625000000000000f }, + { 0.238710400977604098f, 0.056982655534888536f, 0.013602352551501938f }, + { 0.227930622139554201f, 0.051952368508924235f, 0.011841535675862483f } +}; Modified: trunk/DScaler5/ffmpeg/libavcodec/eac3dec_data.h =================================================================== --- trunk/DScaler5/ffmpeg/libavcodec/eac3dec_data.h 2010-03-12 12:57:39 UTC (rev 4741) +++ trunk/DScaler5/ffmpeg/libavcodec/eac3dec_data.h 2010-03-12 13:32:37 UTC (rev 4742) @@ -31,5 +31,6 @@ extern const int16_t (* const ff_eac3_mantissa_vq[8])[6]; extern const uint8_t ff_eac3_frm_expstr[32][6]; +extern const float ff_eac3_spx_atten_tab[32][3]; #endif /* AVCODEC_EAC3DEC_DATA_H */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |