cleanup of hv6 merge, add webm rendering
[goodguy/history.git] / cinelerra-5.1 / cinelerra / bdwrite.C
index 93b656904734ab4080980bc40a90b15b6c03f9a6..56b0b3f795f8b21977f51df36ba3c7204df88805 100644 (file)
@@ -135,7 +135,7 @@ enum {
   BLURAY_AUDIO_FORMAT_MONO = 1,
   BLURAY_AUDIO_FORMAT_STEREO = 3,
   BLURAY_AUDIO_FORMAT_MULTI_CHAN = 6,
-  BLURAY_AUDIO_FORMAT_COMBO = 12,   // Stereo ac3/dts, 
+  BLURAY_AUDIO_FORMAT_COMBO = 12,   // Stereo ac3/dts,
 
   BLURAY_AUDIO_RATE_48 = 1,
   BLURAY_AUDIO_RATE_96 = 4,
@@ -1345,7 +1345,7 @@ pb_obj::set_bdj(char *nm, int pt)
   bdj_name = cstrdup(nm);
 }
 
-void 
+void
 pb_obj::write_hdmv_obj(int id_ref)
 {
   bs.write(pb_typ, 2);
@@ -2453,7 +2453,7 @@ static int bd_aspect_ratio(int w, int h, double ratio)
   double aspect = (w * ratio) / h;
   if( fabs(aspect-1.333) < 0.01 ) return BLURAY_ASPECT_RATIO_4_3;
   if( fabs(aspect-1.777) < 0.01 ) return BLURAY_ASPECT_RATIO_16_9;
-  return w == 720 ? BLURAY_ASPECT_RATIO_4_3 : BLURAY_ASPECT_RATIO_16_9; 
+  return w == 720 ? BLURAY_ASPECT_RATIO_4_3 : BLURAY_ASPECT_RATIO_16_9;
   fprintf(stderr, "unknown bluray aspect ratio %5.3f\n",aspect);
   exit(1);
 }
@@ -2676,7 +2676,7 @@ Media::compose()
   mp->cmds.append(cmd);
   mov.movies.append(mp); // BREAK
 
-  
+
   for( int ii=0; ii<size(); ++ii ) {
     mp = new movie_obj();
     mp->resume_intention_flag = 1;
@@ -2882,8 +2882,8 @@ bd_path(const char *bp, const char *fmt, va_list ap)
 int Media::
 bd_copy(const char *ifn, const char *fmt, ...)
 {
-  int n, ret = 1;
-  char bfr[0x40000];
+  int bfrsz = 0x40000, ret = 1;
+  char bfr[bfrsz];
   FILE *ifp = fopen(ifn,"r");
   if( ifp ) {
     va_list ap;
@@ -2894,9 +2894,27 @@ bd_copy(const char *ifn, const char *fmt, ...)
     if( ofp ) {
       setvbuf(ifp, 0, _IOFBF, 0x80000);
       setvbuf(ofp, 0, _IOFBF, 0x80000);
-      while( (n=fread(bfr,1,sizeof(bfr),ifp)) > 0 ) fwrite(bfr,1,n,ofp);
-      fclose(ofp);
       ret = 0;
+      int n = bfrsz;
+      while( !ret && n >= bfrsz ) {
+       n = fread(bfr,1,bfrsz,ifp);
+        if( n > 0 && (int)fwrite(bfr,1,n,ofp) != n ) {
+          fprintf(stderr, "cant write: %s\n",filename);
+          ret = 1;
+       }
+      }
+      if( ferror(ifp) ) {
+        fprintf(stderr, "read error: %s = %m\n",ifn);
+        ret = 1;
+      }
+      if( ferror(ofp) ) {
+        fprintf(stderr, "write error: %s = %m\n",filename);
+        ret = 1;
+      }
+      if( fclose(ofp) ) {
+        fprintf(stderr, "close error: %s = %m\n",filename);
+        ret = 1;
+      }
     }
     fclose(ifp);
   }