X-Git-Url: https://cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fbdwrite.C;h=1b864bb9720ba91a82c06b20771ba08355ad7408;hb=33758f9c7af61e85cc5934a22a5ca300703b233a;hp=96526002923d7cca154ab17e45b7560203fe38ed;hpb=018c9250fb76528e1eae0b031c6126aa50b0ecc8;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/bdwrite.C b/cinelerra-5.1/cinelerra/bdwrite.C index 96526002..1b864bb9 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");