Credit Andrea improved comments in render format
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / bdwrite.C
index d2ae7e6f34dd55c01971c6759f43716d78fbfb5e..1b864bb9720ba91a82c06b20771ba08355ad7408 100644 (file)
@@ -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");
@@ -3161,7 +3208,7 @@ int
 main(int ac, char **av)
 {
   char *path = av[1];
-  if( mkbdmv(path) ) return 1;
+  
   av_log_set_level(AV_LOG_FATAL);
   //av_log_set_level(AV_LOG_VERBOSE);
   //av_log_set_level(AV_LOG_DEBUG);
@@ -3171,10 +3218,11 @@ main(int ac, char **av)
 
   int opt = getopt(ac, av, "c:");
   if (opt == 'c') {
-  chapter_every_n_sec = optarg[0]; start = 3; }
+  chapter_every_n_sec = atoi(optarg); start = 4;
+  path = av[3]; printf("Chapter interval: %i \n", chapter_every_n_sec );}
   else
   start = 2;
-
+  if( mkbdmv(path) ) return 1;
   for( int ii=start; ii<ac; ++ii ) {
     char *ap = av[ii];
     // any dash seq followed by number sets curr title pgm_pid