X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tizen%2Fsrc%2Fhw%2Fmaru_codec.h;h=fb74bda0233658ce39f7b7dd0245f92b86d76799;hb=9b02432b9f8ef3c093f6888a3e4c2c2d6631780a;hp=1cc00fe8bac451a1057d56cefc54749fe39ff2c4;hpb=df8b863e2f7219eb3356ecc12635811241e38aad;p=sdk%2Femulator%2Fqemu.git diff --git a/tizen/src/hw/maru_codec.h b/tizen/src/hw/maru_codec.h index 1cc00fe..fb74bda 100644 --- a/tizen/src/hw/maru_codec.h +++ b/tizen/src/hw/maru_codec.h @@ -36,50 +36,66 @@ #include "pci.h" #include "pci_ids.h" #include "tizen/src/debug_ch.h" +#include "maru_pci_ids.h" #include -#include -// #define CODEC_HOST +#define CODEC_MAX_CONTEXT 10 /* * Codec Device Structures */ typedef struct _SVCodecParam { - uint32_t func_num; + uint32_t apiIndex; + uint32_t ctxIndex; uint32_t in_args[20]; uint32_t ret_args; + uint32_t mmapOffset; + uint32_t fileIndex; } SVCodecParam; +typedef struct _SVCodecContext { + AVCodecContext *pAVCtx; + AVFrame *pFrame; + AVCodecParserContext *pParserCtx; + uint8_t *pParserBuffer; + bool bParser; + bool bUsed; + uint32_t nFileValue; +} SVCodecContext; typedef struct _SVCodecState { PCIDevice dev; + SVCodecContext ctxArr[CODEC_MAX_CONTEXT]; SVCodecParam codecParam; + pthread_mutex_t codec_mutex; int mmioIndex; - - uint8_t* vaddr; - ram_addr_t vram_offset; - uint32_t mem_addr; uint32_t mmio_addr; - int index; + uint8_t* vaddr; + MemoryRegion vram; + MemoryRegion mmio; } SVCodecState; enum { - FUNC_NUM = 0x00, - IN_ARGS = 0x04, - RET_STR = 0x08, + CODEC_API_INDEX = 0x00, + CODEC_IN_PARAM = 0x04, + CODEC_RETURN_VALUE = 0x08, + CODEC_CONTEXT_INDEX = 0x0c, + CODEC_MMAP_OFFSET = 0x10, + CODEC_FILE_INDEX = 0x14, + CODEC_CLOSED = 0x18, }; enum { EMUL_AV_REGISTER_ALL = 1, - EMUL_AVCODEC_OPEN, - EMUL_AVCODEC_CLOSE, EMUL_AVCODEC_ALLOC_CONTEXT, EMUL_AVCODEC_ALLOC_FRAME, + EMUL_AVCODEC_OPEN, + EMUL_AVCODEC_CLOSE, EMUL_AV_FREE_CONTEXT, EMUL_AV_FREE_FRAME, EMUL_AV_FREE_PALCTRL, @@ -87,6 +103,8 @@ enum { EMUL_AVCODEC_FLUSH_BUFFERS, EMUL_AVCODEC_DECODE_VIDEO, EMUL_AVCODEC_ENCODE_VIDEO, + EMUL_AVCODEC_DECODE_AUDIO, + EMUL_AVCODEC_ENCODE_AUDIO, EMUL_AV_PICTURE_COPY, EMUL_AV_PARSER_INIT, EMUL_AV_PARSER_PARSE, @@ -97,50 +115,61 @@ enum { /* * Codec Device APIs */ -int pci_codec_init (PCIBus *bus); -static int codec_operate(uint32_t value, SVCodecState *opaque); +int codec_init (PCIBus *bus); + +uint64_t codec_read (void *opaque, target_phys_addr_t addr, unsigned size); + +void codec_write (void *opaque, target_phys_addr_t addr, uint64_t value, unsigned size); + +static int codec_operate(uint32_t apiIndex, uint32_t ctxIndex, SVCodecState *state); /* - * FFMPEG APIs + * Codec Helper APIs */ +static void qemu_parser_init (SVCodecState *s, int ctxIndex); -void qemu_parser_init (void); +static void qemu_restore_context (AVCodecContext *dst, AVCodecContext *src); + +/* + * FFMPEG APIs + */ -void qemu_restore_context (AVCodecContext *dst, AVCodecContext *src); +static void qemu_av_register_all (void); -void qemu_av_register_all (void); +static int qemu_avcodec_open (SVCodecState *s, int ctxIndex); -int qemu_avcodec_open (SVCodecState *s); +static int qemu_avcodec_close (SVCodecState *s, int ctxIndex); -int qemu_avcodec_close (SVCodecState *s); +static void qemu_avcodec_alloc_context (SVCodecState *s); -void qemu_avcodec_alloc_context (void); +static void qemu_avcodec_alloc_frame (SVCodecState *s); -void qemu_avcodec_alloc_frame (void); +static void qemu_av_free_context (SVCodecState* s, int ctxIndex); -void qemu_av_free_context (void); +static void qemu_av_free_picture (SVCodecState* s, int ctxIndex); -void qemu_av_free_picture (void); +static void qemu_av_free_palctrl (SVCodecState* s, int ctxIndex); -void qemu_av_free_palctrl (void); +static void qemu_av_free_extradata (SVCodecState* s, int ctxIndex); -void qemu_av_free_extradata (void); +static void qemu_avcodec_flush_buffers (SVCodecState *s, int ctxIndex); -void qemu_avcodec_flush_buffers (void); +static int qemu_avcodec_decode_video (SVCodecState *s, int ctxIndex); -int qemu_avcodec_decode_video (SVCodecState *s); +static int qemu_avcodec_encode_video (SVCodecState *s, int ctxIndex); -int qemu_avcodec_encode_video (SVCodecState *s); +static int qemu_avcodec_decode_audio (SVCodecState *s, int ctxIndex); -void qemu_av_picture_copy (SVCodecState *s); +static int qemu_avcodec_encode_audio (SVCodecState *s, int ctxIndex); -void qemu_av_parser_init (SVCodecState *s); +static void qemu_av_picture_copy (SVCodecState *s, int ctxIndex); -int qemu_av_parser_parse (SVCodecState *s); +static void qemu_av_parser_init (SVCodecState *s, int ctxIndex); -void qemu_av_parser_close (void); +static int qemu_av_parser_parse (SVCodecState *s, int ctxIndex); -int qemu_avcodec_get_buffer (AVCodecContext *context, AVFrame *picture); +static void qemu_av_parser_close (SVCodecState *s, int ctxIndex); -void qemu_avcodec_release_buffer (AVCodecContext *context, AVFrame *picture); +static int qemu_avcodec_get_buffer (AVCodecContext *context, AVFrame *picture); +static void qemu_avcodec_release_buffer (AVCodecContext *context, AVFrame *picture);