]> git.sesse.net Git - casparcg/commitdiff
Merge branch '2.1.0' of https://github.com/CasparCG/Server into 2.1.0
authorJames Wise <james.wise@bluefish444.com>
Fri, 3 Feb 2017 05:22:19 +0000 (16:22 +1100)
committerJames Wise <james.wise@bluefish444.com>
Fri, 3 Feb 2017 05:22:19 +0000 (16:22 +1100)
26 files changed:
CHANGELOG
build-scripts/build-linux.sh
common/log.cpp
common/log.h
common/os/windows/win32_exception.cpp
core/producer/scene/expression_parser.cpp
core/video_format.cpp
core/video_format.h
dependencies64/ffmpeg/bin/linux/libavcodec.so.56.41.100
dependencies64/ffmpeg/bin/linux/libavdevice.so.56.4.100
dependencies64/ffmpeg/bin/linux/libavfilter.so.5.16.101
dependencies64/ffmpeg/bin/linux/libavformat.so.56.36.100
dependencies64/ffmpeg/bin/linux/libavutil.so.54.27.100
dependencies64/ffmpeg/bin/linux/libswresample.so.1.2.100
dependencies64/ffmpeg/bin/linux/libswscale.so.3.1.101
dependencies64/ffmpeg/ffmpeg-build-linux/build-ubuntu.sh
dependencies64/ffmpeg/ffmpeg-build-linux/build.sh
deploy/general/server/cg20.fth.2160p5000 [new file with mode: 0644]
deploy/general/server/cg20.fth.2160p5994 [new file with mode: 0644]
deploy/general/server/cg20.fth.2160p6000 [new file with mode: 0644]
modules/decklink/util/util.h
modules/ffmpeg/producer/ffmpeg_producer.cpp
modules/ffmpeg/producer/input/input.cpp
modules/reroute/producer/layer_producer.cpp
shell/casparcg.config
shell/shell.rc

index 630a12148748762f10ba7f39d376d5be3e8a3b87..8f9af28664a5e5250fab9497d0d89cbe715a6c91 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -24,6 +24,14 @@ General
   o Copy casparcg_auto_restart.bat into Windows releases.\r
   o Fixed bug with thumbnail generation when there are .-files in the media\r
     folder.\r
+  o Removed CMake platform specification in Linux build script\r
+    (Krzysztof Pyrkosz).\r
+  o Build script for building FFmpeg for Linux now part of the repository.\r
+    Contributions during development (not w.r.t 2.1.0 Beta 1):\r
+    + Fix ffmpeg build dependencies on clean ubuntu desktop amd64 14.04.3 or\r
+      higher (Walter Sonius).\r
+  o Added support for video modes 2160p5000, 2160p5994 and 2160p6000\r
+    (Antonio Ruano Cuesta).\r
 \r
 Consumers\r
 ---------\r
@@ -45,12 +53,18 @@ Producers
     + Fixed bug where decoders sometimes requires more than one video packet to\r
       decode the first frame.\r
     + Added support for IN and OUT parameters (Dimitry Ishenko).\r
+    + Added DV/HDV video device support under Linux (Walter Sonius).\r
   o Framerate producer:\r
     + Fixed bug when INFO was used on a not yet playing framerate producer.\r
   o HTML producer:\r
     + Fixed bug where only URL:s with . in them where recognized.\r
   o Image producer:\r
     + Added LENGTH parameter to allow for queueing with LOADBG AUTO.\r
+  o Layer producer:\r
+    + Fixed serious bug where a circular reference of layer producers caused a\r
+      stack overflow and server crash.\r
+  o Scene producer:\r
+    + Added abs() function to expression language.\r
 \r
 Mixer\r
 -----\r
index 338d9780a0504fb2f8c29063460a95ec2521c51a..90112538fbaf51c6d9de6cd8faf5fb90b0ce3545 100755 (executable)
@@ -25,7 +25,7 @@ cd ../build || fail "Could not enter ../build"
 
 # Run cmake
 echo Running cmake...
-cmake -G "Unix Makefiles" -A x64 -DCMAKE_BUILD_TYPE=RelWithDebInfo .. || fail "cmake failed"
+cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo .. || fail "cmake failed"
 
 # Run make using the number of hardware threads in BUILD_PARALLEL_THREADS
 echo Building...
index b6488739dffac300eb56ea85a2b9d12e445f312d..55ee3406cc4389f0d7e25e5d28d34b4d48cbda1f 100644 (file)
@@ -163,6 +163,16 @@ void init()
        boost::log::core::get()->add_sink(stream_sink);
 }
 
+std::string current_exception_diagnostic_information()
+{
+       auto e = boost::current_exception_cast<const char*>();
+
+       if (e)
+               return std::string("[char *] = ") + *e + "\n";
+       else
+               return boost::current_exception_diagnostic_information();
+}
+
 }
 
 void add_file_sink(const std::wstring& file, const boost::log::filter& filter)
index 860c1a6466f024852cf96974d8109b37c8b26304..9df9470f2f7f364d59b106ae4df8d35f03bf1b65 100644 (file)
@@ -43,6 +43,7 @@ namespace caspar { namespace log {
 namespace internal{
 void init();
 std::wstring get_call_stack();
+std::string current_exception_diagnostic_information();
 }
 
 const char* remove_source_prefix(const char* file);
@@ -102,12 +103,12 @@ BOOST_LOG_INLINE_GLOBAL_LOGGER_INIT(logger, caspar_logger)
        catch(...){}
 
 #define CASPAR_LOG_CURRENT_EXCEPTION() try{\
-               CASPAR_LOG(error) << caspar::u16(boost::current_exception_diagnostic_information()) << L"Caught at (" << caspar::get_thread_info().name << L"):\n" << caspar::get_call_stack();\
+               CASPAR_LOG(error) << caspar::u16(::caspar::log::internal::current_exception_diagnostic_information()) << L"Caught at (" << caspar::get_thread_info().name << L"):\n" << caspar::get_call_stack();\
        }\
        catch(...){}
 
 #define CASPAR_LOG_CURRENT_EXCEPTION_AT_LEVEL(lvl) try{\
-               CASPAR_LOG(lvl) << caspar::u16(boost::current_exception_diagnostic_information()) << L"Caught at (" << caspar::get_thread_info().name << L"):\n" << caspar::get_call_stack();\
+               CASPAR_LOG(lvl) << caspar::u16(::caspar::log::internal::current_exception_diagnostic_information()) << L"Caught at (" << caspar::get_thread_info().name << L"):\n" << caspar::get_call_stack();\
        }\
        catch(...){}
 
index 75006bc25ad5e044edea19df8edd082aa0fcb393..0a65c5cebb66b9d83b022f2de6ee4bfb836be3a8 100644 (file)
@@ -31,7 +31,7 @@ inline void SetThreadName(DWORD dwThreadID, LPCSTR szThreadName)
        {
                RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info );
        }
-       __except (EXCEPTION_CONTINUE_EXECUTION){}       
+       __except (EXCEPTION_CONTINUE_EXECUTION){}
 }
 
 } // namespace detail
@@ -41,7 +41,7 @@ bool& installed_for_thread()
        static boost::thread_specific_ptr<bool> installed;
 
        auto for_thread = installed.get();
-       
+
        if (!for_thread)
        {
                for_thread = new bool(false);
@@ -99,6 +99,8 @@ void win32_exception::Handler(unsigned int errorCode, EXCEPTION_POINTERS* pInfo)
        {
        case EXCEPTION_ACCESS_VIOLATION:
                CASPAR_THROW_EXCEPTION(win32_access_violation() << generate_message(*(pInfo->ExceptionRecord)));
+       case EXCEPTION_STACK_OVERFLOW:
+               throw "Stack overflow. Not generating stack trace to protect from further overflowing the stack";
        default:
                CASPAR_THROW_EXCEPTION(win32_exception() << generate_message(*(pInfo->ExceptionRecord)));
        }
index 8d55ef76712334e3f72ea206e78c1fdc8d6d44fd..b9bd66e8cc05b5133d6650733529473ad2711930 100644 (file)
@@ -147,6 +147,17 @@ boost::any create_cos_function(const std::vector<boost::any>& params, const vari
        return angle.transformed([](double a) { return std::cos(a); });
 }
 
+boost::any create_abs_function(const std::vector<boost::any>& params, const variable_repository& var_repo)
+{
+       if (params.size() != 1)
+               CASPAR_THROW_EXCEPTION(user_error()
+                       << msg_info(L"abs() function requires one parameters: value"));
+
+       auto val = require<double>(params.at(0));
+
+       return val.transformed([](double v) { return std::abs(v); });
+}
+
 boost::any parse_function(
                const std::wstring& function_name,
                std::wstring::const_iterator& cursor,
@@ -157,7 +168,8 @@ boost::any parse_function(
        {
                {L"animate",    create_animate_function },
                {L"sin",                create_sin_function },
-               {L"cos",                create_cos_function }
+               {L"cos",                create_cos_function },
+               {L"abs",                create_abs_function }
        };
 
        auto function = FUNCTIONS.find(function_name);
@@ -642,7 +654,7 @@ boost::any ternary(
        auto cond = require<bool>(condition);
        auto t = as_binding(true_value);
        auto f = as_binding(false_value);
-       
+
        // double
        if (is<binding<double>>(t) && is<binding<double>>(f))
                return ternary(cond, as<binding<double>>(t), as<binding<double>>(f));
index 30db1e3fc259b1896e458c68c5ceb0a9f9c566e1..bea44730618902287a47c45dce77c0992b68d618 100644 (file)
@@ -26,7 +26,7 @@
 #include <boost/algorithm/string.hpp>
 
 namespace caspar { namespace core {
-       
+
        const std::vector<video_format_desc> format_descs = {
                { video_format::pal,          720,  576,  1024, 576,  field_mode::upper,       25000, 1000, L"PAL",          { 1920                         } },
                { video_format::ntsc,         720,  486,  720,  540,  field_mode::lower,       30000, 1001, L"NTSC",         { 1602, 1601, 1602, 1601, 1602 } },
@@ -61,6 +61,9 @@ namespace caspar { namespace core {
                { video_format::x2160p2500,   3840, 2160, 3840, 2160, field_mode::progressive, 25000, 1000, L"2160p2500",    { 1920                         } },
                { video_format::x2160p2997,   3840, 2160, 3840, 2160, field_mode::progressive, 30000, 1001, L"2160p2997",    { 1602, 1601, 1602, 1601, 1602 } },
                { video_format::x2160p3000,   3840, 2160, 3840, 2160, field_mode::progressive, 30000, 1000, L"2160p3000",    { 1600                         } },
+               { video_format::x2160p5000,   3840, 2160, 3840, 2160, field_mode::progressive, 50000, 1000, L"2160p5000",    { 960                          } },
+               { video_format::x2160p5994,   3840, 2160, 3840, 2160, field_mode::progressive, 60000, 1001, L"2160p5994",    { 801,  800,  801,  801,  801  } },
+               { video_format::x2160p6000,   3840, 2160, 3840, 2160, field_mode::progressive, 60000, 1000, L"2160p6000",    { 800                          } },
                { video_format::dci2160p2398, 4096, 2160, 4096, 2160, field_mode::progressive, 24000, 1001, L"dci2160p2398", { 2002                         } },
                { video_format::dci2160p2400, 4096, 2160, 4096, 2160, field_mode::progressive, 24000, 1000, L"dci2160p2400", { 2000                         } },
                { video_format::dci2160p2500, 4096, 2160, 4096, 2160, field_mode::progressive, 25000, 1000, L"dci2160p2500", { 1920                         } },
@@ -106,7 +109,7 @@ video_format_desc::video_format_desc(video_format format)
 video_format_desc::video_format_desc(const std::wstring& name)
        : format(video_format::invalid)
        , field_mode(core::field_mode::empty)
-{      
+{
        *this = video_format_desc(video_format::invalid);
        for(auto it = std::begin(format_descs); it != std::end(format_descs)-1; ++it)
        {
@@ -119,7 +122,7 @@ video_format_desc::video_format_desc(const std::wstring& name)
 }
 
 bool operator==(const video_format_desc& lhs, const video_format_desc& rhs)
-{                                                                                      
+{
        return lhs.format == rhs.format;
 }
 
@@ -136,4 +139,3 @@ std::wostream& operator<<(std::wostream& out, const video_format_desc& format_de
 
 
 }}
-
index 0016f2d24b47449a20db02b235e498d9066775ee..42777242697bb07d528fceedabcf183acc939da1 100644 (file)
@@ -66,6 +66,9 @@ enum class video_format
        x2160p2500,
        x2160p2997,
        x2160p3000,
+       x2160p5000,
+       x2160p5994,
+       x2160p6000,
        dci2160p2398,
        dci2160p2400,
        dci2160p2500,
index 7deae83ecd97c33f09bcead32e6beae7593f5abb..ae445c3ceb2aefca19980d3cc1b2eef097dec0d6 100755 (executable)
Binary files a/dependencies64/ffmpeg/bin/linux/libavcodec.so.56.41.100 and b/dependencies64/ffmpeg/bin/linux/libavcodec.so.56.41.100 differ
index e6d2edabd725bc51b75a64a45bdd9013a9ea23fb..f08e35e4f65f9958fa1656631f8b629d9675dbd5 100755 (executable)
Binary files a/dependencies64/ffmpeg/bin/linux/libavdevice.so.56.4.100 and b/dependencies64/ffmpeg/bin/linux/libavdevice.so.56.4.100 differ
index 2ff28ca7cefb53627d348c3abc4aa3ab77c8c949..30798a2aad62b7addb645bf19d0c9b9c2e4d116f 100755 (executable)
Binary files a/dependencies64/ffmpeg/bin/linux/libavfilter.so.5.16.101 and b/dependencies64/ffmpeg/bin/linux/libavfilter.so.5.16.101 differ
index 058ff926a7c76b62cd5175006d9a21de58eb0f12..f69ac571eec231932ba4070e80bd06119e0dad74 100755 (executable)
Binary files a/dependencies64/ffmpeg/bin/linux/libavformat.so.56.36.100 and b/dependencies64/ffmpeg/bin/linux/libavformat.so.56.36.100 differ
index fad830991b9c24d76b66fc85440d6950eac320d1..ef247e41f5481c3469f65471d1b158b3212e753c 100755 (executable)
Binary files a/dependencies64/ffmpeg/bin/linux/libavutil.so.54.27.100 and b/dependencies64/ffmpeg/bin/linux/libavutil.so.54.27.100 differ
index 14e55c7bac2ba7d50e90e4c6823e3c89ac969386..f395cf5b4681e4c4e5cf01f2fd3fdbbd12534cf4 100755 (executable)
Binary files a/dependencies64/ffmpeg/bin/linux/libswresample.so.1.2.100 and b/dependencies64/ffmpeg/bin/linux/libswresample.so.1.2.100 differ
index 8fc4a85b37726a19678f9682354ac892f97808bb..d167562666813427b04b34c8014b45dd705fc742 100755 (executable)
Binary files a/dependencies64/ffmpeg/bin/linux/libswscale.so.3.1.101 and b/dependencies64/ffmpeg/bin/linux/libswscale.so.3.1.101 differ
index 83e9ed553080d7864c013f069ac7cf535ae95020..b9913e29db988f0d32bc2fb1885f16a01ef4917b 100755 (executable)
@@ -1,5 +1,7 @@
 #!/bin/bash
+#compile ffmpeg successful on ubuntu 14.04.3 & 16.04.1 amd64 using the CasparCG build requirments described here:
+#https://raw.githubusercontent.com/casparcg/Server/2.1.0/BUILDING
 
-sudo apt-get install build-essential curl tar pkg-config
+sudo apt-get -y install curl tar pkg-config python2.7-dev zlib1g-dev autoconf libtool subversion libfontconfig1-dev ant default-jre default-jdk frei0r-plugins-dev libv4l-dev libiec61883-dev libavc1394-dev
 
 ./build.sh
index cf40d2751b81b50a8e6059d3dd3731fe25b4b85f..7fe59821696f5809dbaddc735549686fc648910f 100755 (executable)
@@ -40,7 +40,7 @@ mkdir -p "$BUILD_DIR" "$TARGET_DIR"
 echo "#### FFmpeg static build, by STVS SA ####"
 cd $BUILD_DIR
 ../fetchurl "http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz"
-../fetchurl "http://zlib.net/zlib-1.2.8.tar.gz"
+../fetchurl "http://www.zlib.net/fossils/zlib-1.2.8.tar.gz"
 ../fetchurl "http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz"
 #../fetchurl "http://downloads.sf.net/project/libpng/libpng15/older-releases/1.5.14/libpng-1.5.14.tar.gz"
 ../fetchurl "http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz"
@@ -419,6 +419,7 @@ CFLAGS="-I$TARGET_DIR/include -I$TARGET_DIR/usr/local/include" LDFLAGS="-L$TARGE
        --enable-libfreetype \
        --enable-libgme \
        --enable-libgsm \
+       --enable-libiec61883 \
        --enable-libilbc \
        --enable-libmodplug \
        --enable-libmp3lame \
@@ -448,3 +449,4 @@ CFLAGS="-I$TARGET_DIR/include -I$TARGET_DIR/usr/local/include" LDFLAGS="-L$TARGE
        --enable-libv4l2 \
        --enable-zlib
 make -j $jval && make install
+
diff --git a/deploy/general/server/cg20.fth.2160p5000 b/deploy/general/server/cg20.fth.2160p5000
new file mode 100644 (file)
index 0000000..ce185e1
Binary files /dev/null and b/deploy/general/server/cg20.fth.2160p5000 differ
diff --git a/deploy/general/server/cg20.fth.2160p5994 b/deploy/general/server/cg20.fth.2160p5994
new file mode 100644 (file)
index 0000000..01b9960
Binary files /dev/null and b/deploy/general/server/cg20.fth.2160p5994 differ
diff --git a/deploy/general/server/cg20.fth.2160p6000 b/deploy/general/server/cg20.fth.2160p6000
new file mode 100644 (file)
index 0000000..b5c9b5c
Binary files /dev/null and b/deploy/general/server/cg20.fth.2160p6000 differ
index e91a42e2babe374a80b68442305ca315c7940ae9..b6aab14618bf2b899eb68011266d581866aa58f4 100644 (file)
@@ -70,6 +70,9 @@ static BMDDisplayMode get_decklink_video_format(core::video_format fmt)
        case core::video_format::x2160p2500:    return bmdMode4K2160p25;
        case core::video_format::x2160p2997:    return bmdMode4K2160p2997;
        case core::video_format::x2160p3000:    return bmdMode4K2160p30;
+       case core::video_format::x2160p5000:    return bmdMode4K2160p50;
+       case core::video_format::x2160p5994:    return bmdMode4K2160p5994;
+       case core::video_format::x2160p6000:    return bmdMode4K2160p60;
        case core::video_format::dci2160p2398:  return bmdMode4kDCI2398;
        case core::video_format::dci2160p2400:  return bmdMode4kDCI24;
        case core::video_format::dci2160p2500:  return bmdMode4kDCI25;
@@ -108,6 +111,9 @@ static core::video_format get_caspar_video_format(BMDDisplayMode fmt)
        case bmdMode4K2160p25:                                  return core::video_format::x2160p2500;
        case bmdMode4K2160p2997:                                return core::video_format::x2160p2997;
        case bmdMode4K2160p30:                                  return core::video_format::x2160p3000;
+       case bmdMode4K2160p50:                                  return core::video_format::x2160p5000;
+       case bmdMode4K2160p5994:                                return core::video_format::x2160p5994;
+       case bmdMode4K2160p60:                                  return core::video_format::x2160p6000;
        case bmdMode4kDCI2398:                                  return core::video_format::dci2160p2398;
        case bmdMode4kDCI24:                                    return core::video_format::dci2160p2400;
        case bmdMode4kDCI25:                                    return core::video_format::dci2160p2500;
index 216559156fda5435fbc2ae174aad78257d55ff23..c0cbad5daf73aae79dcfafbf9a6f77807b71e3c1 100644 (file)
@@ -633,7 +633,7 @@ void describe_producer(core::help_sink& sink, const core::help_repository& repo)
                ->text(L"H.264, FLV, WMV and several audio codecs as well as uncompressed audio.");
        sink.definitions()
                ->item(L"clip", L"The file without the file extension to play. It should reside under the media folder.")
-               ->item(L"url", L"If clip contains :// it is instead treated as the URL parameter. The URL can either be any streaming protocol supported by FFmpeg, dshow://video={webcam_name} or v4l2://{video device}.")
+               ->item(L"url", L"If clip contains :// it is instead treated as the URL parameter. The URL can either be any streaming protocol supported by FFmpeg, dshow://video={webcam_name} or v4l2://{video device} or iec61883://{auto}.")
                ->item(L"loop", L"Will cause the media file to loop between in and out.")
                ->item(L"in", L"Optionally sets the first frame. 0 by default. If loop is specified, this will be the frame where it starts over again.")
                ->item(L"out", L"Optionally sets the last frame. If not specified the clip will be played to the end. If loop is specified, the file will jump to start position once it reaches the last frame.")
@@ -654,6 +654,7 @@ void describe_producer(core::help_sink& sink, const core::help_repository& repo)
        sink.example(L">> PLAY 1-10 rtmp://example.com/live/stream", L"to play an RTMP stream.");
        sink.example(L">> PLAY 1-10 \"dshow://video=Live! Cam Chat HD VF0790\"", L"to use a web camera as video input on Windows.");
        sink.example(L">> PLAY 1-10 v4l2:///dev/video0", L"to use a web camera as video input on Linux.");
+       sink.example(L">> PLAY 1-10 iec61883://auto", L"to use a FireWire (H)DV video device as video input on Linux.");
        sink.para()->text(L"The FFmpeg producer also supports changing some of the settings via ")->code(L"CALL")->text(L":");
        sink.example(L">> CALL 1-10 LOOP 1");
        sink.example(L">> CALL 1-10 IN 10");
index db902fd19903ede7b75ff7bf3b34e0091339b311..f00e44f9a3c94b9812b468df603584660322377f 100644 (file)
@@ -259,7 +259,7 @@ struct input::impl : boost::noncopyable
                auto path                                       = parts.at(1);
                AVInputFormat* input_format     = nullptr;
 
-               static const std::set<std::wstring> PROTOCOLS_TREATED_AS_FORMATS = { L"dshow", L"v4l2" };
+               static const std::set<std::wstring> PROTOCOLS_TREATED_AS_FORMATS = { L"dshow", L"v4l2", L"iec61883" };
 
                if (protocol.empty())
                        resource_name = path;
index 53a9b40c32a0b237da6853b9e2a4543aacae3581..9b5bad96c10234327b517674966cc7bd26214a69 100644 (file)
@@ -41,7 +41,7 @@
 namespace caspar { namespace reroute {
 
 class layer_consumer : public core::write_frame_consumer
-{      
+{
        tbb::concurrent_bounded_queue<core::draw_frame> frame_buffer_;
        semaphore                                                                               frames_available_ { 0 };
        int                                                                                             frames_delay_;
@@ -108,7 +108,7 @@ public:
                : layer_(layer)
                , consumer_(spl::make_shared<layer_consumer>(frames_delay))
                , channel_(channel)
-               , last_frame_(core::draw_frame::empty())
+               , last_frame_(core::draw_frame::late())
                , frame_number_(0)
        {
                pixel_constraints_.width.set(channel->video_format_desc().width);
@@ -125,7 +125,7 @@ public:
        }
 
        // frame_producer
-                       
+
        core::draw_frame receive_impl() override
        {
                auto consumer_frame = consumer_->receive();
@@ -134,7 +134,12 @@ public:
 
                frame_number_++;
                return last_frame_ = consumer_frame;
-       }       
+       }
+
+       core::draw_frame last_frame() override
+       {
+               return last_frame_;
+       }
 
        std::wstring print() const override
        {
index fadcb8fef5719664b548feab4bb9d3b2b31091d9..a42f6bd11417573d4ed6dae034789f735a39d747 100644 (file)
@@ -71,7 +71,7 @@
 </thumbnails>\r
 <channels>\r
     <channel>\r
-        <video-mode>PAL [PAL|NTSC|576p2500|720p2398|720p2400|720p2500|720p5000|720p2997|720p5994|720p3000|720p6000|1080p2398|1080p2400|1080i5000|1080i5994|1080i6000|1080p2500|1080p2997|1080p3000|1080p5000|1080p5994|1080p6000|1556p2398|1556p2400|1556p2500|dci1080p2398|dci1080p2400|dci1080p2500|2160p2398|2160p2400|2160p2500|2160p2997|2160p3000|dci2160p2398|dci2160p2400|dci2160p2500] </video-mode>\r
+        <video-mode>PAL [PAL|NTSC|576p2500|720p2398|720p2400|720p2500|720p5000|720p2997|720p5994|720p3000|720p6000|1080p2398|1080p2400|1080i5000|1080i5994|1080i6000|1080p2500|1080p2997|1080p3000|1080p5000|1080p5994|1080p6000|1556p2398|1556p2400|1556p2500|dci1080p2398|dci1080p2400|dci1080p2500|2160p2398|2160p2400|2160p2500|2160p2997|2160p3000|2160p5000|2160p5994|2160p6000|dci2160p2398|dci2160p2400|dci2160p2500] </video-mode>\r
         <straight-alpha-output>false [true|false]</straight-alpha-output>\r
         <channel-layout>stereo [mono|stereo|matrix|film|smpte|ebu_r123_8a|ebu_r123_8b|8ch|16ch]</channel-layout>\r
         <consumers>\r
index 9c14de5b26cc7925d721ee10fd782af3ab3badab..fdedb903bd6897cc8295c23c13a95a249188ea9e 100644 (file)
Binary files a/shell/shell.rc and b/shell/shell.rc differ