Есть ли другой способ экспортировать кадр в ffmpeg в texture2d? Мой код работает в Windows, но не в Linux

Перед ответом добавьте некоторый фон, объяснив, что это HEAD.

First of all what is HEAD?

HEAD - просто ссылка на текущая фиксация (последняя) в текущей ветке. В любой момент времени может быть только один HEAD. (исключая git worktree)

Содержимое HEAD сохраняется внутри .git/HEAD и содержит 40 байтов SHA-1 текущего фиксации.


detached HEAD

Если вы не используете последнюю фиксацию - это означает, что HEAD указывает на предыдущую фиксацию в истории, ее назвали detached HEAD .

В командной строке это будет выглядеть так: SHA-1 вместо имени ветки, так как HEAD не указывает на кончик текущей ветви


Несколько вариантов восстановления после отсоединенного HEAD:


git checkout

git checkout 
git checkout -b  
git checkout HEAD~X // x is the number of commits t go back

Это проверит новую ветвь, указывающую на требуемую фиксацию. Эта команда будет проверять заданную фиксацию. На этом этапе вы можете создать ветвь и начать работать с этой точки.

# Checkout a given commit. 
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout 

# create a new branch forked to the given commit
git checkout -b 

git reflog

Вы всегда можете используйте reflog. git reflog отобразит любое изменение, которое обновило HEAD и проверив нужную запись reflog, установит HEAD обратно на эту фиксацию.

Каждый раз, когда HEAD изменяется, в reflog

git reflog
git checkout HEAD@{...}

появится новая запись. Это вернет вас к вашему желаемому фиксации


git reset --hard

«Переместить» HEAD обратно в нужное commit.

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
  • Примечание: ( С Git 2.7 ) вы также можете использовать git rebase --no-autostash.


git revert

«Отменить» заданный диапазон фиксации или фиксации. Команда reset «отменяет» любые изменения, сделанные в данной фиксации. Новая фиксация с патчем undo будет совершена, в то время как исходная фиксация останется в истории.

# add new commit with the undo of the original one.
# the  can be any commit(s) or commit range
git revert 

Эта схема иллюстрирует, какая команда выполняет что. Как вы можете видеть там reset && checkout, измените HEAD.

1
задан Robert Russell 31 March 2019 в 01:46
поделиться

1 ответ

В итоге я удалил растровую часть кода. И это сработало! Поэтому ранее я преобразовывал кадр в растровое изображение, и он копировал пиксели из растрового изображения в Texture2D. Я посмотрел поближе и понял, что могу пропустить этот шаг растрового изображения. Прошу прощения за то, что недостаточно ясно дал понять по моему вопросу.

        /// <summary>
        /// Converts Frame to Texture
        /// </summary>
        /// <returns>Texture2D</returns>
        public Texture2D FrameToTexture2D()
        {
            Texture2D frameTex = new Texture2D(Memory.spriteBatch.GraphicsDevice, Decoder.CodecContext->width, Decoder.CodecContext->height, false, SurfaceFormat.Color);
            const int bpp = 4;
            byte[] texBuffer = new byte[Decoder.CodecContext->width * Decoder.CodecContext->height * bpp]; 
            fixed (byte* ptr = &texBuffer[0])
            {
                byte*[] srcData = { ptr, null, null, null };
                int[] srcLinesize = { Decoder.CodecContext->width * bpp, 0, 0, 0 };
                // convert video frame to the RGB data
                ffmpeg.sws_scale(ScalerContext, Decoder.Frame->data, Decoder.Frame->linesize, 0, Decoder.CodecContext->height, srcData, srcLinesize);
            }
            frameTex.SetData(texBuffer);
            return frameTex;
        }
0
ответ дан Robert Russell 31 March 2019 в 01:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: