[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-devel
Subject: Re: wineqtdecoder: initial commit of the video decoder using Mac
From: Aric Stewart <aric () codeweavers ! com>
Date: 2010-11-30 17:02:20
Message-ID: 4CF52E1C.2000907 () codeweavers ! com
[Download RAW message or body]
Sent a revised patch using the ICMDecompression apis just before seeing
your e-mail. So I figured out that part.
I will have to look into the pixel buffer copying improvement once the
base framework is in place.
thanks!
-aric
On 11/30/10 10:33 AM, Ken Thomases wrote:
> On Nov 30, 2010, at 6:52 AM, Alexandre Julliard wrote:
>
> > Aric Stewart<aric@codeweavers.com> writes:
> >
> > > ---
> > > configure | 8 +-
> > > configure.ac | 5 +
> > > dlls/wineqtdecoder/Makefile.in | 11 +
> > > dlls/wineqtdecoder/main.c | 135 +++++++++
> > > dlls/wineqtdecoder/qtvdecoder.c | 536
> > > +++++++++++++++++++++++++++++++++
> > > dlls/wineqtdecoder/version.rc | 26 ++
> > > dlls/wineqtdecoder/wineqtdecoder.spec | 4 +
> > > 7 files changed, 724 insertions(+), 1 deletions(-)
> > > create mode 100644 dlls/wineqtdecoder/Makefile.in
> > > create mode 100644 dlls/wineqtdecoder/main.c
> > > create mode 100644 dlls/wineqtdecoder/qtvdecoder.c
> > > create mode 100644 dlls/wineqtdecoder/version.rc
> > > create mode 100644 dlls/wineqtdecoder/wineqtdecoder.spec
> >
> > This is showing many deprecated function warnings even on Leopard. We
> > should try to avoid that in new code.
>
> Aric,
>
> The DecompressSequenceBeginS takes a CGrafPort or GWorld. These are QuickDraw \
> concepts and are very, very obsolete. DecompressSequenceBeginS should be \
> deprecated, itself, since it depends on them, but doesn't appear to be. The \
> documentation on this whole area is terrible. Apple seems to have blackholed even \
> the documentation of the more modern APIs. (You can still get it from within Xcode \
> 3.2.x if you go into preferences and subscribe to the Leopard docset. But it seems \
> largely gone from their website.)
> As is often the case, the headers provide what documentation there is. According \
> to the headers (/System/Library/Frameworks/QuickTime.framework/Headers/ImageCompression.h), \
> the replacement is ICMDecompressionSessionCreate() and friends, also in that \
> header. (That header has both old APIs and new. You want the ones introduced with \
> Mac OS X 10.4 or later, or QuickTime 7 or later.)
> The ICMDecompression... functions feed you CVPixelBuffer objects through a \
> callback. Those are documented \
> here<http://developer.apple.com/library/mac/#documentation/QuartzCore/Reference/CVPixelBufferRef/>. \
> (Take note of the "Derived from" info at the top of that page. If you feel that \
> CVPixelBuffer is missing some important API, it may be provided by the base \
> classes.)
> The ICMDecompression... API seems kind of asynchronous in nature, but I think you \
> can force it to fully decompress frames immediately via the frameTime parameter to \
> ICMDecompressionSessionDecodeFrame(). The flags field of ICMFrameTimeRecord can \
> include icmFrameTimeDecodeImmediately.
> The next thing that might be useful are some techniques to avoid doing the pixel \
> copying manually. Depending on the output format you require (This->outputDepth \
> and This->rowBytes), you may be able to create a CGBitmapContext to wrap the output \
> buffer. Then, you can create a CGImage from the CVPixelBuffer, and draw the image \
> into the context. (The modern Mac APIs don't really have blit operations, they \
> copy and/or convert images by drawing.) Some of these techniques are illustrated \
> in this sample code:<http://developer.apple.com/library/mac/#samplecode/CaptureAndCompressIPBMovie/>. \
> Actually, it sort of does the reverse. It wraps the CVPixelBuffer in the bitmap \
> context and draws onto it, but the principle is similar.
> I hope that helps.
>
> -Ken
>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic