22#include <pjlib-util.h>
58#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
63#define THIS_FILE "aviplay.c"
65static const char *desc =
72" Demonstrate how to play a AVI file. \n"
76" aviplay FILE.AVI \n";
85} codec_fmts[] = {{PJMEDIA_FORMAT_MJPEG,
"mjpeg",
87 {PJMEDIA_FORMAT_H263 ,
"h263" ,
89 {PJMEDIA_FORMAT_MPEG4,
"mp4v"},
90 {PJMEDIA_FORMAT_H264 ,
"h264"}
93typedef struct avi_port_t
101typedef struct codec_port_data_t
114 avi_port_t *ap = (avi_port_t *)user_data;
116 switch (event->
type) {
121 if (ap->is_running) {
132 ap->is_running = !ap->is_running;
145 codec_port_data_t *
port_data = (codec_port_data_t*)port->port_data.
pdata;
151 enc_frame.size =
port_data->enc_buf_size;
160 (
unsigned)frame->
size, &enc_frame);
163 frame->
size = frame_size;
174 (
unsigned)frame->
size, frame);
180 pj_perror(3, THIS_FILE, status,
"codec_get_frame() error");
184static int aviplay(
pj_pool_t *pool,
const char *fname)
197 codec_port_data_t codec_port_data;
200 pj_bzero(&avi_port,
sizeof(avi_port));
232 if (!vfi || vfi->
bpp == 0) {
235 unsigned info_cnt = 1, i, k;
243 struct codec_fmt *codecp = NULL;
246 for (i = 0; i <
sizeof(codec_fmts)/
sizeof(codec_fmts[0]); i++) {
247 if (vid_port->
info.
fmt.
id == codec_fmts[i].pjmedia_id) {
248 codecp = &codec_fmts[i];
253 rc = 242;
goto on_return;
255 pj_cstr(&codec_id_st, codecp->codec_id);
269 for (k=0; k<rdr_info.
fmt_cnt; ++k) {
302 pj_bzero(&codec_port,
sizeof(codec_port));
308 pj_bzero(&codec_port_data,
sizeof(codec_port_data));
309 codec_port_data.codec =
codec;
310 codec_port_data.src_port = vid_port;
311 codec_port_data.enc_buf = enc_buf;
312 codec_port_data.enc_buf_size = enc_buf_size;
315 codec_port.port_data.
pdata = &codec_port_data;
318 if (codecp->need_conversion) {
323 conv_param.
dst.
id = codecp->dst_fmt;
327 &codec_port_data.conv));
372 avi_port.snd_port = snd_port;
373 avi_port.vid_port = renderer;
394 while (!avi_port.is_quitting) {
426static void sig_handler(
int sig)
439static int main_func(
int argc,
char *argv[])
447 puts(
"Error: filename required");
453 signal(SIGINT, sig_handler);
454 signal(SIGTERM, sig_handler);
479 app_perror(THIS_FILE,
"Video init failed", status);
490#if defined(PJMEDIA_HAS_OPENH264_CODEC) && PJMEDIA_HAS_OPENH264_CODEC != 0
498#if PJMEDIA_HAS_FFMPEG_VID_CODEC
506 rc = aviplay(pool, argv[1]);
518#if PJMEDIA_HAS_FFMPEG_VID_CODEC
521#if defined(PJMEDIA_HAS_OPENH264_CODEC) && PJMEDIA_HAS_OPENH264_CODEC != 0
545int main(
int argc,
char *argv[])
552int main(
int argc,
char *argv[])
556 puts(
"Error: this sample requires video capability (PJMEDIA_HAS_VIDEO == 1)");
Format conversion utilities.
pj_status_t pjmedia_snd_port_connect(pjmedia_snd_port *snd_port, pjmedia_port *port)
pjmedia_clock_src * pjmedia_snd_port_get_clock_src(pjmedia_snd_port *snd_port, pjmedia_dir dir)
pj_status_t pjmedia_snd_port_disconnect(pjmedia_snd_port *snd_port)
pj_status_t pjmedia_snd_port_create_player(pj_pool_t *pool, int index, unsigned clock_rate, unsigned channel_count, unsigned samples_per_frame, unsigned bits_per_sample, unsigned options, pjmedia_snd_port **p_port)
pj_status_t pjmedia_snd_port_destroy(pjmedia_snd_port *snd_port)
pjmedia_aud_stream * pjmedia_snd_port_get_snd_stream(pjmedia_snd_port *snd_port)
struct pjmedia_snd_port pjmedia_snd_port
Definition: sound_port.h:145
int pj_run_app(pj_main_func_ptr main_func, int argc, char *argv[], unsigned flags)
pj_status_t pj_init(void)
void pj_caching_pool_destroy(pj_caching_pool *ch_pool)
void pj_caching_pool_init(pj_caching_pool *ch_pool, const pj_pool_factory_policy *policy, pj_size_t max_capacity)
pj_pool_factory_policy pj_pool_factory_default_policy
void * pj_pool_alloc(pj_pool_t *pool, pj_size_t size)
pj_pool_t * pj_pool_create(pj_pool_factory *factory, const char *name, pj_size_t initial_size, pj_size_t increment_size, pj_pool_callback *callback)
void pj_pool_release(pj_pool_t *pool)
const pj_str_t * pj_cstr(pj_str_t *str, const char *s)
void pj_bzero(void *dst, pj_size_t size)
pj_status_t pj_thread_sleep(unsigned msec)
#define PJ_ASSERT_RETURN(expr, retval)
#define PJ_UNUSED_ARG(arg)
void pj_perror(int log_level, const char *sender, pj_status_t status, const char *title_fmt,...)
pj_status_t pjmedia_vid_dev_default_param(pj_pool_t *pool, pjmedia_vid_dev_index id, pjmedia_vid_dev_param *param)
pj_status_t pjmedia_vid_dev_subsys_shutdown(void)
pj_status_t pjmedia_vid_dev_subsys_init(pj_pool_factory *pf)
pj_status_t pjmedia_vid_dev_get_info(pjmedia_vid_dev_index id, pjmedia_vid_dev_info *info)
@ PJMEDIA_VID_DEV_WND_RESIZABLE
Definition: pjmedia/videodev.h:137
@ PJMEDIA_VID_DEV_WND_BORDER
Definition: pjmedia/videodev.h:132
@ PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS
Definition: pjmedia/videodev.h:298
@ PJMEDIA_VID_DEFAULT_RENDER_DEV
Definition: pjmedia/videodev.h:155
Definition: confbench.c:135