CreateJavaOutputStreamAdaptor.h revision c7797525084ba0ea441e394aa0a2ba35d6ff3320
1#ifndef CreateJavaOutputStream_DEFINED
2#define CreateJavaOutputStream_DEFINED
3
4//#include <android_runtime/AndroidRuntime.h>
5#include "jni.h"
6
7namespace android {
8    class AssetStreamAdaptor;
9}
10
11class SkMemoryStream;
12class SkStream;
13class SkStreamRewindable;
14class SkWStream;
15
16/**
17 *  Return an adaptor from a Java InputStream to an SkStream.
18 *  @param env JNIEnv object.
19 *  @param stream Pointer to Java InputStream.
20 *  @param storage Java byte array for retrieving data from the
21 *      Java InputStream.
22 *  @return SkStream Simple subclass of SkStream which supports its
23 *      basic methods like reading. Only valid until the calling
24 *      function returns, since the Java InputStream is not managed
25 *      by the SkStream.
26 */
27SkStream* CreateJavaInputStreamAdaptor(JNIEnv* env, jobject stream,
28                                       jbyteArray storage);
29
30/**
31 *  Copy a Java InputStream.
32 *  @param env JNIEnv object.
33 *  @param stream Pointer to Java InputStream.
34 *  @param storage Java byte array for retrieving data from the
35 *      Java InputStream.
36 *  @return SkStreamRewindable The data in stream will be copied
37 *      to a new SkStreamRewindable.
38 */
39SkStreamRewindable* CopyJavaInputStream(JNIEnv* env, jobject stream,
40                                        jbyteArray storage);
41
42/**
43 *  Get a rewindable stream from a Java InputStream.
44 *  @param env JNIEnv object.
45 *  @param stream Pointer to Java InputStream.
46 *  @param storage Java byte array for retrieving data from the
47 *      Java InputStream.
48 *  @return SkStreamRewindable Either a wrapper around the Java
49 *      InputStream, if possible, or a copy which is rewindable.
50 *      Since it may be a wrapper, must not be used after the
51 *      caller returns, like the result of CreateJavaInputStreamAdaptor.
52 */
53SkStreamRewindable* GetRewindableStream(JNIEnv* env, jobject stream,
54                                        jbyteArray storage);
55
56/**
57 *  If the Java InputStream is an AssetInputStream, return an adaptor.
58 *  This should not be used after the calling function returns, since
59 *  the caller may close the asset. Returns NULL if the stream is
60 *  not an AssetInputStream.
61 *  @param env JNIEnv object.
62 *  @param stream Pointer to Java InputStream.
63 *  @return AssetStreamAdaptor representing the InputStream, or NULL.
64 *      Must not be held onto.
65 */
66android::AssetStreamAdaptor* CheckForAssetStream(JNIEnv* env, jobject stream);
67
68SkWStream* CreateJavaOutputStreamAdaptor(JNIEnv* env, jobject stream,
69                                         jbyteArray storage);
70#endif
71