media-libs/libquicktime: Apply fixes from Arch

Adds compatibility with newer ffmpeg versions, faad2 fixes and fix codecs
via patch instead of sedding.

Closes: https://bugs.gentoo.org/834384
Signed-off-by: Pacho Ramos <pacho@gentoo.org>
This commit is contained in:
Pacho Ramos
2024-05-18 12:26:05 +02:00
parent 096b2a279b
commit 18fa34358d
4 changed files with 1203 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
diff -ruN a/configure.ac b/configure.ac
--- a/configure.ac 2012-03-29 21:44:28.000000000 +0200
+++ b/configure.ac 2020-02-09 18:27:31.599127781 +0100
@@ -728,82 +728,9 @@
if test "x$with_faad2" != "xno"; then
-OLD_CFLAGS=$CFLAGS
-OLD_LIBS=$LIBS
-
CFLAGS="$CFLAGS"
LIBS="$LIBS -lfaad -lm"
-AC_MSG_CHECKING(for neaacdec.h usability for faad2)
-
-
-AC_TRY_RUN([
- #include <neaacdec.h>
- #include <stdio.h>
- main()
- {
- int faad_major;
- int faad_minor;
- faacDecHandle dec;
-
- if(sscanf(FAAD2_VERSION, "%d.%d", &faad_major, &faad_minor) < 2)
- return -1;
- dec = faacDecOpen();
- if(!dec)
- return -1;
- return 0;
- }
- ],
- [
- # program could be run
- have_faad2="true"
- AC_MSG_RESULT(yes)
- FAAD2_CFLAGS=$CFLAGS
- FAAD2_LIBS=$LIBS
- AC_DEFINE(HAVE_NEAACDEC_H)
- ],
- # program could not be run
- AC_MSG_RESULT(no)
-)
-
-if test "x$have_faad2" != "xtrue"; then
-
-AC_MSG_CHECKING(for faad.h usability for faad2)
-
-AC_TRY_RUN([
- #include <faad.h>
- #include <stdio.h>
- main()
- {
- int faad_major;
- int faad_minor;
- faacDecHandle dec;
-
- if(sscanf(FAAD2_VERSION, "%d.%d", &faad_major, &faad_minor) < 2)
- return -1;
- dec = faacDecOpen();
- if(!dec)
- return -1;
- return 0;
- }
- ],
- [
- # program could be run
- have_faad2="true"
- AC_MSG_RESULT(yes)
- FAAD2_CFLAGS=$CFLAGS
- FAAD2_LIBS=$LIBS
-
-
- ],
- # program could not be run
- AC_MSG_RESULT(no)
-)
-
-fi
-
-CFLAGS=$OLD_CFLAGS
-LIBS=$OLD_LIBS
fi

View File

@@ -0,0 +1,651 @@
diff -ruN a/plugins/ffmpeg/audio.c b/plugins/ffmpeg/audio.c
--- a/plugins/ffmpeg/audio.c 2012-03-29 21:44:28.000000000 +0200
+++ b/plugins/ffmpeg/audio.c 2020-02-09 19:08:03.716063846 +0100
@@ -626,7 +626,7 @@
{
/* If the codec is mp3, make sure to decode the very last frame */
- if((codec->avctx->codec_id == CODEC_ID_MP3) &&
+ if((codec->avctx->codec_id == AV_CODEC_ID_MP3) &&
(codec->bytes_in_chunk_buffer >= 4))
{
if(!mpa_decode_header(&mph, codec->chunk_buffer, (const mpa_header*)0))
@@ -695,7 +695,7 @@
/* Some really broken mp3 files have the header bytes split across 2 chunks */
- if(codec->avctx->codec_id == CODEC_ID_MP3)
+ if(codec->avctx->codec_id == AV_CODEC_ID_MP3)
{
if(codec->bytes_in_chunk_buffer < 4)
{
@@ -806,7 +806,7 @@
if(bytes_decoded < 0)
{
- if(codec->avctx->codec_id == CODEC_ID_MP3)
+ if(codec->avctx->codec_id == AV_CODEC_ID_MP3)
{
/* For mp3, bytes_decoded < 0 means, that the frame should be muted */
memset(&codec->sample_buffer[track_map->channels * (codec->sample_buffer_end -
@@ -866,8 +866,8 @@
quicktime_audio_map_t *track_map = &file->atracks[track];
quicktime_ffmpeg_audio_codec_t *codec = track_map->codec->priv;
- if((codec->decoder->id == CODEC_ID_MP2) ||
- (codec->decoder->id == CODEC_ID_MP3))
+ if((codec->decoder->id == AV_CODEC_ID_MP2) ||
+ (codec->decoder->id == AV_CODEC_ID_MP3))
{
mpa_header h;
uint32_t header;
@@ -909,7 +909,7 @@
else
track_map->ci.bitrate = h.bitrate;
}
- else if(codec->decoder->id == CODEC_ID_AC3)
+ else if(codec->decoder->id == AV_CODEC_ID_AC3)
{
a52_header h;
uint8_t * ptr;
@@ -986,7 +986,7 @@
#endif
/* Some codecs need extra stuff */
- if(codec->decoder->id == CODEC_ID_ALAC)
+ if(codec->decoder->id == AV_CODEC_ID_ALAC)
{
header = quicktime_wave_get_user_atom(track_map->track, "alac", &header_len);
if(header)
@@ -995,7 +995,7 @@
codec->avctx->extradata_size = header_len;
}
}
- if(codec->decoder->id == CODEC_ID_QDM2)
+ if(codec->decoder->id == AV_CODEC_ID_QDM2)
{
header = quicktime_wave_get_user_atom(track_map->track, "QDCA", &header_len);
if(header)
@@ -1495,9 +1495,9 @@
codec_base->decode_audio = lqt_ffmpeg_decode_audio;
codec_base->set_parameter = set_parameter;
- if((decoder->id == CODEC_ID_MP3) || (decoder->id == CODEC_ID_MP2))
+ if((decoder->id == AV_CODEC_ID_MP3) || (decoder->id == AV_CODEC_ID_MP2))
codec_base->read_packet = read_packet_mpa;
- else if(decoder->id == CODEC_ID_AC3)
+ else if(decoder->id == AV_CODEC_ID_AC3)
{
codec_base->write_packet = write_packet_ac3;
codec_base->read_packet = read_packet_ac3;
diff -ruN a/plugins/ffmpeg/lqt_ffmpeg.c b/plugins/ffmpeg/lqt_ffmpeg.c
--- a/plugins/ffmpeg/lqt_ffmpeg.c 2012-02-15 20:48:30.000000000 +0100
+++ b/plugins/ffmpeg/lqt_ffmpeg.c 2020-02-09 19:07:17.929831925 +0100
@@ -386,7 +386,7 @@
struct CODECIDMAP codecidmap_v[] =
{
{
- .id = CODEC_ID_MPEG1VIDEO,
+ .id = AV_CODEC_ID_MPEG1VIDEO,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -397,7 +397,7 @@
.wav_ids = { LQT_WAV_ID_NONE }
},
{
- .id = CODEC_ID_MPEG4,
+ .id = AV_CODEC_ID_MPEG4,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -415,7 +415,7 @@
.compression_id = LQT_COMPRESSION_MPEG4_ASP,
},
{
- .id = CODEC_ID_MSMPEG4V1,
+ .id = AV_CODEC_ID_MSMPEG4V1,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -426,7 +426,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_MSMPEG4V2,
+ .id = AV_CODEC_ID_MSMPEG4V2,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -437,7 +437,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_MSMPEG4V3,
+ .id = AV_CODEC_ID_MSMPEG4V3,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -453,7 +453,7 @@
.do_encode = 1,
},
{
- .id = CODEC_ID_MSMPEG4V3,
+ .id = AV_CODEC_ID_MSMPEG4V3,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -468,7 +468,7 @@
},
#if 0
{
- .id = CODEC_ID_WMV1,
+ .id = AV_CODEC_ID_WMV1,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -481,7 +481,7 @@
},
#endif
{
- .id = CODEC_ID_H263,
+ .id = AV_CODEC_ID_H263,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -493,7 +493,7 @@
.compatibility_flags = LQT_FILE_QT_OLD | LQT_FILE_QT | LQT_FILE_MP4 | LQT_FILE_3GP,
},
{
- .id = CODEC_ID_H263,
+ .id = AV_CODEC_ID_H263,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -508,7 +508,7 @@
.do_encode = 1,
},
{
- .id = CODEC_ID_H264,
+ .id = AV_CODEC_ID_H264,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -519,7 +519,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_H263P,
+ .id = AV_CODEC_ID_H263P,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -533,7 +533,7 @@
.do_encode = 1,
},
{
- .id = CODEC_ID_H263I,
+ .id = AV_CODEC_ID_H263I,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -544,7 +544,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_SVQ1,
+ .id = AV_CODEC_ID_SVQ1,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -555,7 +555,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_SVQ3,
+ .id = AV_CODEC_ID_SVQ3,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -566,7 +566,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_MJPEG,
+ .id = AV_CODEC_ID_MJPEG,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -580,7 +580,7 @@
.do_encode = 1,
},
{
- .id = CODEC_ID_MJPEGB,
+ .id = AV_CODEC_ID_MJPEGB,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -594,7 +594,7 @@
},
#if LIBAVCODEC_BUILD >= 3346688
{
- .id = CODEC_ID_TARGA,
+ .id = AV_CODEC_ID_TARGA,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -606,7 +606,7 @@
#endif
#if LIBAVCODEC_BUILD >= 3347456
{
- .id = CODEC_ID_TIFF,
+ .id = AV_CODEC_ID_TIFF,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -617,7 +617,7 @@
},
#endif
{
- .id = CODEC_ID_8BPS,
+ .id = AV_CODEC_ID_8BPS,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -627,7 +627,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_INDEO3,
+ .id = AV_CODEC_ID_INDEO3,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -638,7 +638,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_RPZA,
+ .id = AV_CODEC_ID_RPZA,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -648,7 +648,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_SMC,
+ .id = AV_CODEC_ID_SMC,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -658,7 +658,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_CINEPAK,
+ .id = AV_CODEC_ID_CINEPAK,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -669,7 +669,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_CYUV,
+ .id = AV_CODEC_ID_CYUV,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -680,7 +680,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_QTRLE,
+ .id = AV_CODEC_ID_QTRLE,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -693,7 +693,7 @@
.encoding_colormodels = (int[]){ BC_RGB888, BC_RGBA8888, LQT_COLORMODEL_NONE },
},
{
- .id = CODEC_ID_MSRLE,
+ .id = AV_CODEC_ID_MSRLE,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -703,7 +703,7 @@
.wav_ids = { LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_DVVIDEO,
+ .id = AV_CODEC_ID_DVVIDEO,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -719,7 +719,7 @@
.image_sizes = image_sizes_dv,
},
{
- .id = CODEC_ID_DVVIDEO,
+ .id = AV_CODEC_ID_DVVIDEO,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -735,7 +735,7 @@
.image_sizes = image_sizes_dv,
},
{
- .id = CODEC_ID_DVVIDEO,
+ .id = AV_CODEC_ID_DVVIDEO,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -751,7 +751,7 @@
},
/* DVCPRO HD (decoding only for now) */
{
- .id = CODEC_ID_DVVIDEO,
+ .id = AV_CODEC_ID_DVVIDEO,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -772,7 +772,7 @@
// .do_encode = 1
},
{
- .id = CODEC_ID_FFVHUFF,
+ .id = AV_CODEC_ID_FFVHUFF,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -785,7 +785,7 @@
.do_encode = 1
},
{
- .id = CODEC_ID_FFV1,
+ .id = AV_CODEC_ID_FFV1,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -801,7 +801,7 @@
},
#if LIBAVCODEC_BUILD >= 3352576
{
- .id = CODEC_ID_DNXHD,
+ .id = AV_CODEC_ID_DNXHD,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -817,7 +817,7 @@
},
#endif
{
- .id = CODEC_ID_MPEG2VIDEO,
+ .id = AV_CODEC_ID_MPEG2VIDEO,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -839,7 +839,7 @@
struct CODECIDMAP codecidmap_a[] =
{
{
- .id = CODEC_ID_MP3,
+ .id = AV_CODEC_ID_MP3,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -851,7 +851,7 @@
.wav_ids = { 0x50, 0x55, LQT_WAV_ID_NONE },
},
{
- .id = CODEC_ID_MP2,
+ .id = AV_CODEC_ID_MP2,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -866,7 +866,7 @@
.compression_id = LQT_COMPRESSION_MP2,
},
{
- .id = CODEC_ID_AC3,
+ .id = AV_CODEC_ID_AC3,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -881,7 +881,7 @@
.compression_id = LQT_COMPRESSION_AC3,
},
{
- .id = CODEC_ID_QDM2,
+ .id = AV_CODEC_ID_QDM2,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -896,7 +896,7 @@
#if 1
/* Doesn't work as long as audio chunks are not split into VBR "Samples" */
{
- .id = CODEC_ID_ALAC,
+ .id = AV_CODEC_ID_ALAC,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -909,7 +909,7 @@
#if 1
/* Sounds ugly */
{
- .id = CODEC_ID_ADPCM_MS,
+ .id = AV_CODEC_ID_ADPCM_MS,
.index = -1,
.encoder = NULL,
.decoder = NULL,
@@ -922,7 +922,7 @@
#if 1
/* Sounds ugly */
{
- .id = CODEC_ID_ADPCM_IMA_WAV,
+ .id = AV_CODEC_ID_ADPCM_IMA_WAV,
.index = -1,
.encoder = NULL,
.decoder = NULL,
diff -ruN a/plugins/ffmpeg/video.c b/plugins/ffmpeg/video.c
--- a/plugins/ffmpeg/video.c 2012-02-25 20:46:56.000000000 +0100
+++ b/plugins/ffmpeg/video.c 2020-02-09 19:07:44.399580606 +0100
@@ -400,7 +400,7 @@
codec->reinterpret_pix_fmt = codec->avctx->pix_fmt;
/* First we try codec-specific colormodel matching. */
- if(codec->decoder->id == CODEC_ID_DNXHD)
+ if(codec->decoder->id == AV_CODEC_ID_DNXHD)
{
/* FFMpeg supports PIX_FMT_YUV422P and PIX_FMT_YUV422P10 for DNxHD, which
we sometimes interpret as PIX_FMT_YUVJ422P and PIX_FMT_YUVJ422P10. */
@@ -438,7 +438,7 @@
quicktime_ffmpeg_video_codec_t *codec = vtrack->codec->priv;
codec->avctx->pix_fmt = lqt_ffmpeg_get_ffmpeg_colormodel(vtrack->stream_cmodel);
- if (codec->encoder->id == CODEC_ID_DNXHD)
+ if (codec->encoder->id == AV_CODEC_ID_DNXHD)
{
/* FFMpeg's DNxHD encoder only supports PIX_FMT_YUV422P and PIX_FMT_YUV422P10
and doesn't know anything about PIX_FMT_YUVJ422P and PIX_FMT_YUVJ422P10
@@ -728,13 +728,13 @@
/* Set extradata: It's done differently for each codec */
- if(codec->decoder->id == CODEC_ID_SVQ3)
+ if(codec->decoder->id == AV_CODEC_ID_SVQ3)
{
extradata = trak->mdia.minf.stbl.stsd.table[0].table_raw + 4;
extradata_size = trak->mdia.minf.stbl.stsd.table[0].table_raw_size - 4;
}
- else if(codec->decoder->id == CODEC_ID_H264)
+ else if(codec->decoder->id == AV_CODEC_ID_H264)
{
user_atom = quicktime_stsd_get_user_atom(trak, "avcC", &user_atom_len);
@@ -753,7 +753,7 @@
}
}
- else if(codec->decoder->id == CODEC_ID_MPEG4)
+ else if(codec->decoder->id == AV_CODEC_ID_MPEG4)
{
if(trak->mdia.minf.stbl.stsd.table[0].has_esds)
{
@@ -947,15 +947,15 @@
}
#endif
}
- if(codec->decoder->id == CODEC_ID_DVVIDEO)
+ if(codec->decoder->id == AV_CODEC_ID_DVVIDEO)
{
if(vtrack->stream_cmodel == BC_YUV420P)
vtrack->chroma_placement = LQT_CHROMA_PLACEMENT_DVPAL;
vtrack->interlace_mode = LQT_INTERLACE_BOTTOM_FIRST;
vtrack->ci.id = LQT_COMPRESSION_DV;
}
- else if((codec->decoder->id == CODEC_ID_MPEG4) ||
- (codec->decoder->id == CODEC_ID_H264))
+ else if((codec->decoder->id == AV_CODEC_ID_MPEG4) ||
+ (codec->decoder->id == AV_CODEC_ID_H264))
{
if(vtrack->stream_cmodel == BC_YUV420P)
vtrack->chroma_placement = LQT_CHROMA_PLACEMENT_MPEG2;
@@ -1299,13 +1299,13 @@
{
if(vtrack->stream_cmodel == BC_YUV420P)
{
- if(codec->encoder->id == CODEC_ID_MPEG4)
+ if(codec->encoder->id == AV_CODEC_ID_MPEG4)
{
vtrack->chroma_placement = LQT_CHROMA_PLACEMENT_MPEG2;
/* enable interlaced encoding */
vtrack->interlace_mode = LQT_INTERLACE_NONE;
}
- else if(codec->encoder->id == CODEC_ID_DVVIDEO)
+ else if(codec->encoder->id == AV_CODEC_ID_DVVIDEO)
{
vtrack->chroma_placement = LQT_CHROMA_PLACEMENT_DVPAL;
}
@@ -1340,7 +1340,7 @@
codec->avctx->sample_aspect_ratio.num = pixel_width;
codec->avctx->sample_aspect_ratio.den = pixel_height;
/* Use global headers for mp4v */
- if(codec->encoder->id == CODEC_ID_MPEG4)
+ if(codec->encoder->id == AV_CODEC_ID_MPEG4)
{
if(!(file->file_type & (LQT_FILE_AVI|LQT_FILE_AVI_ODML)))
{
@@ -1364,12 +1364,12 @@
}
#endif
}
- else if((codec->encoder->id == CODEC_ID_MSMPEG4V3) && (trak->strl) &&
+ else if((codec->encoder->id == AV_CODEC_ID_MSMPEG4V3) && (trak->strl) &&
!strncmp(trak->strl->strf.bh.biCompression, "DIV3", 4))
{
strncpy(trak->strl->strh.fccHandler, "div3", 4);
}
- else if((codec->encoder->id == CODEC_ID_H263) &&
+ else if((codec->encoder->id == AV_CODEC_ID_H263) &&
(file->file_type & (LQT_FILE_MP4|LQT_FILE_3GP)))
{
uint8_t d263_data[] =
@@ -1383,7 +1383,7 @@
strncpy(trak->mdia.minf.stbl.stsd.table[0].format,
"s263", 4);
}
- else if(codec->encoder->id == CODEC_ID_FFVHUFF)
+ else if(codec->encoder->id == AV_CODEC_ID_FFVHUFF)
{
if(!(file->file_type & (LQT_FILE_AVI|LQT_FILE_AVI_ODML)))
{
@@ -1391,7 +1391,7 @@
codec->write_global_header = 1;
}
}
- else if(codec->encoder->id == CODEC_ID_QTRLE)
+ else if(codec->encoder->id == AV_CODEC_ID_QTRLE)
{
if(vtrack->stream_cmodel == BC_RGBA8888)
{
@@ -1402,11 +1402,11 @@
vtrack->track->mdia.minf.stbl.stsd.table[0].depth = 32;
}
}
- else if(codec->encoder->id == CODEC_ID_DVVIDEO)
+ else if(codec->encoder->id == AV_CODEC_ID_DVVIDEO)
{
set_dv_fourcc(width, height, vtrack->stream_cmodel, trak);
}
- else if(codec->encoder->id == CODEC_ID_DNXHD)
+ else if(codec->encoder->id == AV_CODEC_ID_DNXHD)
{
if(vtrack->interlace_mode != LQT_INTERLACE_NONE)
{
@@ -1558,12 +1558,12 @@
#endif
- if(!was_initialized && codec->encoder->id == CODEC_ID_DNXHD)
+ if(!was_initialized && codec->encoder->id == AV_CODEC_ID_DNXHD)
setup_avid_atoms(file, vtrack, codec->buffer, bytes_encoded);
if(bytes_encoded)
{
- if (pts == AV_NOPTS_VALUE || (codec->encoder->id == CODEC_ID_DNXHD && pts == 0))
+ if (pts == AV_NOPTS_VALUE || (codec->encoder->id == AV_CODEC_ID_DNXHD && pts == 0))
{
/* Some codecs don't bother generating presentation timestamps.
FFMpeg's DNxHD encoder doesn't even bother to set it to AV_NOPTS_VALUE. */
@@ -1590,13 +1590,13 @@
if(codec->write_global_header && !codec->global_header_written)
{
- if(codec->encoder->id == CODEC_ID_FFVHUFF)
+ if(codec->encoder->id == AV_CODEC_ID_FFVHUFF)
{
quicktime_user_atoms_add_atom(&trak->mdia.minf.stbl.stsd.table[0].user_atoms,
"glbl",
codec->avctx->extradata, codec->avctx->extradata_size );
}
- else if(codec->encoder->id == CODEC_ID_MPEG4)
+ else if(codec->encoder->id == AV_CODEC_ID_MPEG4)
{
int advanced = 0;
if(codec->avctx->max_b_frames ||
@@ -1903,18 +1903,18 @@
codec_base->encode_video = lqt_ffmpeg_encode_video;
codec_base->set_pass = set_pass_ffmpeg;
- if(encoder->id == CODEC_ID_MPEG4)
+ if(encoder->id == AV_CODEC_ID_MPEG4)
{
codec_base->writes_compressed = writes_compressed_mpeg4;
codec_base->init_compressed = init_compressed_mpeg4;
codec_base->write_packet = write_packet_mpeg4;
}
- else if(encoder->id == CODEC_ID_MPEG2VIDEO)
+ else if(encoder->id == AV_CODEC_ID_MPEG2VIDEO)
{
codec_base->writes_compressed = writes_compressed_imx;
codec_base->init_compressed = init_compressed_imx;
}
- else if(encoder->id == CODEC_ID_DVVIDEO)
+ else if(encoder->id == AV_CODEC_ID_DVVIDEO)
{
codec_base->init_compressed = init_compressed_dv;
}
@@ -1922,7 +1922,7 @@
}
if(decoder)
{
- if(decoder->id == CODEC_ID_H264)
+ if(decoder->id == AV_CODEC_ID_H264)
codec_base->read_packet = read_packet_h264;
codec_base->decode_video = lqt_ffmpeg_decode_video;
}

View File

@@ -0,0 +1,342 @@
--- a/plugins/ffmpeg/audio.c
+++ b/plugins/ffmpeg/audio.c
@@ -423,8 +423,8 @@ static int a52_header_read(a52_header *
typedef struct
{
AVCodecContext * avctx;
- AVCodec * encoder;
- AVCodec * decoder;
+ AVCodec const * encoder;
+ AVCodec const * decoder;
int initialized;
@@ -512,7 +512,6 @@ static int decode_chunk_vbr(quicktime_t
#if DECODE_AUDIO4
AVFrame f;
- int got_frame;
#endif
chunk_packets = lqt_audio_num_vbr_packets(file, track, track_map->cur_chunk, &num_samples);
@@ -548,13 +547,14 @@ static int decode_chunk_vbr(quicktime_t
codec->pkt.size = packet_size + AV_INPUT_BUFFER_PADDING_SIZE;
#if DECODE_AUDIO4
- frame_bytes = avcodec_decode_audio4(codec->avctx, &f,
- &got_frame, &codec->pkt);
- if(frame_bytes < 0)
+ if(avcodec_send_packet(codec->avctx, &codec->pkt) < 0 &&
+ avcodec_receive_frame(codec->avctx, &f) < 0)
{
lqt_log(file, LQT_LOG_ERROR, LOG_DOMAIN, "avcodec_decode_audio4 error");
break;
}
+ frame_bytes = codec->pkt.size;
+
bytes_decoded = f.nb_samples * 2 * track_map->channels;
memcpy(&codec->sample_buffer[track_map->channels *
(codec->sample_buffer_end -
@@ -615,7 +615,6 @@ static int decode_chunk(quicktime_t * fi
#if DECODE_AUDIO4
AVFrame f;
- int got_frame;
#endif
/* Read chunk */
@@ -764,14 +763,14 @@ static int decode_chunk(quicktime_t * fi
codec->pkt.size = codec->bytes_in_chunk_buffer + AV_INPUT_BUFFER_PADDING_SIZE;
#if DECODE_AUDIO4
-
- frame_bytes = avcodec_decode_audio4(codec->avctx, &f,
- &got_frame, &codec->pkt);
- if(frame_bytes < 0)
+ if(avcodec_send_packet(codec->avctx, &codec->pkt) < 0 ||
+ avcodec_receive_frame(codec->avctx, &f) < 0)
{
lqt_log(file, LQT_LOG_ERROR, LOG_DOMAIN, "avcodec_decode_audio4 error");
break;
}
+ frame_bytes = codec->pkt.size;
+
bytes_decoded = f.nb_samples * 2 * track_map->channels;
memcpy(&codec->sample_buffer[track_map->channels *
(codec->sample_buffer_end -
@@ -1198,7 +1197,6 @@ static int lqt_ffmpeg_encode_audio(quick
#if ENCODE_AUDIO2
AVFrame f;
AVPacket pkt;
- int got_packet;
#endif
if(!codec->initialized)
@@ -1274,15 +1272,11 @@ static int lqt_ffmpeg_encode_audio(quick
codec->avctx->frame_size * channels * 2,
1);
- if(avcodec_encode_audio2(codec->avctx, &pkt,
- &f, &got_packet) < 0)
+ if(avcodec_send_frame(codec->avctx, &f) < 0 ||
+ avcodec_receive_packet(codec->avctx, &pkt) < 0)
return 0;
- if(got_packet && pkt.size)
- frame_bytes = pkt.size;
- else
- frame_bytes = 0;
-
+ frame_bytes = pkt.size;
#else
frame_bytes = avcodec_encode_audio(codec->avctx, codec->chunk_buffer,
codec->chunk_buffer_alloc,
@@ -1474,8 +1468,9 @@ static int read_packet_ac3(quicktime_t *
}
void quicktime_init_audio_codec_ffmpeg(quicktime_codec_t * codec_base,
- quicktime_audio_map_t *atrack, AVCodec *encoder,
- AVCodec *decoder)
+ quicktime_audio_map_t *atrack,
+ const AVCodec *encoder,
+ const AVCodec *decoder)
{
quicktime_ffmpeg_audio_codec_t *codec;
--- a/plugins/ffmpeg/ffmpeg.h
+++ b/plugins/ffmpeg/ffmpeg.h
@@ -30,10 +30,12 @@
void quicktime_init_video_codec_ffmpeg(quicktime_codec_t * codec,
quicktime_video_map_t *vtrack,
- AVCodec *encoder, AVCodec *decoder);
+ const AVCodec *encoder,
+ const AVCodec *decoder);
void quicktime_init_audio_codec_ffmpeg(quicktime_codec_t * codec,
quicktime_audio_map_t *vtrack,
- AVCodec *encoder, AVCodec *decoder);
+ const AVCodec *encoder,
+ const AVCodec *decoder);
void lqt_ffmpeg_set_parameter(AVCodecContext * ctx,
#if LIBAVCODEC_VERSION_MAJOR >= 54
--- a/plugins/ffmpeg/lqt_ffmpeg.c
+++ b/plugins/ffmpeg/lqt_ffmpeg.c
@@ -315,8 +315,8 @@ struct CODECIDMAP
{
int id;
int index;
- AVCodec *encoder;
- AVCodec *decoder;
+ AVCodec const *encoder;
+ AVCodec const *decoder;
lqt_parameter_info_static_t * encode_parameters;
lqt_parameter_info_static_t * decode_parameters;
lqt_image_size_static_t * image_sizes;
@@ -947,7 +947,9 @@ static void ffmpeg_map_init(void)
return;
}
+#if LIBAVCODEC_VERSION_MAJOR < 59
avcodec_register_all();
+#endif
// avcodec_init();
ffmpeg_num_video_codecs = 0;
ffmpeg_num_audio_codecs = 0;
--- a/plugins/ffmpeg/params.c
+++ b/plugins/ffmpeg/params.c
@@ -124,12 +124,14 @@ typedef struct
}
+#if LIBAVCODEC_VERSION_MAJOR < 59
enum_t prediction_method[] =
{
{ "Left", FF_PRED_LEFT },
{ "Plane", FF_PRED_PLANE },
{ "Median", FF_PRED_MEDIAN }
};
+#endif
enum_t compare_func[] =
{
@@ -193,7 +195,9 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
PARAM_INT("ff_max_qdiff",max_qdiff);
PARAM_INT("ff_max_b_frames",max_b_frames);
PARAM_FLOAT("ff_b_quant_factor",b_quant_factor);
+#if LIBAVCODEC_VERSION_MAJOR < 59
PARAM_INT("ff_b_frame_strategy",b_frame_strategy);
+#endif
#if LIBAVCODEC_VERSION_MAJOR >= 55
PARAM_DICT_INT("ff_luma_elim_threshold","luma_elim_threshold");
@@ -216,7 +220,9 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
PARAM_FLOAT("ff_spatial_cplx_masking",spatial_cplx_masking);
PARAM_FLOAT("ff_p_masking",p_masking);
PARAM_FLOAT("ff_dark_masking",dark_masking);
+#if LIBAVCODEC_VERSION_MAJOR < 59
PARAM_ENUM("ff_prediction_method",prediction_method,prediction_method);
+#endif
PARAM_ENUM("ff_me_cmp",me_cmp,compare_func);
PARAM_CMP_CHROMA("ff_me_cmp_chroma",me_cmp);
PARAM_ENUM("ff_me_sub_cmp",me_sub_cmp,compare_func);
@@ -227,17 +233,23 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
PARAM_CMP_CHROMA("ff_ildct_cmp_chroma",ildct_cmp);
PARAM_INT("ff_dia_size",dia_size);
PARAM_INT("ff_last_predictor_count",last_predictor_count);
+#if LIBAVCODEC_VERSION_MAJOR < 59
PARAM_INT("ff_pre_me",pre_me);
+#endif
PARAM_ENUM("ff_me_pre_cmp",me_pre_cmp,compare_func);
PARAM_CMP_CHROMA("ff_pre_me_cmp_chroma",me_pre_cmp);
PARAM_INT("ff_pre_dia_size",pre_dia_size);
PARAM_INT("ff_me_subpel_quality",me_subpel_quality);
PARAM_INT("ff_me_range",me_range);
PARAM_ENUM("ff_mb_decision",mb_decision,mb_decision);
+#if LIBAVCODEC_VERSION_MAJOR < 59
PARAM_INT("ff_scenechange_threshold",scenechange_threshold);
+#endif
PARAM_DICT_INT("ff_lmin", "lmin");
PARAM_DICT_INT("ff_lmax", "lmax");
+#if LIBAVCODEC_VERSION_MAJOR < 59
PARAM_INT("ff_noise_reduction",noise_reduction);
+#endif
PARAM_INT_SCALE("ff_rc_initial_buffer_occupancy",rc_initial_buffer_occupancy,1000);
#if LIBAVCODEC_VERSION_MAJOR >= 55
@@ -253,9 +265,13 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
PARAM_DICT_INT("ff_border_masking","border_mask");
PARAM_QP2LAMBDA("ff_mb_lmin", mb_lmin);
PARAM_QP2LAMBDA("ff_mb_lmax", mb_lmax);
+#if LIBAVCODEC_VERSION_MAJOR < 59
PARAM_INT("ff_me_penalty_compensation",me_penalty_compensation);
+#endif
PARAM_INT("ff_bidir_refine",bidir_refine);
+#if LIBAVCODEC_VERSION_MAJOR < 59
PARAM_INT("ff_brd_scale",brd_scale);
+#endif
PARAM_FLAG("ff_flag_qscale",AV_CODEC_FLAG_QSCALE);
PARAM_FLAG("ff_flag_4mv",AV_CODEC_FLAG_4MV);
PARAM_FLAG("ff_flag_qpel",AV_CODEC_FLAG_QPEL);
--- a/plugins/ffmpeg/video.c
+++ b/plugins/ffmpeg/video.c
@@ -61,8 +61,8 @@ enum AvidYuvRange
typedef struct
{
AVCodecContext * avctx;
- AVCodec * encoder;
- AVCodec * decoder;
+ AVCodec const * encoder;
+ AVCodec const * decoder;
int initialized;
int decoding_delay;
@@ -878,10 +878,12 @@ static int lqt_ffmpeg_decode_video(quick
}
#endif
- if(avcodec_decode_video2(codec->avctx,
- codec->frame,
- &got_pic,
- &codec->pkt) < 0)
+ if(avcodec_send_packet(codec->avctx, &codec->pkt) == 0 &&
+ avcodec_receive_frame(codec->avctx, codec->frame) == 0)
+ {
+ got_pic = 1;
+ }
+ else
{
lqt_log(file, LQT_LOG_ERROR, LOG_DOMAIN, "Skipping corrupted frame");
continue;
@@ -1062,10 +1064,8 @@ static void resync_ffmpeg(quicktime_t *f
#if LIBAVCODEC_BUILD >= ((52<<16)+(26<<8)+0)
codec->pkt.data = codec->buffer;
codec->pkt.size = buffer_size;
- avcodec_decode_video2(codec->avctx,
- codec->frame,
- &got_pic,
- &codec->pkt);
+ got_pic = (avcodec_send_packet(codec->avctx, &codec->pkt) == 0 &&
+ avcodec_receive_frame(codec->avctx, codec->frame) == 0);
#else
avcodec_decode_video(codec->avctx,
codec->frame,
@@ -1139,7 +1139,9 @@ static int init_imx_encoder(quicktime_t
codec->avctx->intra_dc_precision = 2;
codec->avctx->qmin = 1;
codec->avctx->qmax = 3;
+#if (LIBAVCODEC_VERSION_MAJOR < 59)
codec->avctx->rtp_payload_size = 1; // ??
+#endif
av_dict_set(&codec->options, "rc_buf_aggressivity", "0.25", 0);
codec->avctx->flags |= AV_CODEC_FLAG_INTERLACED_DCT|AV_CODEC_FLAG_LOW_DELAY;
@@ -1290,7 +1292,6 @@ static int lqt_ffmpeg_encode_video(quick
int stats_len;
#if ENCODE_VIDEO2
AVPacket pkt;
- int got_packet;
#endif
int64_t pts;
int kf;
@@ -1530,16 +1531,12 @@ static int lqt_ffmpeg_encode_video(quick
#if ENCODE_VIDEO2 // New
av_init_packet(&pkt);
pkt.data = codec->buffer;
- pkt.size = codec->buffer_alloc;
+ pkt.size = bytes_encoded = codec->buffer_alloc;
- if(avcodec_encode_video2(codec->avctx, &pkt, codec->frame, &got_packet) < 0)
+ if(avcodec_send_frame(codec->avctx, codec->frame) < 0 ||
+ avcodec_receive_packet(codec->avctx, &pkt) < 0)
return -1;
- if(got_packet)
- bytes_encoded = pkt.size;
- else
- bytes_encoded = 0;
-
pts = pkt.pts;
kf = !!(pkt.flags & AV_PKT_FLAG_KEY);
@@ -1621,7 +1618,6 @@ static int flush(quicktime_t *file, int
#if ENCODE_VIDEO2
AVPacket pkt;
- int got_packet;
#endif
/* Do nothing if we didn't encode anything yet */
@@ -1631,18 +1627,13 @@ static int flush(quicktime_t *file, int
#if ENCODE_VIDEO2
av_init_packet(&pkt);
pkt.data = codec->buffer;
- pkt.size = codec->buffer_alloc;
+ pkt.size = bytes_encoded = codec->buffer_alloc;
- if(avcodec_encode_video2(codec->avctx, &pkt, (AVFrame*)0, &got_packet) < 0)
+ if(avcodec_send_frame(codec->avctx, NULL) < 0 ||
+ avcodec_receive_packet(codec->avctx, &pkt) < 0)
return -1;
- if(got_packet)
- bytes_encoded = pkt.size;
- else
- return 0;
-
pts = pkt.pts;
-
kf = !!(pkt.flags & AV_PKT_FLAG_KEY);
#else
@@ -1872,8 +1863,8 @@ static int init_compressed_dv(quicktime_
void quicktime_init_video_codec_ffmpeg(quicktime_codec_t * codec_base,
quicktime_video_map_t *vtrack,
- AVCodec *encoder,
- AVCodec *decoder)
+ const AVCodec *encoder,
+ const AVCodec *decoder)
{
quicktime_ffmpeg_video_codec_t *codec;
char *compressor;

View File

@@ -0,0 +1,124 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit libtool multilib-minimal
DESCRIPTION="An enhanced version of the quicktime4linux library"
HOMEPAGE="http://libquicktime.sourceforge.net/"
SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tar.gz"
LICENSE="LGPL-2.1"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
IUSE="aac alsa doc dv encode ffmpeg gtk jpeg lame cpu_flags_x86_mmx opengl png static-libs vorbis X x264"
RDEPEND="
sys-libs/zlib
>=virtual/libintl-0-r1[${MULTILIB_USEDEP}]
aac? (
>=media-libs/faad2-2.7-r3[${MULTILIB_USEDEP}]
encode? ( >=media-libs/faac-1.28-r3[${MULTILIB_USEDEP}] )
)
alsa? ( >=media-libs/alsa-lib-1.0.20 )
dv? ( >=media-libs/libdv-1.0.0-r3[${MULTILIB_USEDEP}] )
ffmpeg? ( >=media-video/ffmpeg-4:=[${MULTILIB_USEDEP}] )
gtk? ( x11-libs/gtk+:2 )
jpeg? ( media-libs/libjpeg-turbo:=[${MULTILIB_USEDEP}] )
lame? ( >=media-sound/lame-3.99.5-r1[${MULTILIB_USEDEP}] )
opengl? ( virtual/opengl )
png? ( >=media-libs/libpng-1.6.10:0[${MULTILIB_USEDEP}] )
vorbis? (
>=media-libs/libogg-1.3.0[${MULTILIB_USEDEP}]
>=media-libs/libvorbis-1.3.3-r1[${MULTILIB_USEDEP}]
)
X? (
x11-libs/libX11
x11-libs/libXaw
x11-libs/libXext
x11-libs/libXt
x11-libs/libXv
)
x264? ( >=media-libs/x264-0.0.20130506:=[${MULTILIB_USEDEP}] )"
DEPEND="${RDEPEND}"
BDEPEND="
virtual/pkgconfig
sys-devel/gettext
doc? ( app-text/doxygen )
X? ( x11-base/xorg-proto )"
REQUIRED_USE="opengl? ( X )"
DOCS=( ChangeLog README TODO )
PATCHES=(
"${FILESDIR}"/${P}+libav-9.patch
"${FILESDIR}"/${P}-ffmpeg2.patch
"${FILESDIR}"/${P}-ffmpeg29.patch
"${FILESDIR}"/${P}-CVE-2016-2399.patch
"${FILESDIR}"/${P}-CVE-2017-9122_et_al.patch
"${FILESDIR}"/${P}-implicit-func-decl.patch
"${FILESDIR}"/${P}-faad2.patch
"${FILESDIR}"/${P}-ffmpeg-codecs.patch
"${FILESDIR}"/${P}-ffmpeg4.patch
"${FILESDIR}"/${P}-ffmpeg5.patch
)
src_prepare() {
default
elibtoolize # Required for .so versioning on g/fbsd
}
multilib_src_configure() {
# utils use: alsa, opengl, gtk+, X
ECONF_SOURCE=${S} \
econf \
--enable-gpl \
$(use_enable static-libs static) \
$(use_enable cpu_flags_x86_mmx asm) \
$(multilib_native_use_with doc doxygen) \
$(use vorbis || echo --without-vorbis) \
$(use_with lame) \
$(multilib_native_use_with X x) \
$(multilib_native_use_with opengl) \
$(multilib_native_use_with alsa) \
$(multilib_native_use_with gtk) \
$(use_with dv libdv) \
$(use_with jpeg libjpeg) \
$(use_with ffmpeg) \
$(use_with png libpng) \
--without-schroedinger \
$(use_with aac faac) \
$(use encode || echo --without-faac) \
$(use_with aac faad2) \
$(use_with x264) \
--without-cpuflags
if ! multilib_is_native_abi; then
# disable building utilities
sed -i -e '/SUBDIRS =/s:utils::' Makefile || die
fi
}
multilib_src_install_all() {
einstalldocs
find "${D}" -name '*.la' -delete || die
# Compatibility with software that uses quicktime prefix, but
# don't do that when building for Darwin/MacOS
[[ ${CHOST} != *-darwin* ]] && dosym /usr/include/lqt /usr/include/quicktime
}
pkg_preinst() {
if [[ -d /usr/include/quicktime && ! -L /usr/include/quicktime ]]; then
elog "For compatibility with other quicktime libraries, ${PN} was"
elog "going to create a /usr/include/quicktime symlink, but for some"
elog "reason that is a directory on your system."
elog "Please check that is empty, and remove it, or submit a bug"
elog "telling us which package owns the directory."
die "/usr/include/quicktime is a directory."
fi
}