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;
signature.asc
Description: OpenPGP digital signature