X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fbdwrite.C;h=6a2b4ca3cb4b9bcec54d7b8620a74b51cafd7395;hp=96526002923d7cca154ab17e45b7560203fe38ed;hb=refs%2Fheads%2Fmaster;hpb=018c9250fb76528e1eae0b031c6126aa50b0ecc8 diff --git a/cinelerra-5.1/cinelerra/bdwrite.C b/cinelerra-5.1/cinelerra/bdwrite.C index 96526002..1f7f027e 100644 --- a/cinelerra-5.1/cinelerra/bdwrite.C +++ b/cinelerra-5.1/cinelerra/bdwrite.C @@ -1,3 +1,23 @@ +/* + * CINELERRA + * Copyright (C) 2016-2020 William Morrow + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + */ + //#include "bd.h" //This program was created by inverting libbluray, without any docs, // so it is probably got problems. Still, works on my Samsung player. @@ -2530,7 +2550,12 @@ static int field_probe(AVFormatContext *fmt_ctx, AVStream *st) AVDictionary *copts = 0; //av_dict_copy(&copts, opts, 0); AVCodecID codec_id = st->codecpar->codec_id; +#if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(58,134,100) AVCodec *decoder = avcodec_find_decoder(codec_id); +#endif +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,16,100) + const AVCodec *decoder = avcodec_find_decoder(codec_id); +#endif AVCodecContext *ctx = avcodec_alloc_context3(decoder); if( !ctx ) { fprintf(stderr,"codec alloc failed\n"); @@ -2570,6 +2595,22 @@ static int field_probe(AVFormatContext *fmt_ctx, AVStream *st) av_packet_unref(&ipkt); av_frame_free(&ipic); avcodec_free_context(&ctx); + + if (ilaced < 0) { + fprintf(stderr, "warning bdwrite uses field into from stream \n", st->codecpar->field_order); + switch(st->codecpar->field_order) { + case AV_FIELD_TT: + case AV_FIELD_TB: + case AV_FIELD_BB: + case AV_FIELD_BT: + return 1; + case AV_FIELD_PROGRESSIVE: + return 0; + default: + return -1; + } + } + return ilaced; } @@ -2604,7 +2645,13 @@ int media_info::scan() stream *s = new stream(type, i); s->pid = st->id; AVCodecID codec_id = st->codecpar->codec_id; +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,16,100) + const AVCodec *decoder = avcodec_find_decoder(codec_id); +#endif +#if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(58,134,100) AVCodec *decoder = avcodec_find_decoder(codec_id); +#endif + s->ctx = avcodec_alloc_context3(decoder); if( !s->ctx ) { fprintf(stderr, "avcodec_alloc_context failed\n"); @@ -2628,7 +2675,7 @@ int media_info::scan() break; } case AVMEDIA_TYPE_AUDIO: { s->coding_type = bd_coding_type(codec_id); - s->format = bd_audio_format(st->codecpar->channels); + s->format = bd_audio_format(st->codecpar->ch_layout.nb_channels); s->rate = bd_audio_rate(st->codecpar->sample_rate); strcpy((char*)s->lang, "eng"); break; }