1/*
2 * Copyright (C) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16/**
17 * @addtogroup AVPlayer
18 * @{
19 *
20 * @brief Provides APIs of Playback capability for Media Source.
21 *
22 * @Syscap SystemCapability.Multimedia.Media.AVPlayer
23 * @since 11
24 * @version 1.0
25 */
26
27/**
28 * @file avplayer_base.h
29 *
30 * @brief Defines the structure and enumeration for Media AVPlayer.
31 *
32 * @kit MediaKit
33 * @library libavplayer.so
34 * @since 11
35 * @version 1.0
36 */
37
38#ifndef MULTIMEDIA_PLAYER_FRAMEWORK_NATIVE_AVPLAYER_BASH_H
39#define MULTIMEDIA_PLAYER_FRAMEWORK_NATIVE_AVPLAYER_BASH_H
40
41#include <stdint.h>
42
43#include "native_avformat.h"
44
45#ifdef __cplusplus
46extern "C" {
47#endif
48
49typedef struct OH_AVPlayer OH_AVPlayer;
50
51/**
52 * @brief Player States
53 * @syscap SystemCapability.Multimedia.Media.AVPlayer
54 * @since 11
55 * @version 1.0
56 */
57typedef enum AVPlayerState {
58    /* idle states */
59    AV_IDLE = 0,
60    /* initialized states */
61    AV_INITIALIZED = 1,
62    /* prepared states */
63    AV_PREPARED = 2,
64    /* playing states */
65    AV_PLAYING = 3,
66    /* paused states */
67    AV_PAUSED = 4,
68    /* stopped states */
69    AV_STOPPED = 5,
70    /* Play to the end states */
71    AV_COMPLETED = 6,
72    /* released states */
73    AV_RELEASED = 7,
74    /* error states */
75    AV_ERROR = 8,
76} AVPlayerState;
77
78/**
79 * @brief Player Seek Mode
80 * @syscap SystemCapability.Multimedia.Media.AVPlayer
81 * @since 11
82 * @version 1.0
83 */
84typedef enum AVPlayerSeekMode {
85    /* sync to keyframes after the time point. */
86    AV_SEEK_NEXT_SYNC = 0,
87    /* sync to keyframes before the time point. */
88    AV_SEEK_PREVIOUS_SYNC,
89    /**
90     * @brief Sync to frames closest to the time point.
91     * @syscap SystemCapability.Multimedia.Media.AVPlayer
92     * @since 12
93     */
94    AV_SEEK_CLOSEST = 2,
95} AVPlayerSeekMode;
96
97/**
98 * @brief Playback Speed
99 * @syscap SystemCapability.Multimedia.Media.AVPlayer
100 * @since 11
101 * @version 1.0
102 */
103typedef enum AVPlaybackSpeed {
104    /* Video playback at 0.75x normal speed */
105    AV_SPEED_FORWARD_0_75_X,
106    /* Video playback at normal speed */
107    AV_SPEED_FORWARD_1_00_X,
108    /* Video playback at 1.25x normal speed */
109    AV_SPEED_FORWARD_1_25_X,
110    /* Video playback at 1.75x normal speed */
111    AV_SPEED_FORWARD_1_75_X,
112    /* Video playback at 2.0x normal speed */
113    AV_SPEED_FORWARD_2_00_X,
114    /**
115     * @brief Video playback at 0.5x normal speed.
116     * @syscap SystemCapability.Multimedia.Media.AVPlayer
117     * @since 12
118     */
119    AV_SPEED_FORWARD_0_50_X,
120    /**
121     * @brief Video playback at 1.5x normal speed.
122     * @syscap SystemCapability.Multimedia.Media.AVPlayer
123     * @since 12
124     */
125    AV_SPEED_FORWARD_1_50_X,
126    /**
127     * @brief Video playback at 3.0x normal speed.
128     * @syscap SystemCapability.Multimedia.Media.AVPlayer
129     * @since 13
130    */
131    AV_SPEED_FORWARD_3_00_X,
132    /**
133     * @brief Video playback at 0.25x normal speed.
134     * @syscap SystemCapability.Multimedia.Media.AVPlayer
135     * @since 13
136    */
137    AV_SPEED_FORWARD_0_25_X,
138    /**
139     * @brief Video playback at 0.125x normal speed.
140     * @syscap SystemCapability.Multimedia.Media.AVPlayer
141     * @since 13
142    */
143    AV_SPEED_FORWARD_0_125_X,
144} AVPlaybackSpeed;
145
146/**
147 * @brief Player OnInfo Type
148 * @syscap SystemCapability.Multimedia.Media.AVPlayer
149 * @since 11
150 * @version 1.0
151 */
152typedef enum AVPlayerOnInfoType {
153    /* return the message when seeking done. */
154    AV_INFO_TYPE_SEEKDONE = 0,
155    /* return the message when speeding done. */
156    AV_INFO_TYPE_SPEEDDONE = 1,
157    /* return the message when select bitrate done */
158    AV_INFO_TYPE_BITRATEDONE = 2,
159    /* return the message when playback is end of steam. */
160    AV_INFO_TYPE_EOS = 3,
161    /* return the message when PlayerStates changed. */
162    AV_INFO_TYPE_STATE_CHANGE = 4,
163    /* return the current posion of playback automatically. */
164    AV_INFO_TYPE_POSITION_UPDATE = 5,
165    /* return the playback message. */
166    AV_INFO_TYPE_MESSAGE = 6,
167    /* return the message when volume changed. */
168    AV_INFO_TYPE_VOLUME_CHANGE = 7,
169    /* return the message when video size is first known or updated. */
170    AV_INFO_TYPE_RESOLUTION_CHANGE = 8,
171    /* return multiqueue buffering time. */
172    AV_INFO_TYPE_BUFFERING_UPDATE = 9,
173    /* return hls bitrate.
174       Bitrate is to convert data into uint8_t array storage,
175       which needs to be forcibly converted to uint32_t through offset access. */
176    AV_INFO_TYPE_BITRATE_COLLECT = 10,
177    /* return the message when audio focus changed. */
178    AV_INFO_TYPE_INTERRUPT_EVENT = 11,
179    /* return the duration of playback. */
180    AV_INFO_TYPE_DURATION_UPDATE = 12,
181    /* return the playback is live stream. */
182    AV_INFO_TYPE_IS_LIVE_STREAM = 13,
183    /* return the message when track changes. */
184    AV_INFO_TYPE_TRACKCHANGE = 14,
185    /* return the message when subtitle track info updated. */
186    AV_INFO_TYPE_TRACK_INFO_UPDATE = 15,
187    /* return the subtitle of playback. */
188    AV_INFO_TYPE_SUBTITLE_UPDATE = 16,
189    /** Return the reason when the audio output device changes. When this info is reported, the extra param of
190     * {@link OH_AVPlayerOnInfo} is the same as {@OH_AudioStream_DeviceChangeReason} in audio framework.
191     */
192    AV_INFO_TYPE_AUDIO_OUTPUT_DEVICE_CHANGE = 17,
193} AVPlayerOnInfoType;
194
195/**
196 * @brief Player Buffering Type
197 * @syscap SystemCapability.Multimedia.Media.AVPlayer
198 * @since 12
199 * @version 1.0
200 */
201typedef enum AVPlayerBufferingType {
202    /** Indicates the buffer to start buffering. */
203    AVPLAYER_BUFFERING_START = 1,
204
205    /** Indicates the buffer to end buffering and start playback. */
206    AVPLAYER_BUFFERING_END,
207
208    /** Indicates the current buffering percentage of the buffer. */
209    AVPLAYER_BUFFERING_PERCENT,
210
211    /** Indicates how long the buffer cache data can be played. */
212    AVPLAYER_BUFFERING_CACHED_DURATION,
213} AVPlayerBufferingType;
214
215/**
216 * @brief Key to get state, value type is int32_t.
217 * @syscap SystemCapability.Multimedia.Media.AVPlayer
218 * @since 12
219 * @version 1.0
220 */
221extern const char* OH_PLAYER_STATE;
222
223/**
224 * @brief Key to get state change reason, value type is int32_t.
225 * @syscap SystemCapability.Multimedia.Media.AVPlayer
226 * @since 12
227 * @version 1.0
228 */
229extern const char* OH_PLAYER_STATE_CHANGE_REASON;
230
231/**
232 * @brief Key to get volume, value type is float.
233 * @syscap SystemCapability.Multimedia.Media.AVPlayer
234 * @since 12
235 * @version 1.0
236 */
237extern const char* OH_PLAYER_VOLUME;
238
239/**
240 * @brief Key to get bitrate count, value type is uint32_t array.
241 * @syscap SystemCapability.Multimedia.Media.AVPlayer
242 * @since 12
243 * @version 1.0
244 */
245extern const char* OH_PLAYER_BITRATE_ARRAY;
246
247/**
248 * @brief Key to get audio interrupt type, value type is int32_t.
249 * @syscap SystemCapability.Multimedia.Media.AVPlayer
250 * @since 12
251 * @version 1.0
252 */
253extern const char* OH_PLAYER_AUDIO_INTERRUPT_TYPE;
254
255/**
256 * @brief Key to get audio interrupt force, value type is int32_t.
257 * @syscap SystemCapability.Multimedia.Media.AVPlayer
258 * @since 12
259 * @version 1.0
260 */
261extern const char* OH_PLAYER_AUDIO_INTERRUPT_FORCE;
262
263/**
264 * @brief Key to get audio interrupt hint, value type is int32_t.
265 * @syscap SystemCapability.Multimedia.Media.AVPlayer
266 * @since 12
267 * @version 1.0
268 */
269extern const char* OH_PLAYER_AUDIO_INTERRUPT_HINT;
270
271/**
272 * @brief Key to get audio device change reason, value type is int32_t.
273 * @syscap SystemCapability.Multimedia.Media.AVPlayer
274 * @since 12
275 * @version 1.0
276 */
277extern const char* OH_PLAYER_AUDIO_DEVICE_CHANGE_REASON;
278
279/**
280 * @brief Key to get buffering type, value type is AVPlayerBufferingType.
281 * @syscap SystemCapability.Multimedia.Media.AVPlayer
282 * @since 12
283 * @version 1.0
284 */
285extern const char* OH_PLAYER_BUFFERING_TYPE;
286
287/**
288 * @brief Key to get buffering value, value type is int32_t.
289 * @syscap SystemCapability.Multimedia.Media.AVPlayer
290 * @since 12
291 * @version 1.0
292 */
293extern const char* OH_PLAYER_BUFFERING_VALUE;
294
295/**
296 * @brief Key to get seek position, value type is int32_t.
297 * @syscap SystemCapability.Multimedia.Media.AVPlayer
298 * @since 12
299 */
300extern const char* OH_PLAYER_SEEK_POSITION;
301
302/**
303 * @brief Key to get playback speed, value type is AVPlaybackSpeed.
304 * @syscap SystemCapability.Multimedia.Media.AVPlayer
305 * @since 12
306 */
307extern const char* OH_PLAYER_PLAYBACK_SPEED;
308
309/**
310 * @brief Key to get bitrate, value type is uint32_t.
311 * @syscap SystemCapability.Multimedia.Media.AVPlayer
312 * @since 12
313 */
314extern const char* OH_PLAYER_BITRATE;
315
316/**
317 * @brief Key to get current position, value type is int32_t.
318 * @syscap SystemCapability.Multimedia.Media.AVPlayer
319 * @since 12
320 */
321extern const char* OH_PLAYER_CURRENT_POSITION;
322
323/**
324 * @brief Key to get duration, value type is int64_t.
325 * @syscap SystemCapability.Multimedia.Media.AVPlayer
326 * @since 12
327 */
328extern const char* OH_PLAYER_DURATION;
329
330/**
331 * @brief Key to get video width, value type is int32_t.
332 * @syscap SystemCapability.Multimedia.Media.AVPlayer
333 * @since 12
334 */
335extern const char* OH_PLAYER_VIDEO_WIDTH;
336
337/**
338 * @brief Key to get video height, value type is int32_t.
339 * @syscap SystemCapability.Multimedia.Media.AVPlayer
340 * @since 12
341 */
342extern const char* OH_PLAYER_VIDEO_HEIGHT;
343
344/**
345 * @brief Key to get message type, value type is int32_t.
346 * @syscap SystemCapability.Multimedia.Media.AVPlayer
347 * @since 12
348 */
349extern const char* OH_PLAYER_MESSAGE_TYPE;
350
351/**
352 * @brief Key to get is live stream, value type is int32_t.
353 * @syscap SystemCapability.Multimedia.Media.AVPlayer
354 * @since 12
355 */
356extern const char* OH_PLAYER_IS_LIVE_STREAM;
357
358/**
359 * @brief Called when a player message or alarm is received.
360 * @syscap SystemCapability.Multimedia.Media.AVPlayer
361 * @param player The pointer to an OH_AVPlayer instance.
362 * @param type Indicates the information type. For details, see {@link AVPlayerOnInfoType}.
363 * @param extra Indicates other information, for example, the start time position of a playing file.
364 * @since 11
365 * @deprecated since 12
366 * @useinstead {@link OH_AVPlayerOnInfoCallback}
367 * @version 1.0
368 */
369typedef void (*OH_AVPlayerOnInfo)(OH_AVPlayer *player, AVPlayerOnInfoType type, int32_t extra);
370
371/**
372 * @brief Called when a player info event is received.
373 * @syscap SystemCapability.Multimedia.Media.AVPlayer
374 * @param player The pointer to an OH_AVPlayer instance.
375 * @param type Indicates the information type. For details, see {@link AVPlayerOnInfoType}.
376 * @param infoBody Indicates the information parameters, only valid in callback function.
377 * @param userData Pointer to user specific data.
378 * @since 12
379 */
380typedef void (*OH_AVPlayerOnInfoCallback)(OH_AVPlayer *player, AVPlayerOnInfoType type, OH_AVFormat* infoBody,
381    void *userData);
382
383/**
384 * @brief Called when an error occurred for versions above api9
385 * @syscap SystemCapability.Multimedia.Media.AVPlayer
386 * @param player The pointer to an OH_AVPlayer instance.
387 * @param errorCode Error code.
388 * @param errorMsg Error message.
389 * @since 11
390 * @deprecated since 12
391 * @useinstead {@link OH_AVPlayerOnInfoCallback} {@link OH_AVPlayerOnError}
392 * @version 1.0
393 */
394typedef void (*OH_AVPlayerOnError)(OH_AVPlayer *player, int32_t errorCode, const char *errorMsg);
395
396/**
397 * @brief Called when an error occurred.
398 * @syscap SystemCapability.Multimedia.Media.AVPlayer
399 * @param player The pointer to an OH_AVPlayer instance.
400 * @param errorCode Error code.
401 * @param errorMsg Error message, only valid in callback function.
402 * @param userData Pointer to user specific data.
403 * @since 12
404 */
405typedef void (*OH_AVPlayerOnErrorCallback)(OH_AVPlayer *player, int32_t errorCode, const char *errorMsg,
406    void *userData);
407
408/**
409 * @brief A collection of all callback function pointers in OH_AVPlayer. Register an instance of this
410 * structure to the OH_AVPlayer instance, and process the information reported through the callback to ensure the
411 * normal operation of OH_AVPlayer.
412 * @syscap SystemCapability.Multimedia.Media.AVPlayer
413 * @param onInfo Monitor OH_AVPlayer operation information, refer to {@link OH_AVPlayerOnInfo}
414 * @param onError Monitor OH_AVPlayer operation errors, refer to {@link OH_AVPlayerOnError}
415 * @since 11
416 * @deprecated since 12
417 * @useinstead {@link OH_AVPlayerOnInfoCallback} {@link OH_AVPlayerOnErrorCallback}
418 * @version 1.0
419 */
420typedef struct AVPlayerCallback {
421    OH_AVPlayerOnInfo onInfo;
422    OH_AVPlayerOnError onError;
423} AVPlayerCallback;
424
425#ifdef __cplusplus
426}
427#endif
428#endif // MULTIMEDIA_PLAYER_FRAMEWORK_NATIVE_AVPLAYER_BASH_H
429