Great, and many thanks for that, but we're still waiting for Y4M support in the stdin.
** ** ** ORIGINAL MESSAGE BELOW: --- [email protected] wrote: From: Gopu Govindaswamy <[email protected]> To: [email protected] Subject: [x265] [PATCH] input: read yuv input from stdin if filename is passed as "-" Date: Fri, 25 Oct 2013 12:46:46 +0530 # HG changeset patch # User Gopu Govindaswamy <[email protected]> # Date 1382685398 -19800 # Node ID f93a9c2e6df892c358a6df2dc99ee3a8cb897837 # Parent 4125c74ff21d9b26ff697b30675460808953052b input: read yuv input from stdin if filename is passed as "-" diff -r 4125c74ff21d -r f93a9c2e6df8 source/input/yuv.cpp --- a/source/input/yuv.cpp Fri Oct 25 01:15:58 2013 -0500 +++ b/source/input/yuv.cpp Fri Oct 25 12:46:38 2013 +0530 @@ -26,20 +26,26 @@ #include "common.h" #include <stdio.h> #include <string.h> +#include <iostream> using namespace x265; using namespace std; YUVInput::YUVInput(const char *filename) { - ifs.open(filename, ios::binary | ios::in); + ifs = NULL; + if (!strcmp(filename, "-")) + ifs = &cin; + else + ifs = new ifstream(filename, ios::binary | ios::in); + width = height = 0; depth = 8; threadActive = false; - if (!ifs.fail()) + if (ifs && !ifs->fail()) threadActive = true; else - ifs.close(); + if (ifs && ifs != &cin) delete ifs; #if defined ENABLE_THREAD head = 0; tail = 0; @@ -48,7 +54,7 @@ YUVInput::~YUVInput() { - ifs.close(); + if (ifs && ifs != &cin) delete ifs; #if defined ENABLE_THREAD for (int i = 0; i < QUEUE_SIZE; i++) { @@ -61,22 +67,25 @@ int YUVInput::guessFrameCount() { - ifstream::pos_type cur = ifs.tellg(); + if (!ifs) return -1; + + ifstream::pos_type cur = ifs->tellg(); if (cur < 0) return -1; - ifs.seekg(0, ios::end); - ifstream::pos_type size = ifs.tellg(); + ifs->seekg(0, ios::end); + ifstream::pos_type size = ifs->tellg(); if (size < 0) return -1; - ifs.seekg(cur, ios::beg); + ifs->seekg(cur, ios::beg); return (int)((size - cur) / (width * height * pixelbytes * 3 / 2)); } void YUVInput::skipFrames(int numFrames) { - ifs.seekg(framesize * numFrames, ios::cur); + if (ifs) + ifs->seekg(framesize * numFrames, ios::cur); } void YUVInput::startReader() @@ -97,7 +106,7 @@ height < MIN_FRAME_HEIGHT || height > MAX_FRAME_HEIGHT) { threadActive = false; - ifs.close(); + if (ifs && ifs != &cin) delete ifs; } else { @@ -137,8 +146,9 @@ break; } - ifs.read(buf[tail], framesize); - frameStat[tail] = ifs.good(); + if (!ifs) return false; + ifs->read(buf[tail], framesize); + frameStat[tail] = ifs->good(); if (!frameStat[tail]) return false; tail = (tail + 1) % QUEUE_SIZE; @@ -197,10 +207,11 @@ pic.stride[1] = pic.stride[2] = pic.stride[0] >> 1; - ifs.read(buf, framesize); + if (!ifs) return false; + ifs->read(buf, framesize); PPAStopCpuEventFunc(read_yuv); - return ifs.good(); + return ifs->good(); } #endif // if defined ENABLE_THREAD diff -r 4125c74ff21d -r f93a9c2e6df8 source/input/yuv.h --- a/source/input/yuv.h Fri Oct 25 01:15:58 2013 -0500 +++ b/source/input/yuv.h Fri Oct 25 12:46:38 2013 +0530 @@ -71,7 +71,7 @@ char* buf; #endif // if defined(ENABLE_THREAD) - std::ifstream ifs; + std::istream *ifs; public: @@ -89,9 +89,9 @@ int getHeight() const { return height; } - bool isEof() const { return ifs.eof(); } + bool isEof() const { return (ifs && ifs->eof()); } - bool isFail() { return !(ifs.is_open() && threadActive); } + bool isFail() { return !(ifs && !ifs->fail() && threadActive); } void startReader(); _______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel _____________________________________________________________ ps. Do you like my email address? Get yourself a coldmail.nu address too http://www.coldmail.nu (it's free!) _______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel
