Skip to content

Commit 8a43102

Browse files
committed
start of audio stuff
1 parent bf782ad commit 8a43102

9 files changed

Lines changed: 231 additions & 21 deletions

java/org/cef/CefClient.java

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,7 @@
2121
import org.cef.callback.CefMenuModel;
2222
import org.cef.callback.CefPrintDialogCallback;
2323
import org.cef.callback.CefPrintJobCallback;
24-
import org.cef.handler.CefClientHandler;
25-
import org.cef.handler.CefContextMenuHandler;
26-
import org.cef.handler.CefDialogHandler;
27-
import org.cef.handler.CefDisplayHandler;
28-
import org.cef.handler.CefDownloadHandler;
29-
import org.cef.handler.CefDragHandler;
30-
import org.cef.handler.CefFocusHandler;
31-
import org.cef.handler.CefJSDialogHandler;
32-
import org.cef.handler.CefKeyboardHandler;
33-
import org.cef.handler.CefLifeSpanHandler;
34-
import org.cef.handler.CefLoadHandler;
35-
import org.cef.handler.CefPrintHandler;
36-
import org.cef.handler.CefRenderHandler;
37-
import org.cef.handler.CefRequestHandler;
38-
import org.cef.handler.CefResourceHandler;
39-
import org.cef.handler.CefResourceRequestHandler;
40-
import org.cef.handler.CefScreenInfo;
41-
import org.cef.handler.CefWindowHandler;
24+
import org.cef.handler.*;
4225
import org.cef.misc.BoolRef;
4326
import org.cef.misc.CefPrintSettings;
4427
import org.cef.misc.StringRef;
@@ -66,7 +49,7 @@ public class CefClient extends CefClientHandler
6649
implements CefContextMenuHandler, CefDialogHandler, CefDisplayHandler, CefDownloadHandler,
6750
CefDragHandler, CefFocusHandler, CefJSDialogHandler, CefKeyboardHandler,
6851
CefLifeSpanHandler, CefLoadHandler, CefPrintHandler, CefRenderHandler,
69-
CefRequestHandler, CefWindowHandler {
52+
CefRequestHandler, CefWindowHandler, CefAudioHandler {
7053
private HashMap<Integer, CefBrowser> browser_ = new HashMap<Integer, CefBrowser>();
7154
private CefContextMenuHandler contextMenuHandler_ = null;
7255
private CefDialogHandler dialogHandler_ = null;
@@ -532,6 +515,7 @@ private void cleanupBrowser(int identifier) {
532515
removeContextMenuHandler(this);
533516
removeDialogHandler(this);
534517
removeDisplayHandler(this);
518+
removeAudioHandler(this);
535519
removeDownloadHandler(this);
536520
removeDragHandler(this);
537521
removeFocusHandler(this);
@@ -808,4 +792,32 @@ public void onMouseEvent(
808792
public boolean getScreenInfo(CefBrowser arg0, CefScreenInfo arg1) {
809793
return false;
810794
}
795+
796+
// CefAudioHandler
797+
798+
799+
@Override
800+
public int getAudioParameters(CefBrowser browser, Object params) {
801+
return 0; // TODO
802+
}
803+
804+
@Override
805+
public void onAudioStreamStarted(CefBrowser browser, Object params, int channels) {
806+
// TODO
807+
}
808+
809+
@Override
810+
public void onAudioStreamPacket(CefBrowser browser, float[][] data, int frames, long pts) {
811+
// TODO
812+
}
813+
814+
@Override
815+
public void onAudioStreamStopped(CefBrowser browser) {
816+
// TODO
817+
}
818+
819+
@Override
820+
public void onAudioStreamError(CefBrowser browser, String text) {
821+
// TODO
822+
}
811823
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
2+
// reserved. Use of this source code is governed by a BSD-style license that
3+
// can be found in the LICENSE file.
4+
5+
package org.cef.handler;
6+
7+
import org.cef.browser.CefBrowser;
8+
9+
/**
10+
* Implement this interface to handle events related to audio playing.
11+
* The methods of this class will be called on the UI thread.
12+
*/
13+
public interface CefAudioHandler {
14+
int getAudioParameters(CefBrowser browser, Object params);
15+
16+
void onAudioStreamStarted(CefBrowser browser, Object params, int channels);
17+
18+
void onAudioStreamPacket(CefBrowser browser, float[][] data, int frames, long pts);
19+
20+
void onAudioStreamStopped(CefBrowser browser);
21+
22+
void onAudioStreamError(CefBrowser browser, String text);
23+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
2+
// reserved. Use of this source code is governed by a BSD-style license that
3+
// can be found in the LICENSE file.
4+
5+
package org.cef.handler;
6+
7+
import org.cef.browser.CefBrowser;
8+
9+
/**
10+
* Implement this interface to handle events related to audio playing.
11+
* The methods of this class will be called on the UI thread.
12+
*/
13+
public abstract class CefAudioHandlerAdapter implements CefAudioHandler {
14+
public int getAudioParameters(CefBrowser browser, Object params) {
15+
return 0; // TODO
16+
}
17+
18+
public void onAudioStreamStarted(CefBrowser browser, Object params, int channels) {
19+
}
20+
21+
public void onAudioStreamPacket(CefBrowser browser, float[][] data, int frames, long pts) {
22+
}
23+
24+
public void onAudioStreamStopped(CefBrowser browser) {
25+
}
26+
27+
public void onAudioStreamError(CefBrowser browser, String text) {
28+
}
29+
}

java/org/cef/handler/CefClientHandler.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,16 @@ protected void removeDisplayHandler(CefDisplayHandler h) {
198198
err.printStackTrace();
199199
}
200200
}
201+
202+
protected void removeAudioHandler(CefAudioHandler h) {
203+
try {
204+
N_removeAudioHandler(h);
205+
} catch (UnsatisfiedLinkError err) {
206+
err.printStackTrace();
207+
}
208+
}
201209

202-
protected void removeDownloadHandler(CefDisplayHandler h) {
210+
protected void removeDownloadHandler(CefDownloadHandler h) {
203211
try {
204212
N_removeDownloadHandler(h);
205213
} catch (UnsatisfiedLinkError err) {
@@ -301,7 +309,8 @@ protected void removeWindowHandler(CefWindowHandler h) {
301309
private final native void N_removeContextMenuHandler(CefContextMenuHandler h);
302310
private final native void N_removeDialogHandler(CefDialogHandler h);
303311
private final native void N_removeDisplayHandler(CefDisplayHandler h);
304-
private final native void N_removeDownloadHandler(CefDisplayHandler h);
312+
private final native void N_removeAudioHandler(CefAudioHandler h);
313+
private final native void N_removeDownloadHandler(CefDownloadHandler h);
305314
private final native void N_removeDragHandler(CefDragHandler h);
306315
private final native void N_removeFocusHandler(CefFocusHandler h);
307316
private final native void N_removeJSDialogHandler(CefJSDialogHandler h);

native/CefClientHandler.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,15 @@ Java_org_cef_handler_CefClientHandler_N_1removeDisplayHandler(
5454
"CefDisplayHandler");
5555
}
5656

57+
JNIEXPORT void JNICALL
58+
Java_org_cef_handler_CefClientHandler_N_1removeAudioHandler(
59+
JNIEnv* env,
60+
jobject clientHandler,
61+
jobject audioHandler) {
62+
SetCefForJNIObject<CefAudioHandler>(env, audioHandler, nullptr,
63+
"CefAudioHandler");
64+
}
65+
5766
JNIEXPORT void JNICALL
5867
Java_org_cef_handler_CefClientHandler_N_1removeDownloadHandler(
5968
JNIEnv* env,

native/CefClientHandler.h

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

native/audio_handler.cpp

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
2+
// reserved. Use of this source code is governed by a BSD-style license that
3+
// can be found in the LICENSE file.
4+
5+
#include "audio_handler.h"
6+
7+
#include "jni_util.h"
8+
9+
AudioHandler::AudioHandler(JNIEnv* env, jobject handler)
10+
: handle_(env, handler) {}
11+
12+
int AudioHandler::GetAudioParameters(CefRefPtr<CefBrowser> browser,
13+
cef_audio_parameters_t* params) {
14+
ScopedJNIEnv env;
15+
if (!env)
16+
return 0;
17+
18+
ScopedJNIBrowser jbrowser(env, browser);
19+
20+
return JNI_CALL_INT_METHOD(env, handle_, "getAudioParameters",
21+
"(Lorg/cef/browser/CefBrowser;Ljava/lang/Object;)I",
22+
jbrowser.get(), nullptr);
23+
}
24+
25+
void AudioHandler::OnAudioStreamStarted(CefRefPtr<CefBrowser> browser,
26+
cef_audio_parameters_t params, int channels) {
27+
ScopedJNIEnv env;
28+
if (!env)
29+
return;
30+
31+
ScopedJNIBrowser jbrowser(env, browser);
32+
33+
JNI_CALL_VOID_METHOD(env, handle_, "onAudioStreamStarted",
34+
"(Lorg/cef/browser/CefBrowser;Ljava/lang/Object;I)V",
35+
jbrowser.get(), nullptr, channels);
36+
}
37+
38+
void AudioHandler::OnAudioStreamPacket(CefRefPtr<CefBrowser> browser, float** data, int frames, long long pts) {
39+
ScopedJNIEnv env;
40+
if (!env)
41+
return false;
42+
43+
ScopedJNIBrowser jbrowser(env, browser);
44+
ScopedJNIString jtext(env, text);
45+
jboolean jreturn = JNI_FALSE;
46+
47+
// TODO: this is based on a bit of an assumption
48+
JNI_CALL_METHOD(env, handle_, "onAudioStreamPacket",
49+
"(Lorg/cef/browser/CefBrowser;Ljava/lang/String;[[FIL]])Z", Boolean,
50+
jreturn, jbrowser.get(), jtext.get()); // TODO:
51+
}
52+
53+
void AudioHandler::OnAudioStreamStopped(CefRefPtr<CefBrowser> browser) {
54+
ScopedJNIEnv env;
55+
if (!env)
56+
return;
57+
58+
ScopedJNIBrowser jbrowser(env, browser);
59+
60+
JNI_CALL_VOID_METHOD(env, handle_, "onAudioStreamStopped",
61+
"(Lorg/cef/browser/CefBrowser;)V",
62+
jbrowser.get());
63+
}
64+
65+
void AudioHandler::OnAudioStreamError(CefRefPtr<CefBrowser> browser,
66+
const CefString& text) {
67+
ScopedJNIEnv env;
68+
if (!env)
69+
return false;
70+
71+
ScopedJNIBrowser jbrowser(env, browser);
72+
ScopedJNIString jtext(env, text);
73+
74+
JNI_CALL_VOID_METHOD(env, handle_, "onAudioStreamError",
75+
"(Lorg/cef/browser/CefBrowser;Ljava/lang/String;)V",
76+
jbrowser.get(), text.get());
77+
}

native/audio_handler.h

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
2+
// reserved. Use of this source code is governed by a BSD-style license that
3+
// can be found in the LICENSE file.
4+
5+
#ifndef JCEF_NATIVE_DISPLAY_HANDLER_H_
6+
#define JCEF_NATIVE_DISPLAY_HANDLER_H_
7+
#pragma once
8+
9+
#include <jni.h>
10+
11+
#include "include/cef_audio_handler_capi.h"
12+
13+
#include "jni_scoped_helpers.h"
14+
15+
// DisplayHandler implementation.
16+
class AudioHandler : public CefAudioHandler {
17+
public:
18+
AudioHandler(JNIEnv* env, jobject handler);
19+
20+
// CefDisplayHandler methods:
21+
int GetAudioParameters(CefRefPtr<CefBrowser> browser,
22+
cef_audio_parameters_t params) override;
23+
void OnAudioStreamStarted(CefRefPtr<CefBrowser> browser,
24+
cef_audio_parameters_t params, int channels) override;
25+
bool OnAudioStreamPacket(CefRefPtr<CefBrowser> browser, float** data, int frames, long long pts) override;
26+
void OnAudioStreamStopped(CefRefPtr<CefBrowser> browser) override;
27+
void OnAudioStreamError(CefRefPtr<CefBrowser> browser, CefString& text) override;
28+
29+
protected:
30+
ScopedJNIObjectGlobal handle_;
31+
32+
// Include the default reference counting implementation.
33+
IMPLEMENT_REFCOUNTING(AudioHandler);
34+
};
35+
36+
#endif // JCEF_NATIVE_DISPLAY_HANDLER_H_

native/client_handler.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "context_menu_handler.h"
1616
#include "dialog_handler.h"
1717
#include "display_handler.h"
18+
#include "audio_handler.h"
1819
#include "download_handler.h"
1920
#include "drag_handler.h"
2021
#include "focus_handler.h"
@@ -105,6 +106,10 @@ CefRefPtr<CefDisplayHandler> ClientHandler::GetDisplayHandler() {
105106
return GetHandler<DisplayHandler>("DisplayHandler");
106107
}
107108

109+
CefRefPtr<CefAudioHandler> ClientHandler::GetAudioHandler() {
110+
return GetHandler<AudioHandler>("AudioHandler");
111+
}
112+
108113
CefRefPtr<CefDownloadHandler> ClientHandler::GetDownloadHandler() {
109114
return GetHandler<DownloadHandler>("DownloadHandler");
110115
}

0 commit comments

Comments
 (0)