diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-09-14 17:46:49 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-09-14 17:46:49 +0200 |
commit | d2a847c203b5876e2bb5f0bc216b0af625f077a2 (patch) | |
tree | d1e3d92d01a65b0629c4d0f58f3f00e43de3eb3f | |
parent | 9fa47cb77371fe93ba7081d33e49e53765c17aa7 (diff) | |
parent | e7f9aa6ff5c850df173784d88ef8c79b22513d96 (diff) | |
download | ffmpeg-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-- | Changelog | 2 | ||||
-rw-r--r-- | libavcodec/libstagefright.cpp | 24 | ||||
-rw-r--r-- | tools/build_libstagefright | 6 |
3 files changed, 18 insertions, 14 deletions
@@ -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" |