diff options
author | Pacho Ramos <pacho@gentoo.org> | 2024-05-18 12:26:05 +0200 |
---|---|---|
committer | Pacho Ramos <pacho@gentoo.org> | 2024-05-18 12:28:10 +0200 |
commit | 18fa34358d5e58bd9c6a59b66602bd4ee329a70f (patch) | |
tree | 36bf2226831c07af28f19029d90cad6843011861 /media-libs | |
parent | dev-ruby/rdoc: Stabilize 6.6.3.1-r1 hppa, #927566 (diff) | |
download | gentoo-18fa34358d5e58bd9c6a59b66602bd4ee329a70f.tar.gz gentoo-18fa34358d5e58bd9c6a59b66602bd4ee329a70f.tar.bz2 gentoo-18fa34358d5e58bd9c6a59b66602bd4ee329a70f.zip |
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>
Diffstat (limited to 'media-libs')
4 files changed, 1203 insertions, 0 deletions
diff --git a/media-libs/libquicktime/files/libquicktime-1.2.4-faad2.patch b/media-libs/libquicktime/files/libquicktime-1.2.4-faad2.patch new file mode 100644 index 000000000000..563f46426f26 --- /dev/null +++ b/media-libs/libquicktime/files/libquicktime-1.2.4-faad2.patch @@ -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 + diff --git a/media-libs/libquicktime/files/libquicktime-1.2.4-ffmpeg-codecs.patch b/media-libs/libquicktime/files/libquicktime-1.2.4-ffmpeg-codecs.patch new file mode 100644 index 000000000000..8de9a288c176 --- /dev/null +++ b/media-libs/libquicktime/files/libquicktime-1.2.4-ffmpeg-codecs.patch @@ -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; + } diff --git a/media-libs/libquicktime/files/libquicktime-1.2.4-ffmpeg5.patch b/media-libs/libquicktime/files/libquicktime-1.2.4-ffmpeg5.patch new file mode 100644 index 000000000000..d340f084af41 --- /dev/null +++ b/media-libs/libquicktime/files/libquicktime-1.2.4-ffmpeg5.patch @@ -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; diff --git a/media-libs/libquicktime/libquicktime-1.2.4-r5.ebuild b/media-libs/libquicktime/libquicktime-1.2.4-r5.ebuild new file mode 100644 index 000000000000..cb5a5489826c --- /dev/null +++ b/media-libs/libquicktime/libquicktime-1.2.4-r5.ebuild @@ -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 +} |