Source: zoneminder
Version: 1.30.4+dfsg1-4
Severity: serious
Tags: sid buster ftbfs
User: debian-multime...@lists.debian.org
Usertags: ffmpeg-4.0-transition
Control: block 896893 by -1

Hi,

zoneminder FTBFS with FFmpeg 4.0 which was recently uploaded to
unstable. Unfortunately the last rebuild I did was before #887968 was
fixed so I never caught this package before the transition started.

Build log:
> /<<BUILDDIR>>/zoneminder-1.30.4+dfsg1/src/zm_mpeg.cpp:243:19: error: 
> 'CODEC_FLAG_QSCALE' was not declared in this scope
>        c->flags |= CODEC_FLAG_QSCALE;
>                    ^~~~~~~~~~~~~~~~~
> /<<BUILDDIR>>/zoneminder-1.30.4+dfsg1/src/zm_mpeg.cpp:243:19: note: suggested 
> alternative: 'AV_CODEC_FLAG_QSCALE'
>        c->flags |= CODEC_FLAG_QSCALE;
>                    ^~~~~~~~~~~~~~~~~
>                    AV_CODEC_FLAG_QSCALE
> /<<BUILDDIR>>/zoneminder-1.30.4+dfsg1/src/zm_mpeg.cpp:268:19: error: 
> 'CODEC_FLAG_GLOBAL_HEADER' was not declared in this scope
>        c->flags |= CODEC_FLAG_GLOBAL_HEADER;
>                    ^~~~~~~~~~~~~~~~~~~~~~~~
> /<<BUILDDIR>>/zoneminder-1.30.4+dfsg1/src/zm_mpeg.cpp:268:19: note: suggested 
> alternative: 'AV_CODEC_FLAG_GLOBAL_HEADER'
>        c->flags |= CODEC_FLAG_GLOBAL_HEADER;
>                    ^~~~~~~~~~~~~~~~~~~~~~~~
>                    AV_CODEC_FLAG_GLOBAL_HEADER
[...]
> /<<BUILDDIR>>/zoneminder-1.30.4+dfsg1/src/zm_mpeg.cpp:428:22: error: 
> 'AVFMT_RAWPICTURE' was not declared in this scope
>    if ( !(of->flags & AVFMT_RAWPICTURE) )
>                       ^~~~~~~~~~~~~~~~
> /<<BUILDDIR>>/zoneminder-1.30.4+dfsg1/src/zm_mpeg.cpp:428:22: note: suggested 
> alternative: 'AVFMT_NOFILE'
>    if ( !(of->flags & AVFMT_RAWPICTURE) )
>                       ^~~~~~~~~~~~~~~~
>                       AVFMT_NOFILE
[...]
> /<<BUILDDIR>>/zoneminder-1.30.4+dfsg1/src/zm_mpeg.cpp:675:20: error: 
> 'AVFMT_RAWPICTURE' was not declared in this scope
>    if ( of->flags & AVFMT_RAWPICTURE )
>                     ^~~~~~~~~~~~~~~~
> Manifying 21 pod documents
> /<<BUILDDIR>>/zoneminder-1.30.4+dfsg1/src/zm_mpeg.cpp:675:20: note: suggested 
> alternative: 'AVFMT_NOFILE'
>    if ( of->flags & AVFMT_RAWPICTURE )
>                     ^~~~~~~~~~~~~~~~
>                     AVFMT_NOFILE

UNTESTED patch I found on FreeBSD ports attached. From here:
https://svnweb.freebsd.org/ports/head/multimedia/zoneminder/files/patch-ffmpeg4?view=markup

James
Partially based on https://github.com/ZoneMinder/zoneminder/commit/e17bcb9178d0

--- src/zm_mpeg.cpp.orig	2017-05-09 14:54:48 UTC
+++ src/zm_mpeg.cpp
@@ -240,7 +240,11 @@ void VideoStream::SetupCodec( int colours, int subpixe
     {
       // Quality based bitrate control (VBR). Scale is 1..31 where 1 is best.
       // This gets rid of artifacts in the beginning of the movie; and well, even quality.
+#if LIBAVCODEC_VERSION_CHECK(56, 35, 0, 64, 0)
+      c->flags |= AV_CODEC_FLAG_QSCALE;
+#else
       c->flags |= CODEC_FLAG_QSCALE;
+#endif
       c->global_quality = FF_QP2LAMBDA * (31 - (31 * (bitrate / 100.0)));
     }
     else
@@ -265,7 +269,11 @@ void VideoStream::SetupCodec( int colours, int subpixe
 
     // some formats want stream headers to be separate
     if ( of->flags & AVFMT_GLOBALHEADER )
+#if LIBAVCODEC_VERSION_CHECK(56, 35, 0, 64, 0)
+      c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
+#else
       c->flags |= CODEC_FLAG_GLOBAL_HEADER;
+#endif
   }
   else
   {
@@ -425,7 +433,9 @@ void VideoStream::OpenStream( )
   }
 
   video_outbuf = NULL;
+#if !LIBAVFORMAT_VERSION_CHECK(57, 0, 0, 0, 0)
   if ( !(of->flags & AVFMT_RAWPICTURE) )
+#endif
   {
     /* allocate output buffer */
     /* XXX: API change will be done */
@@ -672,6 +682,7 @@ double VideoStream::ActuallyEncodeFrame( const uint8_t
   AVPacket *pkt = packet_buffers[packet_index];
   av_init_packet( pkt );
   int got_packet = 0;
+#if !LIBAVFORMAT_VERSION_CHECK(57, 0, 0, 0, 0)
   if ( of->flags & AVFMT_RAWPICTURE )
   {
 #if LIBAVCODEC_VERSION_CHECK(52, 30, 2, 30, 2)
@@ -685,6 +696,7 @@ double VideoStream::ActuallyEncodeFrame( const uint8_t
     got_packet = 1;
   }
   else
+#endif
   {
     opicture_ptr->pts = c->frame_number;
     opicture_ptr->quality = c->global_quality;
--- src/zm_sdp.cpp.orig	2017-05-09 14:54:48 UTC
+++ src/zm_sdp.cpp
@@ -483,7 +483,11 @@ AVFormatContext *SessionDescriptor::generateFormatCont
           uint8_t *dest = 
           (uint8_t *)av_malloc(packet_size + sizeof(start_sequence) +
                        stream->codec->extradata_size +
+#if LIBAVCODEC_VERSION_CHECK(57, 0, 0, 0, 0)
+                       AV_INPUT_BUFFER_PADDING_SIZE);
+#else
                        FF_INPUT_BUFFER_PADDING_SIZE);
+#endif
           if(dest) {
               if(stream->codec->extradata_size) {
                 // av_realloc?
@@ -494,7 +498,11 @@ AVFormatContext *SessionDescriptor::generateFormatCont
               memcpy(dest+stream->codec->extradata_size, start_sequence, sizeof(start_sequence));
               memcpy(dest+stream->codec->extradata_size+sizeof(start_sequence), decoded_packet, packet_size);
               memset(dest+stream->codec->extradata_size+sizeof(start_sequence)+
+#if LIBAVCODEC_VERSION_CHECK(57, 0, 0, 0, 0)
+                     packet_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
+#else
                      packet_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
+#endif
 
               stream->codec->extradata= dest;
               stream->codec->extradata_size+= sizeof(start_sequence)+packet_size;

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to