X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.1%2Fcinelerra%2Fbdwrite.C;h=56b0b3f795f8b21977f51df36ba3c7204df88805;hb=9db053d413fde01439cc72ec2109913dfda2ec7b;hp=93b656904734ab4080980bc40a90b15b6c03f9a6;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/bdwrite.C b/cinelerra-5.1/cinelerra/bdwrite.C index 93b65690..56b0b3f7 100644 --- a/cinelerra-5.1/cinelerra/bdwrite.C +++ b/cinelerra-5.1/cinelerra/bdwrite.C @@ -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; iiresume_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); }