Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Amlcodec #2691

Merged
merged 5 commits into from
May 9, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions configure.in
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,21 @@ AC_DEFUN([XB_ADD_PLAYER],
esac
])

# check for enabling additional codecs
AC_DEFUN([XB_ADD_CODEC],
[
AC_MSG_CHECKING([for $2])
case $add_codecs in
*$2*)
AC_SUBST([USE_$1], 1)
AC_DEFINE([HAS_$1], 1, [using $2])
AC_MSG_RESULT([enabling $2])
;;
*)
AC_MSG_RESULT([$2 is not enabled])
esac
])

# check for library basenames
AC_DEFUN([XB_FIND_SONAME],
[
Expand Down Expand Up @@ -513,6 +528,12 @@ AC_ARG_ENABLE([gtest],
[configure_gtest=$enableval],
[configure_gtest=no])

AC_ARG_ENABLE([codec],
[AS_HELP_STRING([--enable-codec],
[enable additional codecs from a list of comma separated names, (default is none, choices are amcodec)])],
[add_codecs=$enableval],
[add_codecs=no])

### External libraries options
AC_ARG_ENABLE([external-libraries],
[AS_HELP_STRING([--enable-external-libraries],
Expand Down Expand Up @@ -1878,6 +1899,14 @@ case $add_players in
;;
esac

# additional internal codecs
case $add_codecs in
*amcodec*)
AC_CHECK_HEADER([amlplayer/codec_error.h],, AC_MSG_ERROR($missing_headers))
XB_ADD_CODEC([LIBAMCODEC], [amcodec])
;;
esac

# platform specific bin utilities
if test "$build_vendor" != "apple" ; then
AC_CHECK_PROG(HAVE_GAWK,gawk,"yes","no",)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ typedef enum {
VIDEO_DEC_FORMAT_WMV3,
VIDEO_DEC_FORMAT_WVC1,
VIDEO_DEC_FORMAT_SW,
VIDEO_DEC_FORMAT_AVS,
VIDEO_DEC_FORMAT_MAX
} vdec_type_t;

Expand Down
93 changes: 93 additions & 0 deletions tools/depends/target/libamplayer/libamplayer/include/codec.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/**
* @file codec.h
* @brief Function prototypes of codec lib
* @author Zhang Chen <chen.zhang@amlogic.com>
* @version 1.0.0
* @date 2011-02-24
*/
/* Copyright (C) 2007-2011, Amlogic Inc.
* All right reserved
*
*/
#ifndef CODEC_CTRL_H_
#define CODEC_CTRL_H_

#include <codec_type.h>
#include <codec_error.h>


int codec_init(codec_para_t *);
int codec_close(codec_para_t *);
void codec_audio_basic_init(void);
void codec_close_audio(codec_para_t *);
void codec_resume_audio(codec_para_t *, unsigned int);
int codec_reset(codec_para_t *);
int codec_init_sub(codec_para_t *);
int codec_open_sub_read(void);
int codec_close_sub(codec_para_t *);
int codec_close_sub_fd(CODEC_HANDLE);
int codec_reset_subtile(codec_para_t *pcodec);
int codec_poll_sub(codec_para_t *);
int codec_poll_sub_fd(CODEC_HANDLE, int);
int codec_get_sub_size(codec_para_t *);
int codec_get_sub_size_fd(CODEC_HANDLE);
int codec_read_sub_data(codec_para_t *, char *, unsigned int);
int codec_read_sub_data_fd(CODEC_HANDLE, char *, unsigned int);
int codec_write_sub_data(codec_para_t *, char *, unsigned int);
int codec_init_cntl(codec_para_t *);
int codec_close_cntl(codec_para_t *);
int codec_poll_cntl(codec_para_t *);
int codec_get_cntl_state(codec_para_t *);
int codec_set_cntl_mode(codec_para_t *, unsigned int);
int codec_set_cntl_avthresh(codec_para_t *, unsigned int);
int codec_set_cntl_syncthresh(codec_para_t *pcodec, unsigned int syncthresh);
int codec_reset_audio(codec_para_t *pcodec);
int codec_set_audio_pid(codec_para_t *pcodec);
int codec_set_sub_id(codec_para_t *pcodec);
int codec_set_sub_type(codec_para_t *pcodec);
int codec_audio_reinit(codec_para_t *pcodec);
int codec_set_dec_reset(codec_para_t *pcodec);

int codec_write(codec_para_t *pcodec, void *buffer, int len);
int codec_checkin_pts(codec_para_t *pcodec, unsigned long pts);
int codec_get_vbuf_state(codec_para_t *, struct buf_status *);
int codec_get_abuf_state(codec_para_t *, struct buf_status *);
int codec_get_vdec_state(codec_para_t *, struct vdec_status *);
int codec_get_adec_state(codec_para_t *, struct adec_status *);

int codec_pause(codec_para_t *);
int codec_resume(codec_para_t *);
int codec_audio_search(codec_para_t *p);
int codec_set_mute(codec_para_t *p, int mute);
int codec_get_volume_range(codec_para_t *, int *min, int *max);
int codec_set_volume(codec_para_t *, float val);
int codec_get_volume(codec_para_t *, float *val);
int codec_set_lrvolume(codec_para_t *, float lvol,float rvol);
int codec_get_lrvolume(codec_para_t *, float *lvol,float* rvol);
int codec_get_mutesta(codec_para_t *);
int codec_set_volume_balance(codec_para_t *, int); /*left��0-100)right*/
int codec_swap_left_right(codec_para_t *);
int codec_left_mono(codec_para_t *p);
int codec_right_mono(codec_para_t *p);
int codec_stereo(codec_para_t *p);
int codec_get_soundtrack(codec_para_t *p,int* strack);
int codec_audio_automute(void *priv, int auto_mute);
int codec_audio_spectrum_switch(codec_para_t *p, int isStart, int interval);
int codec_audio_isready(codec_para_t *p);
int codec_audio_get_nb_frames(codec_para_t *p);
int codec_audio_set_audioinfo(codec_para_t *p);

int codec_get_apts(codec_para_t *pcodec);
int codec_get_vpts(codec_para_t *pcodec);
int codec_get_pcrscr(codec_para_t *pcodec);
int codec_set_pcrscr(codec_para_t *pcodec, int val);
int codec_set_syncenable(codec_para_t *pcodec, int enable);
int codec_set_sync_audio_discont(codec_para_t *pcodec, int discontinue);
int codec_get_sync_audio_discont(codec_para_t *pcodec);
int codec_set_sync_video_discont(codec_para_t *pcodec, int discontinue);
int codec_get_sync_video_discont(codec_para_t *pcodec);

int codec_get_sub_num(codec_para_t *pcodec);
int codec_get_sub_info(codec_para_t *pcodec, subtitle_info_t *sub_info);

#endif
37 changes: 37 additions & 0 deletions tools/depends/target/libamplayer/libamplayer/include/codec_error.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/**
* @file codec_error.h
* @brief Codec error type definitions
* @author Zhang Chen <chen.zhang@amlogic.com>
* @version 1.0.0
* @date 2011-02-24
*/
/* Copyright (C) 2007-2011, Amlogic Inc.
* All right reserved
*
*/

#ifndef CODEC_ERROR_H_
#define CODEC_ERROR_H_

#define C_PAE (0x01000000)

#define CODEC_ERROR_NONE ( 0)
#define CODEC_ERROR_INVAL (C_PAE | 1)
#define CODEC_ERROR_NOMEM (C_PAE | 2)
#define CODEC_ERROR_BUSY (C_PAE | 3)
#define CODEC_ERROR_IO (C_PAE | 4)
#define CODEC_ERROR_PARAMETER (C_PAE | 5)
#define CODEC_ERROR_AUDIO_TYPE_UNKNOW (C_PAE | 6)
#define CODEC_ERROR_VIDEO_TYPE_UNKNOW (C_PAE | 7)
#define CODEC_ERROR_STREAM_TYPE_UNKNOW (C_PAE | 8)
#define CODEC_ERROR_VDEC_TYPE_UNKNOW (C_PAE | 9)

#define CODEC_ERROR_INIT_FAILED (C_PAE | 10)
#define CODEC_ERROR_SET_BUFSIZE_FAILED (C_PAE | 11)
#define CODEC_OPEN_HANDLE_FAILED (C_PAE | 12)




#endif

19 changes: 19 additions & 0 deletions tools/depends/target/libamplayer/libamplayer/include/codec_msg.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/**
* @file codec_msg.h
* @brief Function prototype of codec error
* @author Zhang Chen <chen.zhang@amlogic.com>
* @version 1.0.0
* @date 2011-02-24
*/
/* Copyright (C) 2007-2011, Amlogic Inc.
* All right reserved
*
*/
#ifndef CODEC_MSG_H
#define CODEC_MSG_H

const char * codec_error_msg(int error);
int system_error_to_codec_error(int error);
void print_error_msg(int error, int syserr, char *func, int line);

#endif
108 changes: 108 additions & 0 deletions tools/depends/target/libamplayer/libamplayer/include/codec_type.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/**
* @file codec_type.h
* @brief Definitions of codec type and structures
* @author Zhang Chen <chen.zhang@amlogic.com>
* @version 1.0.0
* @date 2011-02-24
*/
/* Copyright (C) 2007-2011, Amlogic Inc.
* All right reserved
*
*/
#ifndef CODEC_TYPE_H_
#define CODEC_TYPE_H_

#include "amports/amstream.h"
#include "amports/vformat.h"
#include "amports/aformat.h"

typedef int CODEC_HANDLE;

typedef enum {
STREAM_TYPE_UNKNOW,
STREAM_TYPE_ES_VIDEO,
STREAM_TYPE_ES_AUDIO,
STREAM_TYPE_ES_SUB,
STREAM_TYPE_PS,
STREAM_TYPE_TS,
STREAM_TYPE_RM,
} stream_type_t;

typedef struct {
unsigned int format; ///< video format, such as H264, MPEG2...
unsigned int width; ///< video source width
unsigned int height; ///< video source height
unsigned int rate; ///< video source frame duration
unsigned int extra; ///< extra data information of video stream
unsigned int status; ///< status of video stream
unsigned int ratio; ///< aspect ratio of video source
void * param; ///< other parameters for video decoder
unsigned long long ratio64; ///< aspect ratio of video source
} dec_sysinfo_t;

typedef struct {
int valid; ///< audio extradata valid(1) or invalid(0), set by dsp
int sample_rate; ///< audio stream sample rate
int channels; ///< audio stream channels
int bitrate; ///< audio stream bit rate
int codec_id; ///< codec format id
int block_align; ///< audio block align from ffmpeg
int extradata_size; ///< extra data size
char extradata[AUDIO_EXTRA_DATA_SIZE]; ///< extra data information for decoder
} audio_info_t;

typedef struct {
CODEC_HANDLE handle; ///< codec device handler
CODEC_HANDLE cntl_handle; ///< video control device handler
CODEC_HANDLE sub_handle; ///< subtile device handler
stream_type_t stream_type; ///< stream type(es, ps, rm, ts)
unsigned int has_video:1; ///< stream has video(1) or not(0)
unsigned int has_audio:1; ///< stream has audio(1) or not(0)
unsigned int has_sub:1; ///< stream has subtitle(1) or not(0)
unsigned int noblock:1; ///< codec device is NONBLOCK(1) or not(0)
int video_type; ///< stream video type(H264, VC1...)
int audio_type; ///< stream audio type(PCM, WMA...)
int sub_type; ///< stream subtitle type(TXT, SSA...)
int video_pid; ///< stream video pid
int audio_pid; ///< stream audio pid
int sub_pid; ///< stream subtitle pid
int audio_channels; ///< stream audio channel number
int audio_samplerate; ///< steram audio sample rate
int vbuf_size; ///< video buffer size of codec device
int abuf_size; ///< audio buffer size of codec device
dec_sysinfo_t am_sysinfo; ///< system information for video
audio_info_t audio_info; ///< audio information pass to audiodsp
int packet_size; ///< data size per packet
int avsync_threshold; ///<for adec in ms>
void * adec_priv; ///<for adec>
} codec_para_t;

typedef struct
{
signed char id;
unsigned char width;
unsigned char height;
unsigned char type;
} subtitle_info_t;
#define MAX_SUB_NUM (32)

#define IS_VALID_PID(t) (t>=0 && t<=0x1fff)
#define IS_VALID_STREAM(t) (t>0 && t<=0x1fff)
#define IS_VALID_ATYPE(t) (t>=0 && t<AFORMAT_MAX)
#define IS_VALID_VTYPE(t) (t>=0 && t<VFORMAT_MAX)

//pass to arm audio decoder
typedef struct {
int sample_rate; ///< audio stream sample rate
int channels; ///< audio stream channels
int format; ///< codec format id
int handle; ///< codec device handler
int extradata_size; ///< extra data size
char extradata[AUDIO_EXTRA_DATA_SIZE];
} arm_audio_info;

//audio decoder type, default arc
#define AUDIO_ARC_DECODER 0
#define AUDIO_ARM_DECODER 1
#define AUDIO_FFMPEG_DECODER 2
#endif
Loading