Форум программистов, компьютерный форум CyberForum.ru

Как использовать MediaCodec.createInputSurface()? - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Почему приложение может пропасть из "Похожие" топового приложения? http://www.cyberforum.ru/android-dev/thread1332683.html
Ранее оно было на 2-ом месте, а теперь пропало вообще(то есть даже не отошло на 10-ое а именно нету)? Может ли такое быть, если куча отчетов об ошибках присылают, а я не исправляю баги?
Android В какой ОС разрабатывать приложения? Решил начать программировать под android, но у меня староватый компьютер: 2gb 2x2.0 Поэтому возник вопрос - программировать из под ubuntu или из по windows? Из под чего будет быстрее работать android studio и genymotion? P.S. не знаю, правильно ли разместил тему. http://www.cyberforum.ru/android-dev/thread1332555.html
После поворота экрана view формы пропадают Android
на главной активити в xml создано RadioGroup. на главной активити в методе onCreate есть такая строчка rGroup = (RadioGroup) findViewById(R.id.radioGroup); так вот после того как экран повернуть на 90градусов, а потом назад на 0 то rGroup и всего его елементы пропадают. rGroup статический. Почему пропадают и как сделать что бы не пропадали? буду рад если дадите ссылку на почитать, про то...
Что за класс "R"? Android
Начал изучать программирование под Android, с java знаком, к сожалению, очень поверхностно(буду учить по ходу дела). В созданном проекте внимание привлекла строка: R.id.action_settings Что такой за объект "R"? И что у него за методы?
Android Конфликт между Navigation Drawer и Side Menu http://www.cyberforum.ru/android-dev/thread1332215.html
Доброе время суток, форумчане! Нужна ваша помощь! SOS!:help: Дела в том, что я создал классический навигационное меню (Navigation Drawer), которое можно встретить практически во всех приложениях Google. Также добавил справа так называемый sliding side menu. Данное меню вы скорее всего встречали в приложении Facebook`a. (Использовал кстати данную библиотеку кому интересно...
Android MediaTek Labs Всем привет. Заранее прошу прощения, если тему создал не в том разделе. Хочу поинтересоваться, кто-нибудь слышал про MediaTek Labs? Наткнулся недавно на нее в статье на одной сайте. Суть в том, что компания МТК предоставляет SDK и HDK пользователям, которые хотят замутить что-нибудь свое и техподдержку всем участникам программы. У меня есть желание что-нибудь сделать и свободное время, но... подробнее

Показать сообщение отдельно
rugga
0 / 0 / 0
Регистрация: 10.02.2014
Сообщений: 71

Как использовать MediaCodec.createInputSurface()? - Android

17.12.2014, 02:40. Просмотров 325. Ответов 0
Метки (Все метки)

Цель: нужно нарисовать на surface (без отображения на экране) элементы с помощью convas. То, что находится на surface, нужно кодировать в avc формат. Полученные байты записать в файл, или просто получить байты (обрабатываем как хотим).
Нигде не нашел инфу, как использовать surface, для него же не создашь surfaceholder, как например для surfaceview.

Как пробовал:
В новом потоке создаю MediaCodec.
Часть настроек для MediaCodec:
Java
1
2
int colorFormat = MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface;
MediaFormat format = MediaFormat.createVideoFormat("video/avc", 1280, 720);
Далее указываю эти настройки кодеру и запускаю его.
Java
1
2
3
mEncoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mSurface = mEncoder.createInputSurface();
mEncoder.start();
Тут самое интересное, метод createInputSurface() создает нам surface, в которую нужно что-то рисовать. Но нужно рисовать в новом потоке, в этом и сложность. Нужно рисовать в новом потоке, а объект (в которую рисуешь) находится в другом потоке.
Пробовал по разному, всегда вылетает исключение. Вот например после mSurface = mEncoder.createInputSurface(); вызывл новый поток
Java
1
new Thread(new DrawThread(mSurface)).start();
Код нового потока (в котором рисуешь)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class DrawThread implements Runnable {
        volatile boolean mRunning1 = true;
        Surface mSurface;
        public DrawThread(Surface mSurface) {
            this.mSurface = mSurface;
        }
 
        public void run() {
            Canvas canvas;
            while (mRunning1) {
                canvas = null;
                try {
                    canvas = mSurface.lockCanvas(null);
                    if (canvas == null)
                        continue;
                    canvas.drawColor(Color.GREEN);
              } finally {
                  if (canvas != null) {
                      mSurface.unlockCanvasAndPost(canvas);
                }
              }
            }
        }
Объясните пожалуйста, что я ни так делаю? Как использовать этот MediaCodec.createInputSurface()?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru