Credit Andrew - fix vorbis audio which was scratchy and ensure aging plugin does...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / asset.C
index eebc6f2739f96ceeec6ce8ccb49de3c6bc3ffe3a..59454153a5b92ea40079a5b334b48c86e905a6da 100644 (file)
@@ -84,6 +84,7 @@ int Asset::init_values()
        strcpy(acodec, "");
 
        strcpy(fformat,"mp4");
+       ff_format_options[0] = 0;
        ff_audio_options[0] = 0;
        ff_sample_format[0] = 0;
        ff_audio_bitrate = 0;
@@ -92,6 +93,8 @@ int Asset::init_values()
        ff_pixel_format[0] = 0;
        ff_video_bitrate = 0;
        ff_video_quality = -1;
+       ff_color_space = -1;
+       ff_color_range = -1;
 
        jpeg_quality = 80;
        aspect_ratio = -1;
@@ -101,6 +104,18 @@ int Asset::init_values()
        ampeg_bitrate = 256;
        ampeg_derivative = 3;
 
+       vorbis_vbr = 0;
+       vorbis_min_bitrate = -1;
+       vorbis_bitrate = 128000;
+       vorbis_max_bitrate = -1;
+
+       theora_fix_bitrate = 1;
+       theora_bitrate = 860000;
+       theora_quality = 16;
+       theora_sharpness = 2;
+       theora_keyframe_frequency = 64;
+       theora_keyframe_force_frequency = 64;
+
 // mpeg parameters
        vmpeg_iframe_distance = 45;
        vmpeg_pframe_distance = 0;
@@ -117,7 +132,11 @@ int Asset::init_values()
 
        ac3_bitrate = 128;
 
+       flac_compression = 0;
+
        png_use_alpha = 0;
+       png_depth = 8;
+       png_compression = 0;
 
        exr_use_alpha = 0;
        exr_compression = 0;
@@ -147,7 +166,10 @@ void Asset::reset_video()
        layers = 0;
        actual_width = width = 0;
        actual_height = height = 0;
+       proxy_scale = 0; // not a proxy
+       proxy_edl = 0; // not proxy from edl
        video_length = 0;
+       timecode = -2; // unknown
        single_frame = 0;
        vmpeg_cmodel = BC_YUV420P;
        frame_rate = 0;
@@ -161,9 +183,9 @@ void Asset::boundaries()
 // sample_rate & frame_rate are user defined
 //     CLAMP(sample_rate, 1, 1000000);
 //     CLAMP(frame_rate, 0.001, 1000000);
-       CLAMP(channels, 0, 16);
-       CLAMP(width, 0, 10000);
-       CLAMP(height, 0, 10000);
+       CLAMP(channels, 0, MAX_CHANNELS-1);
+       CLAMP(width, 0, ASSET_MAX_WIDTH);
+       CLAMP(height, 0, ASSET_MAX_HEIGHT);
 //printf("Asset::boundaries %d %d %f\n", __LINE__, sample_rate, frame_rate);
 }
 
@@ -186,6 +208,7 @@ void Asset::copy_format(Asset *asset, int do_index)
        audio_data = asset->audio_data;
        format = asset->format;
        strcpy(fformat, asset->fformat);
+       strcpy(ff_format_options, asset->ff_format_options);
        channels = asset->channels;
        sample_rate = asset->sample_rate;
        bits = asset->bits;
@@ -197,6 +220,7 @@ void Asset::copy_format(Asset *asset, int do_index)
        use_header = asset->use_header;
        aspect_ratio = asset->aspect_ratio;
        interlace_mode = asset->interlace_mode;
+       timecode = asset->timecode;
 
        video_data = asset->video_data;
        layers = asset->layers;
@@ -206,6 +230,8 @@ void Asset::copy_format(Asset *asset, int do_index)
        height = asset->height;
        actual_width = asset->actual_width;
        actual_height = asset->actual_height;
+       proxy_scale = asset->proxy_scale;
+       proxy_edl = asset->proxy_edl;
        strcpy(vcodec, asset->vcodec);
        strcpy(acodec, asset->acodec);
 
@@ -217,6 +243,8 @@ void Asset::copy_format(Asset *asset, int do_index)
        strcpy(ff_pixel_format, asset->ff_pixel_format);
        ff_video_bitrate = asset->ff_video_bitrate;
        ff_video_quality = asset->ff_video_quality;
+       ff_color_space = asset->ff_color_space;
+       ff_color_range = asset->ff_color_range;
 
        this->audio_length = asset->audio_length;
        this->video_length = asset->video_length;
@@ -225,6 +253,21 @@ void Asset::copy_format(Asset *asset, int do_index)
        ampeg_bitrate = asset->ampeg_bitrate;
        ampeg_derivative = asset->ampeg_derivative;
 
+
+       vorbis_vbr = asset->vorbis_vbr;
+       vorbis_min_bitrate = asset->vorbis_min_bitrate;
+       vorbis_bitrate = asset->vorbis_bitrate;
+       vorbis_max_bitrate = asset->vorbis_max_bitrate;
+
+
+       theora_fix_bitrate = asset->theora_fix_bitrate;
+       theora_bitrate = asset->theora_bitrate;
+       theora_quality = asset->theora_quality;
+       theora_sharpness = asset->theora_sharpness;
+       theora_keyframe_frequency = asset->theora_keyframe_frequency;
+       theora_keyframe_force_frequency = asset->theora_keyframe_frequency;
+
+
        jpeg_quality = asset->jpeg_quality;
 
 // mpeg parameters
@@ -244,13 +287,16 @@ void Asset::copy_format(Asset *asset, int do_index)
        ac3_bitrate = asset->ac3_bitrate;
 
        png_use_alpha = asset->png_use_alpha;
+       png_depth = asset->png_depth;
+       png_compression = asset->png_compression;
        exr_use_alpha = asset->exr_use_alpha;
        exr_compression = asset->exr_compression;
 
        tiff_cmodel = asset->tiff_cmodel;
        tiff_compression = asset->tiff_compression;
-       
-       
+
+       flac_compression = asset->flac_compression;
+
        mov_sphere = asset->mov_sphere;
        jpeg_sphere = asset->jpeg_sphere;
 }
@@ -312,11 +358,12 @@ int Asset::equivalent(Asset &asset, int test_audio, int test_video, EDL *edl)
                delete [] out_path;
        }
 
-       if(result && format == FILE_FFMPEG && strcmp(fformat, asset.fformat) )
+       if( result && format == FILE_FFMPEG &&
+           (strcmp(fformat, asset.fformat) ||
+            strcmp(ff_format_options, asset.ff_format_options)) )
                result = 0;
 
-       if(test_audio && result)
-       {
+       if(test_audio && result) {
                result = (channels == asset.channels &&
                        sample_rate == asset.sample_rate &&
                        bits == asset.bits &&
@@ -325,30 +372,20 @@ int Asset::equivalent(Asset &asset, int test_audio, int test_video, EDL *edl)
                        header == asset.header &&
                        dither == asset.dither &&
                        !strcmp(acodec, asset.acodec));
-               if(result && format == FILE_FFMPEG)
-                       result = !strcmp(ff_audio_options, asset.ff_audio_options) &&
-                               !strcmp(ff_sample_format, asset.ff_sample_format) &&
-                               ff_audio_bitrate == asset.ff_audio_bitrate &&
-                               ff_audio_quality == asset.ff_audio_quality;
        }
 
 
-       if(test_video && result)
-       {
+       if(test_video && result) {
                result = (layers == asset.layers &&
                        program == asset.program &&
                        frame_rate == asset.frame_rate &&
-                       asset.interlace_mode    == interlace_mode &&
+                       asset.interlace_mode == interlace_mode &&
+                       asset.timecode == timecode &&
                        width == asset.width &&
                        height == asset.height &&
                        !strcmp(vcodec, asset.vcodec) &&
                        mov_sphere == asset.mov_sphere &&
                        jpeg_sphere == asset.jpeg_sphere);
-               if(result && format == FILE_FFMPEG)
-                       result = !strcmp(ff_video_options, asset.ff_video_options) &&
-                               !strcmp(ff_pixel_format, asset.ff_pixel_format) &&
-                               ff_video_bitrate == asset.ff_video_bitrate &&
-                               ff_video_quality == asset.ff_video_quality;
        }
 
        return result;
@@ -362,88 +399,38 @@ int Asset::test_path(const char *path)
                return 0;
 }
 
-int Asset::read(FileXML *file,
-       int expand_relative)
+int Asset::read(FileXML *file, int expand_relative)
 {
        int result = 0;
-
 // Check for relative path.
-       if(expand_relative)
-       {
+       if( expand_relative ) {
                char new_path[BCTEXTLEN];
                char asset_directory[BCTEXTLEN];
                char input_directory[BCTEXTLEN];
                FileSystem fs;
-
                strcpy(new_path, path);
                fs.set_current_dir("");
-
                fs.extract_dir(asset_directory, path);
-
 // No path in asset.
 // Take path of XML file.
-               if(!asset_directory[0])
-               {
+               if( !asset_directory[0] ) {
                        fs.extract_dir(input_directory, file->filename);
-
 // Input file has a path
                        if(input_directory[0])
-                       {
                                fs.join_names(path, input_directory, new_path);
-                       }
                }
        }
 
-
-       while(!result)
-       {
-               result = file->read_tag();
-               if(!result)
-               {
-                       if(file->tag.title_is("/ASSET"))
-                       {
-                               result = 1;
-                       }
-                       else
-                       if(file->tag.title_is("AUDIO"))
-                       {
-                               read_audio(file);
-                       }
-                       else
-                       if(file->tag.title_is("AUDIO_OMIT"))
-                       {
-                               read_audio(file);
-                       }
-                       else
-                       if(file->tag.title_is("FORMAT"))
-                       {
-                               const char *string = file->tag.get_property("TYPE");
-                               format = File::strtoformat(string);
-                               use_header =
-                                       file->tag.get_property("USE_HEADER", use_header);
-                               file->tag.get_property("FFORMAT", fformat);
-                       }
-                       else
-                       if(file->tag.title_is("FOLDER"))
-                       {
-                               folder_no = file->tag.get_property("NUMBER", AW_MEDIA_FOLDER);
-                       }
-                       else
-                       if(file->tag.title_is("VIDEO"))
-                       {
-                               read_video(file);
-                       }
-                       else
-                       if(file->tag.title_is("VIDEO_OMIT"))
-                       {
-                               read_video(file);
-                       }
-                       else
-                       if(file->tag.title_is("INDEX"))
-                       {
-                               read_index(file);
-                       }
-               }
+       while( !(result=file->read_tag()) ) {
+               if( file->tag.title_is("/ASSET") ) break;
+               if( file->tag.title_is("AUDIO")  ) { read_audio(file);  continue; }
+               if( file->tag.title_is("AUDIO_OMIT") ) { read_audio(file);  continue; }
+               if( file->tag.title_is("FORMAT") ) { read_format(file);  continue; }
+               if( file->tag.title_is("VIDEO")  ) { read_video(file);  continue; }
+               if( file->tag.title_is("VIDEO_OMIT") ) { read_video(file);  continue; }
+               if( file->tag.title_is("INDEX")  ) { read_index(file);  continue; }
+               if( file->tag.title_is("FOLDER") )
+                       folder_no = file->tag.get_property("NUMBER", AW_MEDIA_FOLDER);
        }
 
        boundaries();
@@ -479,6 +466,8 @@ int Asset::read_video(FileXML *file)
        actual_width = file->tag.get_property("ACTUAL_WIDTH", actual_width);
        height = file->tag.get_property("HEIGHT", height);
        width = file->tag.get_property("WIDTH", width);
+       proxy_scale = file->tag.get_property("PROXY_SCALE", 0);
+       proxy_edl = file->tag.get_property("PROXY_EDL", 0);
        layers = file->tag.get_property("LAYERS", layers);
        program = file->tag.get_property("PROGRAM", program);
 // This is loaded from the index file after the EDL but this
@@ -488,6 +477,7 @@ int Asset::read_video(FileXML *file)
        file->tag.get_property("VCODEC", vcodec);
 
        video_length = file->tag.get_property("VIDEO_LENGTH", (int64_t)0);
+       timecode = file->tag.get_property("TIMECODE", -2);
        mov_sphere = file->tag.get_property("MOV_SPHERE", 0);
        jpeg_sphere = file->tag.get_property("JPEG_SPHERE", 0);
        single_frame = file->tag.get_property("SINGLE_FRAME", (int64_t)0);
@@ -497,6 +487,18 @@ int Asset::read_video(FileXML *file)
        return 0;
 }
 
+int Asset::read_format(FileXML *file)
+{
+       const char *string = file->tag.get_property("TYPE");
+       format = File::strtoformat(string);
+       use_header = file->tag.get_property("USE_HEADER", use_header);
+       fformat[0] = 0;
+       file->tag.get_property("FFORMAT", fformat);
+       ff_format_options[0] = 0;
+       file->tag.get_property("FF_FORMAT_OPTIONS", ff_format_options);
+       return 0;
+}
+
 int Asset::read_index(FileXML *file)
 {
        index_state->read_xml(file, channels);
@@ -551,6 +553,7 @@ int Asset::write(FileXML *file,
                File::formattostr(format));
        file->tag.set_property("USE_HEADER", use_header);
        file->tag.set_property("FFORMAT", fformat);
+       file->tag.set_property("FF_FORMAT_OPTIONS", ff_format_options);
 
        file->append_tag();
        file->tag.set_title("/FORMAT");
@@ -600,7 +603,14 @@ int Asset::write_audio(FileXML *file)
 
 //     file->tag.set_property("AMPEG_BITRATE", ampeg_bitrate);
 //     file->tag.set_property("AMPEG_DERIVATIVE", ampeg_derivative);
+//
+//     file->tag.set_property("VORBIS_VBR", vorbis_vbr);
+//     file->tag.set_property("VORBIS_MIN_BITRATE", vorbis_min_bitrate);
+//     file->tag.set_property("VORBIS_BITRATE", vorbis_bitrate);
+//     file->tag.set_property("VORBIS_MAX_BITRATE", vorbis_max_bitrate);
+//
 //     file->tag.set_property("MP3_BITRATE", mp3_bitrate);
+//
 
 
 
@@ -626,6 +636,8 @@ int Asset::write_video(FileXML *file)
        file->tag.set_property("ACTUAL_WIDTH", actual_width);
        file->tag.set_property("HEIGHT", height);
        file->tag.set_property("WIDTH", width);
+       file->tag.set_property("PROXY_SCALE", proxy_scale);
+       file->tag.set_property("PROXY_EDL", proxy_edl);
        file->tag.set_property("LAYERS", layers);
        file->tag.set_property("PROGRAM", program);
        file->tag.set_property("FRAMERATE", frame_rate);
@@ -633,6 +645,7 @@ int Asset::write_video(FileXML *file)
                file->tag.set_property("VCODEC", vcodec);
 
        file->tag.set_property("VIDEO_LENGTH", video_length);
+       file->tag.set_property("TIMECODE", timecode);
        file->tag.set_property("MOV_SPHERE", mov_sphere);
        file->tag.set_property("JPEG_SPHERE", jpeg_sphere);
        file->tag.set_property("SINGLE_FRAME", single_frame);
@@ -699,6 +712,7 @@ void Asset::load_defaults(BC_Hash *defaults,
                format = GET_DEFAULT("FORMAT", format);
                use_header = GET_DEFAULT("USE_HEADER", use_header);
                GET_DEFAULT("FFORMAT", fformat);
+               GET_DEFAULT("FF_FORMAT_OPTIONS", ff_format_options);
        }
 
        if(do_data_types)
@@ -727,6 +741,8 @@ void Asset::load_defaults(BC_Hash *defaults,
                width = GET_DEFAULT("WIDTH", width);
                actual_height = GET_DEFAULT("ACTUAL_HEIGHT", actual_height);
                actual_width = GET_DEFAULT("ACTUAL_WIDTH", actual_width);
+               proxy_scale = GET_DEFAULT("PROXY_SCALE", proxy_scale);
+               proxy_edl = GET_DEFAULT("PROXY_SCALE", proxy_edl);
                program = GET_DEFAULT("PROGRAM", program);
                layers = GET_DEFAULT("LAYERS", layers);
                if(EQUIV(frame_rate, 0)) frame_rate = GET_DEFAULT("FRAMERATE", frame_rate);
@@ -737,6 +753,18 @@ void Asset::load_defaults(BC_Hash *defaults,
        ampeg_bitrate = GET_DEFAULT("AMPEG_BITRATE", ampeg_bitrate);
        ampeg_derivative = GET_DEFAULT("AMPEG_DERIVATIVE", ampeg_derivative);
 
+       vorbis_vbr = GET_DEFAULT("VORBIS_VBR", vorbis_vbr);
+       vorbis_min_bitrate = GET_DEFAULT("VORBIS_MIN_BITRATE", vorbis_min_bitrate);
+       vorbis_bitrate = GET_DEFAULT("VORBIS_BITRATE", vorbis_bitrate);
+       vorbis_max_bitrate = GET_DEFAULT("VORBIS_MAX_BITRATE", vorbis_max_bitrate);
+
+       theora_fix_bitrate = GET_DEFAULT("THEORA_FIX_BITRATE", theora_fix_bitrate);
+       theora_bitrate = GET_DEFAULT("THEORA_BITRATE", theora_bitrate);
+       theora_quality = GET_DEFAULT("THEORA_QUALITY", theora_quality);
+       theora_sharpness = GET_DEFAULT("THEORA_SHARPNESS", theora_sharpness);
+       theora_keyframe_frequency = GET_DEFAULT("THEORA_KEYFRAME_FREQUENCY", theora_keyframe_frequency);
+       theora_keyframe_force_frequency = GET_DEFAULT("THEORA_FORCE_KEYFRAME_FREQUENCY", theora_keyframe_force_frequency);
+
        GET_DEFAULT("FF_AUDIO_OPTIONS", ff_audio_options);
        GET_DEFAULT("FF_SAMPLE_FORMAT", ff_sample_format);
        ff_audio_bitrate = GET_DEFAULT("FF_AUDIO_BITRATE", ff_audio_bitrate);
@@ -745,6 +773,9 @@ void Asset::load_defaults(BC_Hash *defaults,
        GET_DEFAULT("FF_PIXEL_FORMAT", ff_pixel_format);
        ff_video_bitrate = GET_DEFAULT("FF_VIDEO_BITRATE", ff_video_bitrate);
        ff_video_quality = GET_DEFAULT("FF_VIDEO_QUALITY", ff_video_quality);
+       ff_color_space = GET_DEFAULT("FF_COLOR_SPACE", ff_color_space);
+       ff_color_range = GET_DEFAULT("FF_COLOR_RANGE", ff_color_range);
+       GET_DEFAULT("FF_FORMAT_OPTIONS", ff_format_options);
 
        mp3_bitrate = GET_DEFAULT("MP3_BITRATE", mp3_bitrate);
 
@@ -766,13 +797,17 @@ void Asset::load_defaults(BC_Hash *defaults,
        vmpeg_preset = GET_DEFAULT("VMPEG_PRESET", vmpeg_preset);
        vmpeg_field_order = GET_DEFAULT("VMPEG_FIELD_ORDER", vmpeg_field_order);
 
+
        ac3_bitrate = GET_DEFAULT("AC3_BITRATE", ac3_bitrate);
 
        png_use_alpha = GET_DEFAULT("PNG_USE_ALPHA", png_use_alpha);
+       png_depth = GET_DEFAULT("PNG_DEPTH", png_depth);
+       png_compression = GET_DEFAULT("PNG_COMPRESSION", png_compression);
        exr_use_alpha = GET_DEFAULT("EXR_USE_ALPHA", exr_use_alpha);
        exr_compression = GET_DEFAULT("EXR_COMPRESSION", exr_compression);
        tiff_cmodel = GET_DEFAULT("TIFF_CMODEL", tiff_cmodel);
        tiff_compression = GET_DEFAULT("TIFF_COMPRESSION", tiff_compression);
+       flac_compression = GET_DEFAULT("FLAC_COMPRESSION", flac_compression);
 
        mov_sphere = GET_DEFAULT("MOV_SPHERE", mov_sphere);
        jpeg_sphere = GET_DEFAULT("JPEG_SPHERE", jpeg_sphere);
@@ -799,6 +834,7 @@ void Asset::save_defaults(BC_Hash *defaults,
                UPDATE_DEFAULT("FORMAT", format);
                UPDATE_DEFAULT("USE_HEADER", use_header);
                UPDATE_DEFAULT("FFORMAT", fformat);
+               UPDATE_DEFAULT("FF_FORMAT_OPTIONS", ff_format_options);
        }
 
        if(do_data_types)
@@ -815,6 +851,11 @@ void Asset::save_defaults(BC_Hash *defaults,
                UPDATE_DEFAULT("AMPEG_BITRATE", ampeg_bitrate);
                UPDATE_DEFAULT("AMPEG_DERIVATIVE", ampeg_derivative);
 
+               UPDATE_DEFAULT("VORBIS_VBR", vorbis_vbr);
+               UPDATE_DEFAULT("VORBIS_MIN_BITRATE", vorbis_min_bitrate);
+               UPDATE_DEFAULT("VORBIS_BITRATE", vorbis_bitrate);
+               UPDATE_DEFAULT("VORBIS_MAX_BITRATE", vorbis_max_bitrate);
+
                UPDATE_DEFAULT("FF_AUDIO_OPTIONS", ff_audio_options);
                UPDATE_DEFAULT("FF_SAMPLE_FORMAT", ff_sample_format);
                UPDATE_DEFAULT("FF_AUDIO_BITRATE", ff_audio_bitrate);
@@ -823,6 +864,17 @@ void Asset::save_defaults(BC_Hash *defaults,
                UPDATE_DEFAULT("FF_PIXEL_FORMAT",  ff_pixel_format);
                UPDATE_DEFAULT("FF_VIDEO_BITRATE", ff_video_bitrate);
                UPDATE_DEFAULT("FF_VIDEO_QUALITY", ff_video_quality);
+               UPDATE_DEFAULT("FF_COLOR_SPACE", ff_color_space);
+               UPDATE_DEFAULT("FF_COLOR_RANGE", ff_color_range);
+
+               UPDATE_DEFAULT("THEORA_FIX_BITRATE", theora_fix_bitrate);
+               UPDATE_DEFAULT("THEORA_BITRATE", theora_bitrate);
+               UPDATE_DEFAULT("THEORA_QUALITY", theora_quality);
+               UPDATE_DEFAULT("THEORA_SHARPNESS", theora_sharpness);
+               UPDATE_DEFAULT("THEORA_KEYFRAME_FREQUENCY", theora_keyframe_frequency);
+               UPDATE_DEFAULT("THEORA_FORCE_KEYFRAME_FREQUENCY", theora_keyframe_force_frequency);
+
+
 
                UPDATE_DEFAULT("MP3_BITRATE", mp3_bitrate);
 
@@ -848,12 +900,14 @@ void Asset::save_defaults(BC_Hash *defaults,
 
 
                UPDATE_DEFAULT("PNG_USE_ALPHA", png_use_alpha);
+               UPDATE_DEFAULT("PNG_DEPTH", png_depth);
+               UPDATE_DEFAULT("PNG_COMPRESSION", png_compression);
                UPDATE_DEFAULT("EXR_USE_ALPHA", exr_use_alpha);
                UPDATE_DEFAULT("EXR_COMPRESSION", exr_compression);
                UPDATE_DEFAULT("TIFF_CMODEL", tiff_cmodel);
                UPDATE_DEFAULT("TIFF_COMPRESSION", tiff_compression);
 
-
+               UPDATE_DEFAULT("FLAC_COMPRESSION", flac_compression);
 
                UPDATE_DEFAULT("MOV_SPHERE", mov_sphere);
                UPDATE_DEFAULT("JPEG_SPHERE", jpeg_sphere);
@@ -885,6 +939,8 @@ void Asset::save_defaults(BC_Hash *defaults,
                UPDATE_DEFAULT("WIDTH", width);
                UPDATE_DEFAULT("ACTUAL_HEIGHT", actual_height);
                UPDATE_DEFAULT("ACTUAL_WIDTH", actual_width);
+               UPDATE_DEFAULT("PROXY_SCALE", proxy_scale);
+               UPDATE_DEFAULT("PROXY_EDL", proxy_edl);
                UPDATE_DEFAULT("PROGRAM", program);
                UPDATE_DEFAULT("LAYERS", layers);
                UPDATE_DEFAULT("FRAMERATE", frame_rate);
@@ -917,6 +973,8 @@ int Asset::dump(FILE *fp)
        fprintf(fp,"   ff_pixel_format=\"%s\"\n", ff_pixel_format);
        fprintf(fp,"   ff_video_bitrate=%d\n", ff_video_bitrate);
        fprintf(fp,"   ff_video_quality=%d\n", ff_video_quality);
+       fprintf(fp,"   ff_color_space=%d\n", ff_color_space);
+       fprintf(fp,"   ff_color_range=%d\n", ff_color_range);
        fprintf(fp,"   audio_data %d channels %d samplerate %d bits %d"
                " byte_order %d signed %d header %d dither %d acodec %4.4s\n",
                audio_data, channels, sample_rate, bits, byte_order, signed_,
@@ -925,10 +983,13 @@ int Asset::dump(FILE *fp)
        char string[BCTEXTLEN];
        ilacemode_to_xmltext(string, interlace_mode);
        fprintf(fp,"   video_data %d program %d layers %d framerate %f width %d"
-               " height %d vcodec %4.4s aspect_ratio %f ilace_mode %s\n",
+               " height %d vcodec %s aspect_ratio %f ilace_mode %s\n",
                video_data, layers, program, frame_rate, width, height,
                vcodec, aspect_ratio,string);
-       fprintf(fp,"   video_length %jd repeat %d\n", video_length, single_frame);
+       fprintf(fp,"   actual_width %d actual_height %d proxy_scale %d proxy_edl %d\n",
+               actual_width, actual_height, proxy_scale, proxy_edl);
+       fprintf(fp,"   video_length %jd repeat %d timecode %f\n",
+               video_length, single_frame, timecode);
        fprintf(fp,"   mov_sphere=%d jpeg_sphere=%d\n", mov_sphere, jpeg_sphere);
        return 0;
 }