[x265] [PATCH] input: change from ifstream to stdio stream
Ashok Kumar Mishra
ashok at multicorewareinc.com
Tue Jan 16 15:06:38 CET 2018
On Tue, Jan 16, 2018 at 1:15 AM, Ashok Kumar Mishra <
ashok at multicorewareinc.com> wrote:
>
>
> On Sat, Jan 13, 2018 at 7:43 AM, Ma0 <mateuszb at poczta.onet.pl> wrote:
>
>> # HG changeset patch
>> # User Ma0 <mateuszb at 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 at videolan.org
>> https://mailman.videolan.org/listinfo/x265-devel
>>
>
> Looks good to me, can be pushed to default branch after smoke test.
>
Pushed.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20180116/5d997713/attachment-0001.html>
More information about the x265-devel
mailing list