aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-09-14 17:46:49 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-09-14 17:46:49 +0200
commitd2a847c203b5876e2bb5f0bc216b0af625f077a2 (patch)
treed1e3d92d01a65b0629c4d0f58f3f00e43de3eb3f
parent9fa47cb77371fe93ba7081d33e49e53765c17aa7 (diff)
parente7f9aa6ff5c850df173784d88ef8c79b22513d96 (diff)
downloadffmpeg-d2a847c203b5876e2bb5f0bc216b0af625f077a2.tar.gz
Merge remote-tracking branch 'hexene/scratchpad'
* hexene/scratchpad: libstagefright: Explicitly free smart pointer objects Changelog: Explain why C++ support is added, and that its optional tools/build_libstagefright: rename build/libav to something neutral Conflicts: Changelog Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--Changelog2
-rw-r--r--libavcodec/libstagefright.cpp24
-rw-r--r--tools/build_libstagefright6
3 files changed, 18 insertions, 14 deletions
diff --git a/Changelog b/Changelog
index be000a5e65..3516b1a618 100644
--- a/Changelog
+++ b/Changelog
@@ -51,7 +51,7 @@ easier to use. The changes are:
- Speex encoder via libspeex
- JSON output in ffprobe
- WTV muxer
-- C++ Support
+- Optional C++ Support (needed for libstagefright)
- H.264 Decoding on Android via Stagefright
diff --git a/libavcodec/libstagefright.cpp b/libavcodec/libstagefright.cpp
index e31a2ec7b3..2022bab37e 100644
--- a/libavcodec/libstagefright.cpp
+++ b/libavcodec/libstagefright.cpp
@@ -58,7 +58,7 @@ struct StagefrightContext {
AVBitStreamFilterContext *bsfc;
uint8_t* orig_extradata;
int orig_extradata_size;
- sp<MediaSource> source;
+ sp<MediaSource> *source;
List<Frame*> *in_queue, *out_queue;
pthread_mutex_t in_mutex, out_mutex;
pthread_cond_t condition;
@@ -74,7 +74,7 @@ struct StagefrightContext {
int dummy_bufsize;
OMXClient *client;
- sp<MediaSource> decoder;
+ sp<MediaSource> *decoder;
const char *decoder_component;
};
@@ -156,9 +156,9 @@ void* decode_thread(void *arg)
decode_done = 1;
s->end_frame = NULL;
} else {
- frame->status = s->decoder->read(&buffer);
+ frame->status = (*s->decoder)->read(&buffer);
if (frame->status == OK) {
- sp<MetaData> outFormat = s->decoder->getFormat();
+ sp<MetaData> outFormat = (*s->decoder)->getFormat();
outFormat->findInt32(kKeyWidth , &frame->w);
outFormat->findInt32(kKeyHeight, &frame->h);
frame->size = buffer->range_length();
@@ -220,7 +220,8 @@ static av_cold int Stagefright_init(AVCodecContext *avctx)
android::ProcessState::self()->startThreadPool();
- s->source = new CustomSource(avctx, meta);
+ s->source = new sp<MediaSource>();
+ *s->source = new CustomSource(avctx, meta);
s->in_queue = new List<Frame*>;
s->out_queue = new List<Frame*>;
s->client = new OMXClient;
@@ -237,17 +238,18 @@ static av_cold int Stagefright_init(AVCodecContext *avctx)
goto fail;
}
- s->decoder = OMXCodec::Create(s->client->interface(), meta,
- false, s->source, NULL,
+ s->decoder = new sp<MediaSource>();
+ *s->decoder = OMXCodec::Create(s->client->interface(), meta,
+ false, *s->source, NULL,
OMXCodec::kClientNeedsFramebuffer);
- if (s->decoder->start() != OK) {
+ if ((*s->decoder)->start() != OK) {
av_log(avctx, AV_LOG_ERROR, "Cannot start decoder\n");
ret = -1;
s->client->disconnect();
goto fail;
}
- outFormat = s->decoder->getFormat();
+ outFormat = (*s->decoder)->getFormat();
outFormat->findInt32(kKeyColorFormat, &colorFormat);
if (colorFormat == OMX_QCOM_COLOR_FormatYVU420SemiPlanar ||
colorFormat == OMX_COLOR_FormatYUV420SemiPlanar)
@@ -472,7 +474,7 @@ static av_cold int Stagefright_close(AVCodecContext *avctx)
av_freep(&frame);
}
- s->decoder->stop();
+ (*s->decoder)->stop();
s->client->disconnect();
if (s->decoder_component)
@@ -490,6 +492,8 @@ static av_cold int Stagefright_close(AVCodecContext *avctx)
delete s->in_queue;
delete s->out_queue;
delete s->client;
+ delete s->decoder;
+ delete s->source;
pthread_mutex_destroy(&s->in_mutex);
pthread_mutex_destroy(&s->out_mutex);
diff --git a/tools/build_libstagefright b/tools/build_libstagefright
index 583c801a56..a228487fb5 100644
--- a/tools/build_libstagefright
+++ b/tools/build_libstagefright
@@ -12,10 +12,10 @@ export PATH=$TOOLCHAIN/bin:$PATH
ANDROID_SOURCE=$HOME/android
ANDROID_LIBS=$HOME/glib
-rm -rf ../build/libav
-mkdir -p ../build/libav
+rm -rf ../build/stagefright
+mkdir -p ../build/stagefright
-DEST=../build/libav
+DEST=../build/stagefright
FLAGS="--target-os=linux --cross-prefix=arm-linux-androideabi- --arch=arm --cpu=armv7-a"
FLAGS="$FLAGS --sysroot=$SYSROOT"
FLAGS="$FLAGS --disable-avdevice --disable-decoder=h264 --disable-decoder=h264_vdpau --enable-libstagefright-h264"