[k3b] Re: Patch to build against latest FFmpeg git version
Michał Małek
michalm at jabster.pl
Tue May 3 20:44:58 UTC 2011
Kelly Anderson <kelly at silka.with-linux.com> wrote:
> Hey,
>
> I put together a patch to build against the latest git version of
> FFmpeg. I haven't tested it thoroughly, but it should be pretty close
> to what's needed.
>
> diff --git a/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
> b/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
> index 0ad59fc..bafa826 100644
> --- a/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
> +++ b/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
> @@ -60,8 +60,10 @@ public:
> char* outputBufferPos;
> int outputBufferSize;
> ::AVPacket packet;
> +#if LIBAVCODEC_VERSION_MAJOR < 53
> quint8* packetData;
> int packetSize;
> +#endif
> };
>
>
> @@ -109,7 +111,7 @@ bool K3bFFMpegFile::open()
> #else
> ::AVCodecContext* codecContext =
> d->formatContext->streams[0]->codec;
> #endif
> - if( codecContext->codec_type != CODEC_TYPE_AUDIO ) {
> + if( codecContext->codec_type != AVMEDIA_TYPE_AUDIO ) {
> kDebug() << "(K3bFFMpegFile) not a simple audio stream: " <<
> m_filename;
> return false;
> }
> @@ -146,8 +148,10 @@ bool K3bFFMpegFile::open()
> void K3bFFMpegFile::close()
> {
> d->outputBufferSize = 0;
> +#if LIBAVCODEC_VERSION_MAJOR < 53
> d->packetSize = 0;
> d->packetData = 0;
> +#endif
>
> if( d->codec ) {
> #ifdef FFMPEG_BUILD_PRE_4629
> @@ -224,31 +228,25 @@ QString K3bFFMpegFile::typeComment() const
>
> QString K3bFFMpegFile::title() const
> {
> - // FIXME: is this UTF8 or something??
> - if( d->formatContext->title[0] != '\0' )
> - return QString::fromLocal8Bit( d->formatContext->title );
> - else
> - return QString();
> + AVMetadataTag *t = av_metadata_get(d->formatContext->metadata,
> + "title", 0,0);
> + return ( t ) ? QString::fromLocal8Bit( t->value ) : QString();
> }
>
>
> QString K3bFFMpegFile::author() const
> {
> - // FIXME: is this UTF8 or something??
> - if( d->formatContext->author[0] != '\0' )
> - return QString::fromLocal8Bit( d->formatContext->author );
> - else
> - return QString();
> + AVMetadataTag *t = av_metadata_get(d->formatContext->metadata,
> + "author", 0,0);
> + return ( t ) ? QString::fromLocal8Bit( t->value ) : QString();
> }
>
>
> QString K3bFFMpegFile::comment() const
> {
> - // FIXME: is this UTF8 or something??
> - if( d->formatContext->comment[0] != '\0' )
> - return QString::fromLocal8Bit( d->formatContext->comment );
> - else
> - return QString();
> + AVMetadataTag *t = av_metadata_get(d->formatContext->metadata,
> + "comment", 0,0);
> + return ( t ) ? QString::fromLocal8Bit( t->value ) : QString();
> }
>
>
> @@ -278,6 +276,7 @@ int K3bFFMpegFile::read( char* buf, int bufLen )
> // fill d->packetData with data to decode
> int K3bFFMpegFile::readPacket()
> {
> +#if LIBAVCODEC_VERSION_MAJOR < 53
> if( d->packetSize <= 0 ) {
> ::av_init_packet( &d->packet );
>
> @@ -289,6 +288,17 @@ int K3bFFMpegFile::readPacket()
> }
>
> return d->packetSize;
> +#else
> + if( d->packet.size <= 0 ) {
> + ::av_init_packet( &d->packet );
> +
> + if( ::av_read_frame( d->formatContext, &d->packet ) < 0 ) {
> + return 0;
> + }
> + }
> +
> + return d->packet.size;
> +#endif
> }
>
>
> @@ -309,26 +319,43 @@ int K3bFFMpegFile::fillOutputBuffer()
> #if LIBAVCODEC_VERSION_MAJOR < 52
> int len = ::avcodec_decode_audio(
> #else
> +#if LIBAVCODEC_VERSION_MAJOR < 53
> int len = ::avcodec_decode_audio2(
> +#else
> + int len = ::avcodec_decode_audio3(
> +#endif
> #endif
> #ifdef FFMPEG_BUILD_PRE_4629
> &d->formatContext->streams[0]->codec,
> #else
> d->formatContext->streams[0]->codec,
> #endif
> - (short*)d->alignedOutputBuffer,
> + (int16_t*)d->alignedOutputBuffer,
> &d->outputBufferSize,
> +#if LIBAVCODEC_VERSION_MAJOR < 53
> d->packetData, d->packetSize );
>
> if( d->packetSize <= 0 || len < 0 )
> ::av_free_packet( &d->packet );
> +#else
> + &d->packet );
> +
> + if( d->packet.size <= 0 || len < 0 )
> + ::av_free_packet( &d->packet );
> +#endif
> +
> if( len < 0 ) {
> kDebug() << "(K3bFFMpegFile) decoding failed for " <<
> m_filename;
> return -1;
> }
>
> +#if LIBAVCODEC_VERSION_MAJOR < 53
> d->packetSize -= len;
> d->packetData += len;
> +#else
> + d->packet.size -= len;
> + d->packet.data += len;
> +#endif
> }
>
> // if it is still empty try again
> @@ -342,7 +369,11 @@ int K3bFFMpegFile::fillOutputBuffer()
> bool K3bFFMpegFile::seek( const K3b::Msf& msf )
> {
> d->outputBufferSize = 0;
> +#if LIBAVCODEC_VERSION_MAJOR < 53
> d->packetSize = 0;
> +#else
> + d->packet.size = 0;
> +#endif
>
> double seconds = (double)msf.totalFrames()/75.0;
> quint64 timestamp = (quint64)(seconds * (double)AV_TIME_BASE);
>
Hi,
Thanks for the patch. Please repost it on http://git.reviewboard.kde.org
since this is a preferred way of reviewing patches for K3b. Thanks!
--
Best regards,
Michał
More information about the k3b
mailing list