summaryrefslogtreecommitdiffstats
path: root/camera/Encoder_libjpeg.cpp
diff options
context:
space:
mode:
authorTyler Luu <tluu@ti.com>2011-10-07 11:57:42 -0500
committerIliyan Malchev <malchev@google.com>2011-10-07 11:10:18 -0700
commitb0f698a6430c3a9478bd476af7189849a1fb1a9d (patch)
tree80d08c481415e2b9a84c920ae2e32b8253f312bf /camera/Encoder_libjpeg.cpp
parent058603f11e5d4355440c4289ac24e4bcd0b82db7 (diff)
downloadandroid_hardware_ti_omap4-b0f698a6430c3a9478bd476af7189849a1fb1a9d.tar.gz
android_hardware_ti_omap4-b0f698a6430c3a9478bd476af7189849a1fb1a9d.tar.bz2
android_hardware_ti_omap4-b0f698a6430c3a9478bd476af7189849a1fb1a9d.zip
omap4xxx: camera: cancel and flush for SW JPEG encoder
Fixes b/5378650 1. Add method to externally cancel Encoder class while in the middle of encoding. 2. Add queue in AppCallbackNotifier to track all the encoding sessions. When stopping AppCallbackNotifier if any encoding sessions are still ongoing, cancel and wait for the threads to return. Previously, it was possible for Encoder threads to still be running when the preview and images buffers were freed. Change-Id: Ib123d1644dfa7058a6f50f0001b4d05359853827 Signed-off-by: Tyler Luu <tluu@ti.com> Signed-off-by: Iliyan Malchev <malchev@google.com>
Diffstat (limited to 'camera/Encoder_libjpeg.cpp')
-rw-r--r--camera/Encoder_libjpeg.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/camera/Encoder_libjpeg.cpp b/camera/Encoder_libjpeg.cpp
index 23058d3..152e3cc 100644
--- a/camera/Encoder_libjpeg.cpp
+++ b/camera/Encoder_libjpeg.cpp
@@ -367,7 +367,7 @@ size_t Encoder_libjpeg::encode(params* input) {
row_src = src;
row_uv = src + out_width * out_height * bpp;
- while (cinfo.next_scanline < cinfo.image_height) {
+ while ((cinfo.next_scanline < cinfo.image_height) && !mCancelEncoding) {
JSAMPROW row[1]; /* pointer to JSAMPLE row[s] */
// convert input yuv format to yuv444
@@ -388,7 +388,10 @@ size_t Encoder_libjpeg::encode(params* input) {
}
}
- jpeg_finish_compress(&cinfo);
+ // no need to finish encoding routine if we are prematurely stopping
+ // we will end up crashing in dest_mgr since data is incomplete
+ if (!mCancelEncoding)
+ jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);
if (resize_src) free(resize_src);