diff options
Diffstat (limited to 'community/cinelerra-cv/ffmpeg_api.patch')
-rw-r--r-- | community/cinelerra-cv/ffmpeg_api.patch | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/community/cinelerra-cv/ffmpeg_api.patch b/community/cinelerra-cv/ffmpeg_api.patch new file mode 100644 index 000000000..d9747476c --- /dev/null +++ b/community/cinelerra-cv/ffmpeg_api.patch @@ -0,0 +1,163 @@ +diff --git a/cinelerra/ffmpeg.C b/cinelerra/ffmpeg.C +index 6ab6047..7cde503 100644 +--- a/cinelerra/ffmpeg.C ++++ b/cinelerra/ffmpeg.C +@@ -23,7 +23,6 @@ FFMPEG::FFMPEG(Asset *asset) { + + int FFMPEG::init(char *codec_string) { + +- avcodec_init(); + avcodec_register_all(); + + CodecID id = codec_id(codec_string); +@@ -364,12 +363,15 @@ int FFMPEG::decode(uint8_t *data, long data_size, VFrame *frame_out) { + + // NOTE: frame must already have data space allocated + ++ AVPacket pkt; + got_picture = 0; +- int length = avcodec_decode_video(context, ++ av_init_packet( &pkt ); ++ pkt.data = data; ++ pkt.size = data_size; ++ int length = avcodec_decode_video2(context, + picture, + &got_picture, +- data, +- data_size); ++ &pkt); + + if (length < 0) { + printf("FFMPEG::decode error decoding frame\n"); +diff --git a/cinelerra/fileac3.C b/cinelerra/fileac3.C +index a1ef61e..e56705f 100644 +--- a/cinelerra/fileac3.C ++++ b/cinelerra/fileac3.C +@@ -84,7 +84,6 @@ int FileAC3::open_file(int rd, int wr) + + if(wr) + { +- avcodec_init(); + avcodec_register_all(); + codec = avcodec_find_encoder(CODEC_ID_AC3); + if(!codec) +diff --git a/quicktime/mpeg4.c b/quicktime/mpeg4.c +index 81cb72b..67bcab8 100644 +--- a/quicktime/mpeg4.c ++++ b/quicktime/mpeg4.c +@@ -629,7 +629,6 @@ static int encode(quicktime_t *file, unsigned char **row_pointers, int track) + if(!ffmpeg_initialized) + { + ffmpeg_initialized = 1; +- avcodec_init(); + avcodec_register_all(); + } + +@@ -674,7 +673,7 @@ static int encode(quicktime_t *file, unsigned char **row_pointers, int track) + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + context->error_resilience = FF_ER_CAREFUL; + #else +- context->error_recognition = FF_ER_CAREFUL; ++ context->err_recognition = AV_EF_CRCCHECK; + #endif + context->error_concealment = 3; + context->frame_skip_cmp = FF_CMP_DCTMAX; +@@ -699,7 +698,6 @@ static int encode(quicktime_t *file, unsigned char **row_pointers, int track) + context->profile= FF_PROFILE_UNKNOWN; + context->rc_buffer_aggressivity = 1.0; + context->level= FF_LEVEL_UNKNOWN; +- context->flags |= CODEC_FLAG_H263P_UMV; + context->flags |= CODEC_FLAG_AC_PRED; + + // All the forbidden settings can be extracted from libavcodec/mpegvideo.c of ffmpeg... +@@ -717,10 +715,8 @@ static int encode(quicktime_t *file, unsigned char **row_pointers, int track) + (codec->ffmpeg_id == CODEC_ID_MPEG4 || + codec->ffmpeg_id == CODEC_ID_MPEG1VIDEO || + codec->ffmpeg_id == CODEC_ID_MPEG2VIDEO || +- codec->ffmpeg_id == CODEC_ID_H263P || +- codec->ffmpeg_id == CODEC_FLAG_H263P_SLICE_STRUCT)) ++ codec->ffmpeg_id == CODEC_ID_H263P)) + { +- avcodec_thread_init(context, file->cpus); + context->thread_count = file->cpus; + } + +diff --git a/quicktime/qtffmpeg.c b/quicktime/qtffmpeg.c +index 8c532c2..a2b51e9 100644 +--- a/quicktime/qtffmpeg.c ++++ b/quicktime/qtffmpeg.c +@@ -54,7 +54,6 @@ quicktime_ffmpeg_t* quicktime_new_ffmpeg(int cpus, + if(!ffmpeg_initialized) + { + ffmpeg_initialized = 1; +- avcodec_init(); + avcodec_register_all(); + } + +@@ -90,10 +89,8 @@ quicktime_ffmpeg_t* quicktime_new_ffmpeg(int cpus, + (ffmpeg_id == CODEC_ID_MPEG4 || + ffmpeg_id == CODEC_ID_MPEG1VIDEO || + ffmpeg_id == CODEC_ID_MPEG2VIDEO || +- ffmpeg_id == CODEC_ID_H263P || +- ffmpeg_id == CODEC_FLAG_H263P_SLICE_STRUCT)) ++ ffmpeg_id == CODEC_ID_H263P)) + { +- avcodec_thread_init(context, cpus); + context->thread_count = cpus; + } + if(avcodec_open(context, +@@ -181,6 +178,7 @@ static int decode_wrapper(quicktime_t *file, + + if(!result) + { ++ AVPacket pkt; + + + // No way to determine if there was an error based on nonzero status. +@@ -189,11 +187,13 @@ static int decode_wrapper(quicktime_t *file, + ffmpeg->decoder_context[current_field]->skip_frame = AVDISCARD_NONREF /* AVDISCARD_BIDIR */; + else + ffmpeg->decoder_context[current_field]->skip_frame = AVDISCARD_DEFAULT; +- result = avcodec_decode_video(ffmpeg->decoder_context[current_field], ++ av_init_packet( &pkt ); ++ pkt.data = ffmpeg->work_buffer; ++ pkt.size = bytes + header_bytes; ++ result = avcodec_decode_video2(ffmpeg->decoder_context[current_field], + &ffmpeg->picture[current_field], + &got_picture, +- ffmpeg->work_buffer, +- bytes + header_bytes); ++ &pkt); + + + +diff --git a/quicktime/wma.c b/quicktime/wma.c +index c045741..abc2dc8 100644 +--- a/quicktime/wma.c ++++ b/quicktime/wma.c +@@ -67,7 +67,6 @@ static int init_decode(quicktime_audio_map_t *track_map, + if(!ffmpeg_initialized) + { + ffmpeg_initialized = 1; +- avcodec_init(); + avcodec_register_all(); + } + +@@ -195,11 +194,14 @@ printf("decode 2 %x %llx %llx\n", chunk_size, chunk_offset, chunk_offset + chunk + chunk_size); + #else + bytes_decoded = AVCODEC_MAX_AUDIO_FRAME_SIZE; +- result = avcodec_decode_audio2(codec->decoder_context, ++ AVPacket pkt; ++ av_init_packet( &pkt ); ++ pkt.data = codec->packet_buffer; ++ pkt.size = chunk_size; ++ result = avcodec_decode_audio3(codec->decoder_context, + (int16_t*)(codec->work_buffer + codec->output_size * sample_size), + &bytes_decoded, +- codec->packet_buffer, +- chunk_size); ++ &pkt); + #endif + + pthread_mutex_unlock(&ffmpeg_lock); |