On Sat, Jan 13, 2018 at 7:43 AM, Ma0 <mateu...@poczta.onet.pl> wrote:
> # HG changeset patch > # User Ma0 <mateu...@poczta.onet.pl> > # Date 1515808050 -3600 > # Sat Jan 13 02:47:30 2018 +0100 > # Node ID 5066d1a0dfa3a7a5aef54c26b93b03595b3e3508 > # Parent 2f3c4158cf3553030920708271bc43cdc79932a3 > input: change from ifstream to stdio stream > > diff -r 2f3c4158cf35 -r 5066d1a0dfa3 source/common/common.h > --- a/source/common/common.h Thu Jan 04 12:37:01 2018 +0530 > +++ b/source/common/common.h Sat Jan 13 02:47:30 2018 +0100 > @@ -78,6 +78,7 @@ > > #if defined(__MINGW32__) > #define fseeko fseeko64 > +#define ftello ftello64 > #endif > > #elif defined(_MSC_VER) > @@ -87,6 +88,7 @@ > #define ALIGN_VAR_16(T, var) __declspec(align(16)) T var > #define ALIGN_VAR_32(T, var) __declspec(align(32)) T var > #define fseeko _fseeki64 > +#define ftello _ftelli64 > > #endif // if defined(__GNUC__) > > diff -r 2f3c4158cf35 -r 5066d1a0dfa3 source/input/y4m.cpp > --- a/source/input/y4m.cpp Thu Jan 04 12:37:01 2018 +0530 > +++ b/source/input/y4m.cpp Sat Jan 13 02:47:30 2018 +0100 > @@ -39,7 +39,7 @@ > using namespace X265_NS; > using namespace std; > > -static const char header[] = "FRAME"; > +static const char header[] = {'F','R','A','M','E'}; > > Y4MInput::Y4MInput(InputFileInfo& info) > { > @@ -60,15 +60,15 @@ > ifs = NULL; > if (!strcmp(info.filename, "-")) > { > - ifs = &cin; > + ifs = stdin; > #if _WIN32 > setmode(fileno(stdin), O_BINARY); > #endif > } > else > - ifs = new ifstream(info.filename, ios::binary | ios::in); > + ifs = x265_fopen(info.filename, "rb"); > > - if (ifs && ifs->good() && parseHeader()) > + if (ifs && !ferror(ifs) && parseHeader()) > { > int pixelbytes = depth > 8 ? 2 : 1; > for (int i = 0; i < x265_cli_csps[colorSpace].planes; i++) > @@ -91,8 +91,8 @@ > } > if (!threadActive) > { > - if (ifs && ifs != &cin) > - delete ifs; > + if (ifs && ifs != stdin) > + fclose(ifs); > ifs = NULL; > return; > } > @@ -107,59 +107,38 @@ > info.depth = depth; > info.frameCount = -1; > > - size_t estFrameSize = framesize + strlen(header) + 1; /* assume basic > FRAME\n headers */ > + size_t estFrameSize = framesize + sizeof(header) + 1; /* assume basic > FRAME\n headers */ > > /* try to estimate frame count, if this is not stdin */ > - if (ifs != &cin) > + if (ifs != stdin) > { > - istream::pos_type cur = ifs->tellg(); > + int64_t cur = ftello(ifs); > > -#if defined(_MSC_VER) && _MSC_VER < 1700 > - /* Older MSVC versions cannot handle 64bit file sizes properly, > so go native */ > - HANDLE hFile = CreateFileA(info.filename, GENERIC_READ, > - FILE_SHARE_READ | FILE_SHARE_WRITE, > NULL, OPEN_EXISTING, > - FILE_ATTRIBUTE_NORMAL, NULL); > - if (hFile != INVALID_HANDLE_VALUE) > - { > - LARGE_INTEGER size; > - if (GetFileSizeEx(hFile, &size)) > - info.frameCount = (int)((size.QuadPart - (int64_t)cur) / > estFrameSize); > - CloseHandle(hFile); > - } > -#else // if defined(_MSC_VER) && _MSC_VER < 1700 > if (cur >= 0) > { > - ifs->seekg(0, ios::end); > - istream::pos_type size = ifs->tellg(); > - ifs->seekg(cur, ios::beg); > + fseeko(ifs, 0, SEEK_END); > + int64_t size = ftello(ifs); > + fseeko(ifs, cur, SEEK_SET); > if (size > 0) > info.frameCount = (int)((size - cur) / estFrameSize); > } > -#endif // if defined(_MSC_VER) && _MSC_VER < 1700 > } > > if (info.skipFrames) > { > -#if X86_64 > - if (ifs != &cin) > - ifs->seekg((uint64_t)estFrameSize * info.skipFrames, > ios::cur); > + if (ifs != stdin) > + fseeko(ifs, (int64_t)estFrameSize * info.skipFrames, > SEEK_CUR); > else > for (int i = 0; i < info.skipFrames; i++) > - { > - ifs->read(buf[0], estFrameSize - framesize); > - ifs->read(buf[0], framesize); > - } > -#else > - for (int i = 0; i < info.skipFrames; i++) > - ifs->ignore(estFrameSize); > -#endif > + if (fread(buf[0], estFrameSize - framesize, 1, ifs) + > fread(buf[0], framesize, 1, ifs) != 2) > + break; > } > } > > Y4MInput::~Y4MInput() > { > - if (ifs && ifs != &cin) > - delete ifs; > + if (ifs && ifs != stdin) > + fclose(ifs); > > for (int i = 0; i < QUEUE_SIZE; i++) > X265_FREE(buf[i]); > @@ -181,24 +160,22 @@ > int csp = 0; > int d = 0; > > - while (ifs->good()) > + int c; > + while ((c = fgetc(ifs)) != EOF) > { > // Skip Y4MPEG string > - int c = ifs->get(); > - while (ifs->good() && (c != ' ') && (c != '\n')) > - c = ifs->get(); > + while ((c != EOF) && (c != ' ') && (c != '\n')) > + c = fgetc(ifs); > > - while (c == ' ' && ifs->good()) > + while (c == ' ') > { > // read parameter identifier > - switch (ifs->get()) > + switch (fgetc(ifs)) > { > case 'W': > width = 0; > - while (ifs->good()) > + while ((c = fgetc(ifs)) != EOF) > { > - c = ifs->get(); > - > if (c == ' ' || c == '\n') > break; > else > @@ -208,9 +185,8 @@ > > case 'H': > height = 0; > - while (ifs->good()) > + while ((c = fgetc(ifs)) != EOF) > { > - c = ifs->get(); > if (c == ' ' || c == '\n') > break; > else > @@ -221,15 +197,13 @@ > case 'F': > rateNum = 0; > rateDenom = 0; > - while (ifs->good()) > + while ((c = fgetc(ifs)) != EOF) > { > - c = ifs->get(); > if (c == '.') > { > rateDenom = 1; > - while (ifs->good()) > + while ((c = fgetc(ifs)) != EOF) > { > - c = ifs->get(); > if (c == ' ' || c == '\n') > break; > else > @@ -242,9 +216,8 @@ > } > else if (c == ':') > { > - while (ifs->good()) > + while ((c = fgetc(ifs)) != EOF) > { > - c = ifs->get(); > if (c == ' ' || c == '\n') > break; > else > @@ -260,14 +233,12 @@ > case 'A': > sarWidth = 0; > sarHeight = 0; > - while (ifs->good()) > + while ((c = fgetc(ifs)) != EOF) > { > - c = ifs->get(); > if (c == ':') > { > - while (ifs->good()) > + while ((c = fgetc(ifs)) != EOF) > { > - c = ifs->get(); > if (c == ' ' || c == '\n') > break; > else > @@ -283,19 +254,15 @@ > case 'C': > csp = 0; > d = 0; > - while (ifs->good()) > + while ((c = fgetc(ifs)) != EOF) > { > - c = ifs->get(); > - > if (c <= 'o' && c >= '0') > csp = csp * 10 + (c - '0'); > else if (c == 'p') > { > // example: C420p16 > - while (ifs->good()) > + while ((c = fgetc(ifs)) != EOF) > { > - c = ifs->get(); > - > if (c <= '9' && c >= '0') > d = d * 10 + (c - '0'); > else > @@ -330,10 +297,9 @@ > break; > > default: > - while (ifs->good()) > + while ((c = fgetc(ifs)) != EOF) > { > // consume this unsupported configuration word > - c = ifs->get(); > if (c == ' ' || c == '\n') > break; > } > @@ -378,26 +344,24 @@ > > bool Y4MInput::populateFrameQueue() > { > - if (!ifs || ifs->fail()) > + if (!ifs || ferror(ifs)) > return false; > > - /* strip off the FRAME header */ > - char hbuf[sizeof(header)]; > + /* strip off the FRAME\n header */ > + char hbuf[sizeof(header) + 1]; > > - ifs->read(hbuf, strlen(header)); > - if (ifs->eof()) > - return false; > - > - if (!ifs->good() || memcmp(hbuf, header, strlen(header))) > + if (fread(hbuf, sizeof(hbuf), 1, ifs) != 1 || memcmp(hbuf, header, > sizeof(header))) > { > - x265_log(NULL, X265_LOG_ERROR, "y4m: frame header missing\n"); > + if (!feof(ifs)) > + x265_log(NULL, X265_LOG_ERROR, "y4m: frame header missing\n"); > return false; > } > > /* consume bytes up to line feed */ > - int c = ifs->get(); > - while (c != '\n' && ifs->good()) > - c = ifs->get(); > + int c = hbuf[sizeof(header)]; > + while (c != '\n') > + if ((c = fgetc(ifs)) == EOF) > + break; > > /* wait for room in the ring buffer */ > int written = writeCount.get(); > @@ -410,8 +374,7 @@ > } > > ProfileScopeEvent(frameRead); > - ifs->read(buf[written % QUEUE_SIZE], framesize); > - if (ifs->good()) > + if (fread(buf[written % QUEUE_SIZE], framesize, 1, ifs) == 1) > { > writeCount.incr(); > return true; > diff -r 2f3c4158cf35 -r 5066d1a0dfa3 source/input/y4m.h > --- a/source/input/y4m.h Thu Jan 04 12:37:01 2018 +0530 > +++ b/source/input/y4m.h Sat Jan 13 02:47:30 2018 +0100 > @@ -63,7 +63,7 @@ > > char* buf[QUEUE_SIZE]; > > - std::istream *ifs; > + FILE *ifs; > > bool parseHeader(); > > @@ -79,9 +79,9 @@ > > void release(); > > - bool isEof() const { return ifs && ifs->eof(); } > + bool isEof() const { return ifs && feof(ifs); } > > - bool isFail() { return !(ifs && !ifs->fail() && > threadActive); } > + bool isFail() { return !(ifs && !ferror(ifs) && > threadActive); } > > void startReader(); > > diff -r 2f3c4158cf35 -r 5066d1a0dfa3 source/input/yuv.cpp > --- a/source/input/yuv.cpp Thu Jan 04 12:37:01 2018 +0530 > +++ b/source/input/yuv.cpp Sat Jan 13 02:47:30 2018 +0100 > @@ -68,20 +68,20 @@ > > if (!strcmp(info.filename, "-")) > { > - ifs = &cin; > + ifs = stdin; > #if _WIN32 > setmode(fileno(stdin), O_BINARY); > #endif > } > else > - ifs = new ifstream(info.filename, ios::binary | ios::in); > + ifs = x265_fopen(info.filename, "rb"); > > - if (ifs && ifs->good()) > + if (ifs && !ferror(ifs)) > threadActive = true; > else > { > - if (ifs && ifs != &cin) > - delete ifs; > + if (ifs && ifs != stdin) > + fclose(ifs); > ifs = NULL; > return; > } > @@ -100,53 +100,35 @@ > info.frameCount = -1; > > /* try to estimate frame count, if this is not stdin */ > - if (ifs != &cin) > + if (ifs != stdin) > { > - istream::pos_type cur = ifs->tellg(); > + int64_t cur = ftello(ifs); > > -#if defined(_MSC_VER) && _MSC_VER < 1700 > - /* Older MSVC versions cannot handle 64bit file sizes properly, > so go native */ > - HANDLE hFile = CreateFileA(info.filename, GENERIC_READ, > - FILE_SHARE_READ | FILE_SHARE_WRITE, > NULL, OPEN_EXISTING, > - FILE_ATTRIBUTE_NORMAL, NULL); > - if (hFile != INVALID_HANDLE_VALUE) > - { > - LARGE_INTEGER size; > - if (GetFileSizeEx(hFile, &size)) > - info.frameCount = (int)((size.QuadPart - (int64_t)cur) / > framesize); > - CloseHandle(hFile); > - } > -#else // if defined(_MSC_VER) && _MSC_VER < 1700 > if (cur >= 0) > { > - ifs->seekg(0, ios::end); > - istream::pos_type size = ifs->tellg(); > - ifs->seekg(cur, ios::beg); > + fseeko(ifs, 0, SEEK_END); > + int64_t size = ftello(ifs); > + fseeko(ifs, cur, SEEK_SET); > if (size > 0) > info.frameCount = (int)((size - cur) / framesize); > } > -#endif // if defined(_MSC_VER) && _MSC_VER < 1700 > } > > if (info.skipFrames) > { > -#if X86_64 > - if (ifs != &cin) > - ifs->seekg((uint64_t)framesize * info.skipFrames, ios::cur); > + if (ifs != stdin) > + fseeko(ifs, (int64_t)framesize * info.skipFrames, SEEK_CUR); > else > for (int i = 0; i < info.skipFrames; i++) > - ifs->read(buf[0], framesize); > -#else > - for (int i = 0; i < info.skipFrames; i++) > - ifs->ignore(framesize); > -#endif > + if (fread(buf[0], framesize, 1, ifs) != 1) > + break; > } > } > > YUVInput::~YUVInput() > { > - if (ifs && ifs != &cin) > - delete ifs; > + if (ifs && ifs != stdin) > + fclose(ifs); > for (int i = 0; i < QUEUE_SIZE; i++) > X265_FREE(buf[i]); > } > @@ -182,7 +164,7 @@ > > bool YUVInput::populateFrameQueue() > { > - if (!ifs || ifs->fail()) > + if (!ifs || ferror(ifs)) > return false; > > /* wait for room in the ring buffer */ > @@ -197,8 +179,7 @@ > } > > ProfileScopeEvent(frameRead); > - ifs->read(buf[written % QUEUE_SIZE], framesize); > - if (ifs->good()) > + if (fread(buf[written % QUEUE_SIZE], framesize, 1, ifs) == 1) > { > writeCount.incr(); > return true; > diff -r 2f3c4158cf35 -r 5066d1a0dfa3 source/input/yuv.h > --- a/source/input/yuv.h Thu Jan 04 12:37:01 2018 +0530 > +++ b/source/input/yuv.h Sat Jan 13 02:47:30 2018 +0100 > @@ -55,7 +55,7 @@ > > char* buf[QUEUE_SIZE]; > > - std::istream *ifs; > + FILE *ifs; > > int guessFrameCount(); > > @@ -71,9 +71,9 @@ > > void release(); > > - bool isEof() const { return ifs && > ifs->eof(); } > + bool isEof() const { return ifs && > feof(ifs); } > > - bool isFail() { return !(ifs && > !ifs->fail() && threadActive); } > + bool isFail() { return !(ifs && > !ferror(ifs) && threadActive); } > > void startReader(); > > _______________________________________________ > x265-devel mailing list > x265-devel@videolan.org > https://mailman.videolan.org/listinfo/x265-devel > Looks good to me, can be pushed to default branch after smoke test.
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel