On Tue, Jan 16, 2018 at 1:15 AM, Ashok Kumar Mishra < as...@multicorewareinc.com> wrote:
> > > 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. > Pushed.
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel