问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在Android用FFmpeg+SDL2.0解码图像线程

发布网友 发布时间:2022-04-22 05:57

我来回答

1个回答

热心网友 时间:2022-04-11 21:02

创建一个VideoPicture结构体用来保存解码出来的图像。

/*
* SDL_Lesson.c
*
* Created on: Aug 12, 2014
* Author: clarck
*/
#include <jni.h>
#include <android/native_window_jni.h>
#include "SDL.h"
#include "SDL_thread.h"
#include "SDL_events.h"
#include "../include/logger.h"
#include "../ffmpeg/include/libavcodec/avcodec.h"
#include "../ffmpeg/include/libavformat/avformat.h"
#include "../ffmpeg/include/libavutil/pixfmt.h"
#include "../ffmpeg/include/libswscale/swscale.h"
#include "../ffmpeg/include/libswresample/swresample.h"

#define SDL_AUDIO_BUFFER_SIZE 1024

#define MAX_AUDIO_SIZE (5 * 16 * 1024)
#define MAX_VIDEO_SIZE (5 * 256 * 1024)

#define FF_ALLOC_EVENT (SDL_USEREVENT)
#define FF_REFRESH_EVENT (SDL_USEREVENT + 1)
#define FF_QUIT_EVENT (SDL_USEREVENT + 2)

#define VIDEO_PICTURE_QUEUE_SIZE 1
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio

typedef struct PacketQueue {
AVPacketList *first_pkt, *last_pkt;
int nb_packets;
int size;
SDL_mutex *mutex;
SDL_cond *cond;
} PacketQueue;

typedef struct VideoPicture {
SDL_Window *screen;
SDL_Renderer *renderer;
SDL_Texture *bmp;

AVFrame* rawdata;
int width, height; /*source height & width*/
int allocated;
} VideoPicture;

typedef struct VideoState {
char filename[1024];
AVFormatContext *ic;
int videoStream, audioStream;
AVStream *audio_st;
AVFrame *audio_frame;
PacketQueue audioq;
unsigned int audio_buf_size;
unsigned int audio_buf_index;
AVPacket audio_pkt;
uint8_t *audio_pkt_data;
int audio_pkt_size;
uint8_t *audio_buf;
DECLARE_ALIGNED(16,uint8_t,audio_buf2) [AVCODEC_MAX_AUDIO_FRAME_SIZE * 4];
enum AVSampleFormat audio_src_fmt;
enum AVSampleFormat audio_tgt_fmt;
int audio_src_channels;
int audio_tgt_channels;
int64_t audio_src_channel_layout;
int64_t audio_tgt_channel_layout;
int audio_src_freq;
int audio_tgt_freq;
struct SwrContext *swr_ctx;

AVStream *video_st;
PacketQueue videoq;

VideoPicture pictq[VIDEO_PICTURE_QUEUE_SIZE];
int pictq_size, pictq_rindex, pictq_windex;
SDL_mutex *pictq_mutex;
SDL_cond *pictq_cond;

SDL_Thread *parse_tid;
SDL_Thread *audio_tid;
SDL_Thread *video_tid;

AVIOContext *io_ctx;
struct SwsContext *sws_ctx;

int quit;
} VideoState;

VideoState *global_video_state;
如何在Android用FFmpeg+SDL2.0解码声音

一、创建一个VideoPicture结构体用来保存解码出来的图像。二、添加数据队列的初始化、添加以及读取的函数。三、audio_decode_frame():解码音频 四、audio_callback(): 回调函数,向SDL缓冲区填充数据 五、创建视频刷新相关的函数:schedule_refresh():它主要的作用是告诉系统指定的毫秒数后推FF_REFRESH_...

ffmpeg 基本用法

2、FFmpeg用libavformat包调用解复用器(demuxers)来读取输入文件中被编码的数据包(packets),如果有多个输入文件,FFmpeg以有效输入流的最小时间戳来同步, 3、然后解码器(decoder)从已编码的数据包中产生未被压缩的帧(frame),在那之后调用可选的过滤器。 4、这些帧被传递到编码器,编码器会产生新的编码包 5、把新...

无法解码 URL 处的图像 图像编码解码是谁的功能 图像编解码流程 基于gpu实现图像解码 图像解码 原生解码没图像 图像解码芯片 图像解码器 浏览器图像解码
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
四平市博物馆简介 ...我的电脑速度65.0Mpbds,另一个人却150.0Mpbs,怎么让我的速度... 四平战役纪念馆新馆基本概况 信用卡开户账号是什么 宽带连接处写的网速是100mpbs能说名网速是多大的吗 网速Mpbs如何+快?谢谢了,大神帮忙啊 网速Mpbs如何+快? ...选文第二自然段中民族生命的进程其经历亦复如是中的是指代什么_百度... 想ipod的mp3 不知道哪种类型的哪种型号比较好 卷面时间是什么意思? 有没有100学以内的备用机 学生党买备用机求200左右的智能手机 我想买部备用机带去学校,选什么好。价格1000左右。 茶杯上的茶垢怎么处理? 在校学生想买个备用机,不知道是选择iphone5s还是... 茶叶陶瓷换一种茶叶怎么新怎么清理那个陶瓷啊 学生买备用机是不是浪费 除了DirectShow还有什么能写视频播放器? FFMPEG+SD... 怎么去除盖碗上的茶垢 巧用小苏打去茶垢 学生党 求备用机推荐 Qt中如何使用ffmpeg实现转码和播放 陶瓷茶具怎么清洁与保养 如何让ffmpeg从SDL1.*转到SDL2.*上 学生党想买个备用机 怎么实现的SDL播放画面嵌入MFC控件中去的 scratch少儿编程7,图形化编程,培养儿童编程思维 备用机都是用来干嘛的 如何在Android用FFmpeg+SDL2.0之同步音频 听说图形化编程并不是正规的编程语言,那孩子如果... 学生党有必要买备用机吗 新买的陶瓷茶具怎么清洗 上学交了个备用机,没有卡,如果老师要查怎么办? 有人用过松能电脑升降台吗?怎么样 linux 下怎样使用ffmpeg sdl开发程序 请教ffmpeg在centeOS 64位下的编译问题 2021年买哪个苹果手机做备用机最适合? 一套台电的会议系统,其中投影升降机只能上不能下... ffmpeg编译视频加上字幕 怎么抓学生备用机 如何在Android用FFmpeg+SDL2.0解码声音 如果我交备用机的话,用一个什么理由好呢? 电脑验光仪升降台升不了怎么办 C++可以用ffmpeg开发音视频软件吗?怎么用?有什么... 华为P30超级省电时间多长 学生适合有备用机吗? 多功能自动升降电脑桌上升按钮失灵了怎么办?电源... 不知道华为p7电池续航时间咋样? 华为p30超级省电只有十几小时? 华为p7电量怎么样? 买个台式机电脑桌和可升降的电脑椅,大家有什么好...