mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-23 08:09:58 +01:00
support more codecs
git-svn-id: svn://code.dyne.org/veejay/trunk@650 eb8d1916-c9e9-0310-b8de-cf0c9472ead5
This commit is contained in:
@@ -759,28 +759,9 @@ avi_t *AVI_open_input_file(char *filename, int getIndex, int mmap_size)
|
|||||||
AVI->video_strn = num_stream;
|
AVI->video_strn = num_stream;
|
||||||
vids_strh_seen = 1;
|
vids_strh_seen = 1;
|
||||||
|
|
||||||
/* setup FFMPEG codec */
|
|
||||||
if( strncasecmp("mjpg", AVI->compressor, 4) == 0)
|
|
||||||
AVI->ffmpeg_codec_id = CODEC_ID_MJPEG;
|
|
||||||
if( strncasecmp("jpeg", AVI->compressor, 4) == 0)
|
|
||||||
AVI->ffmpeg_codec_id = CODEC_ID_MJPEG;
|
|
||||||
if( strncasecmp("mjpa", AVI->compressor, 4) == 0)
|
|
||||||
AVI->ffmpeg_codec_id = CODEC_ID_MJPEG;
|
|
||||||
if( strncasecmp("dvsd", AVI->compressor, 4) == 0)
|
|
||||||
AVI->ffmpeg_codec_id = CODEC_ID_DVVIDEO;
|
|
||||||
if( strncasecmp("dv", AVI->compressor, 2) == 0)
|
|
||||||
AVI->ffmpeg_codec_id = CODEC_ID_DVVIDEO;
|
|
||||||
if( strncasecmp("mp4v",AVI->compressor,4) == 0)
|
|
||||||
AVI->ffmpeg_codec_id = CODEC_ID_MPEG4;
|
|
||||||
if( strncasecmp("div3", AVI->compressor,4) == 0)
|
|
||||||
AVI->ffmpeg_codec_id = CODEC_ID_MSMPEG4V3;
|
|
||||||
if( strncasecmp("iyuv", AVI->compressor,4) == 0)
|
|
||||||
AVI->ffmpeg_codec_id = 999;
|
|
||||||
if( strncasecmp("i420", AVI->compressor,4) == 0)
|
|
||||||
AVI->ffmpeg_codec_id = 999;
|
|
||||||
if( strncasecmp("yv16", AVI->compressor,4) == 0)
|
|
||||||
AVI->ffmpeg_codec_id = 998;
|
|
||||||
|
|
||||||
|
AVI->ffmpeg_codec_id =
|
||||||
|
vj_el_get_decoder_from_fourcc( AVI->compressor );
|
||||||
lasttag = 1; /* vids */
|
lasttag = 1; /* vids */
|
||||||
}
|
}
|
||||||
else if (strncasecmp ((char*)hdrl_data+i,"auds",4) ==0 && ! auds_strh_seen)
|
else if (strncasecmp ((char*)hdrl_data+i,"auds",4) ==0 && ! auds_strh_seen)
|
||||||
|
|||||||
@@ -418,6 +418,16 @@ lav_file_t *lav_open_output_file(char *filename, char format,
|
|||||||
(interlaced ? QUICKTIME_MJPA : QUICKTIME_JPEG));
|
(interlaced ? QUICKTIME_MJPA : QUICKTIME_JPEG));
|
||||||
if (asize)
|
if (asize)
|
||||||
quicktime_set_audio(lav_fd->qt_fd, achans, arate, asize, QUICKTIME_TWOS);
|
quicktime_set_audio(lav_fd->qt_fd, achans, arate, asize, QUICKTIME_TWOS);
|
||||||
|
|
||||||
|
int has_kf = quicktime_has_keyframes( lav_fd->qt_fd, 0 );
|
||||||
|
char *copyright = quicktime_get_copyright( lav_fd->qt_fd );
|
||||||
|
char *name = quicktime_get_name( lav_fd->qt_fd );
|
||||||
|
char *info = quicktime_get_info( lav_fd->qt_fd );
|
||||||
|
|
||||||
|
veejay_msg(VEEJAY_MSG_DEBUG,
|
||||||
|
"(C) %s by %s, %s, has keyframes = %d", copyright,name,info,has_kf );
|
||||||
|
|
||||||
|
|
||||||
return lav_fd;
|
return lav_fd;
|
||||||
#else
|
#else
|
||||||
internal_error = ERROR_FORMAT;
|
internal_error = ERROR_FORMAT;
|
||||||
@@ -836,29 +846,7 @@ int lav_video_compressor_type(lav_file_t *lav_file)
|
|||||||
if(lav_file->format == 'q')
|
if(lav_file->format == 'q')
|
||||||
{
|
{
|
||||||
const char *compressor = quicktime_video_compressor(lav_file->qt_fd,0);
|
const char *compressor = quicktime_video_compressor(lav_file->qt_fd,0);
|
||||||
//@ prrff
|
return vj_el_get_decoder_from_fourcc( compressor );
|
||||||
if( (strncasecmp("mjpg", compressor, 4) == 0 || strncasecmp("jpeg", compressor, 4) == 0) ||
|
|
||||||
strncasecmp("mjpa", compressor, 4) == 0) {
|
|
||||||
return CODEC_ID_MJPEG;
|
|
||||||
} else if( (strncasecmp("dvsd", compressor, 4) == 0) || strncasecmp("dv", compressor,2) == 0 ) {
|
|
||||||
return CODEC_ID_DVVIDEO;
|
|
||||||
} else if( strncasecmp("mp4v",compressor,4) == 0) {
|
|
||||||
return CODEC_ID_MPEG4;
|
|
||||||
} else if( strncasecmp("div3", compressor,4) == 0) {
|
|
||||||
return CODEC_ID_MSMPEG4V3;
|
|
||||||
} else if( strncasecmp("iyuv", compressor,4) == 0 || strncasecmp( "i420",compressor,4)==0) {
|
|
||||||
return 999;
|
|
||||||
} else if( strncasecmp("yv16", compressor,4) == 0) {
|
|
||||||
return 999;
|
|
||||||
} else if (strncasecmp("svq1",compressor,4) == 0 ) {
|
|
||||||
return CODEC_ID_SVQ1;
|
|
||||||
} else if (strncasecmp("rpza", compressor,4) == 0 ) {
|
|
||||||
return CODEC_ID_RPZA;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// return quicktime_video_compressor(lav_file->qt_fd,0);
|
// return quicktime_video_compressor(lav_file->qt_fd,0);
|
||||||
#endif
|
#endif
|
||||||
@@ -1216,12 +1204,17 @@ lav_file_t *lav_open_input_file(char *filename, int mmap_size)
|
|||||||
}
|
}
|
||||||
else if ( lav_fd->avi_fd && AVI_errno == 0 )
|
else if ( lav_fd->avi_fd && AVI_errno == 0 )
|
||||||
{
|
{
|
||||||
|
veejay_msg(VEEJAY_MSG_DEBUG,
|
||||||
|
"\tFile is AVI" );
|
||||||
ret =1;
|
ret =1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int alt = 0;
|
||||||
|
|
||||||
if(lav_fd->avi_fd)
|
if(lav_fd->avi_fd)
|
||||||
{
|
{
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
alt = 1;
|
||||||
lav_fd->format = 'a';
|
lav_fd->format = 'a';
|
||||||
lav_fd->has_audio = (AVI_audio_bits(lav_fd->avi_fd)>0 &&
|
lav_fd->has_audio = (AVI_audio_bits(lav_fd->avi_fd)>0 &&
|
||||||
AVI_audio_format(lav_fd->avi_fd)==WAVE_FORMAT_PCM);
|
AVI_audio_format(lav_fd->avi_fd)==WAVE_FORMAT_PCM);
|
||||||
@@ -1232,10 +1225,10 @@ lav_file_t *lav_open_input_file(char *filename, int mmap_size)
|
|||||||
if(lav_fd) free(lav_fd);
|
if(lav_fd) free(lav_fd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
veejay_msg(VEEJAY_MSG_DEBUG, "\tFOURCC is %s", video_comp );
|
||||||
}
|
}
|
||||||
else if( AVI_errno==AVI_ERR_NO_AVI || !lav_fd->avi_fd)
|
else if( AVI_errno==AVI_ERR_NO_AVI || !lav_fd->avi_fd)
|
||||||
{
|
{
|
||||||
int alt = 0;
|
|
||||||
#ifdef HAVE_LIBQUICKTIME
|
#ifdef HAVE_LIBQUICKTIME
|
||||||
if(quicktime_check_sig(filename))
|
if(quicktime_check_sig(filename))
|
||||||
{
|
{
|
||||||
@@ -1254,7 +1247,8 @@ lav_file_t *lav_open_input_file(char *filename, int mmap_size)
|
|||||||
lav_fd->avi_fd = NULL;
|
lav_fd->avi_fd = NULL;
|
||||||
lav_fd->format = 'q';
|
lav_fd->format = 'q';
|
||||||
video_comp = quicktime_video_compressor(lav_fd->qt_fd,0);
|
video_comp = quicktime_video_compressor(lav_fd->qt_fd,0);
|
||||||
|
veejay_msg(VEEJAY_MSG_DEBUG,"\tFile has fourcc '%s'",
|
||||||
|
video_comp );
|
||||||
/* We want at least one video track */
|
/* We want at least one video track */
|
||||||
if (quicktime_video_tracks(lav_fd->qt_fd) < 1)
|
if (quicktime_video_tracks(lav_fd->qt_fd) < 1)
|
||||||
{
|
{
|
||||||
@@ -1322,6 +1316,8 @@ lav_file_t *lav_open_input_file(char *filename, int mmap_size)
|
|||||||
video_comp = strdup( "PICT" );
|
video_comp = strdup( "PICT" );
|
||||||
ret = 1;
|
ret = 1;
|
||||||
alt = 1;
|
alt = 1;
|
||||||
|
veejay_msg(VEEJAY_MSG_DEBUG,
|
||||||
|
"\tLoaded image file");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
veejay_msg(VEEJAY_MSG_DEBUG,
|
veejay_msg(VEEJAY_MSG_DEBUG,
|
||||||
@@ -1348,6 +1344,10 @@ lav_file_t *lav_open_input_file(char *filename, int mmap_size)
|
|||||||
lav_fd->format = 'b';
|
lav_fd->format = 'b';
|
||||||
lav_fd->has_audio = 0;
|
lav_fd->has_audio = 0;
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
alt = 1;
|
||||||
|
veejay_msg(VEEJAY_MSG_DEBUG,
|
||||||
|
"RAW DV file '%s'",
|
||||||
|
video_comp );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1356,7 +1356,7 @@ lav_file_t *lav_open_input_file(char *filename, int mmap_size)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ret == 0 || video_comp == NULL)
|
if(ret == 0 || video_comp == NULL || alt == 0)
|
||||||
{
|
{
|
||||||
free(lav_fd);
|
free(lav_fd);
|
||||||
internal_error = ERROR_FORMAT; /* Format not recognized */
|
internal_error = ERROR_FORMAT; /* Format not recognized */
|
||||||
@@ -1379,7 +1379,10 @@ lav_file_t *lav_open_input_file(char *filename, int mmap_size)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(strncasecmp(video_comp, "div3",4)==0)
|
|
||||||
|
if( strncasecmp(video_comp, "div3",4)==0 ||
|
||||||
|
strncasecmp(video_comp, "mp43",4)==0 ||
|
||||||
|
strncasecmp(video_comp, "mp42",4)==0 )
|
||||||
{
|
{
|
||||||
lav_fd->MJPG_chroma = CHROMA420;
|
lav_fd->MJPG_chroma = CHROMA420;
|
||||||
lav_fd->interlacing = LAV_NOT_INTERLACED;
|
lav_fd->interlacing = LAV_NOT_INTERLACED;
|
||||||
@@ -1387,30 +1390,55 @@ lav_file_t *lav_open_input_file(char *filename, int mmap_size)
|
|||||||
return lav_fd;
|
return lav_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strncasecmp(video_comp,"mp4v",4)==0)
|
if( strncasecmp(video_comp,"mp4v",4 )==0 ||
|
||||||
|
strncasecmp(video_comp,"divx",4 ) == 0 ||
|
||||||
|
strncasecmp(video_comp,"xvid",4 ) == 0 ||
|
||||||
|
strncasecmp(video_comp,"dxsd",4 ) == 0 ||
|
||||||
|
strncasecmp(video_comp,"mp4s",4 ) == 0 ||
|
||||||
|
strncasecmp(video_comp,"m4s2",4 ) == 0 )
|
||||||
{
|
{
|
||||||
|
lav_fd->format = 'D';
|
||||||
lav_fd->MJPG_chroma = CHROMA420;
|
lav_fd->MJPG_chroma = CHROMA420;
|
||||||
lav_fd->interlacing = LAV_NOT_INTERLACED;
|
lav_fd->interlacing = LAV_NOT_INTERLACED;
|
||||||
veejay_msg(VEEJAY_MSG_WARNING, "Playing MPEG4 Video (Every frame should be an intra frame)");
|
veejay_msg(VEEJAY_MSG_WARNING, "Playing MPEG4 Video (Every frame should be an intra frame)");
|
||||||
return lav_fd;
|
return lav_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check compressor, no further action if not Motion JPEG/DV */
|
if ( strncasecmp(video_comp,"iyuv",4)==0 ||
|
||||||
if (strncasecmp(video_comp,"iyuv",4)==0)
|
strncasecmp(video_comp,"i420",4)==0)
|
||||||
{
|
{
|
||||||
lav_fd->MJPG_chroma = CHROMA420;
|
lav_fd->MJPG_chroma = CHROMA420;
|
||||||
lav_fd->format = 'Y';
|
lav_fd->format = 'Y';
|
||||||
lav_fd->interlacing = LAV_NOT_INTERLACED;
|
lav_fd->interlacing = LAV_NOT_INTERLACED;
|
||||||
return lav_fd;
|
return lav_fd;
|
||||||
}
|
}
|
||||||
if (strncasecmp(video_comp,"yv16",4)==0)
|
|
||||||
|
if ( strncasecmp(video_comp,"yv16",4)==0 ||
|
||||||
|
strncasecmp(video_comp,"i422",4)==0 ||
|
||||||
|
strncasecmp(video_comp,"hfyu",4)==0)
|
||||||
{
|
{
|
||||||
lav_fd->MJPG_chroma = CHROMA422;
|
lav_fd->MJPG_chroma = CHROMA422;
|
||||||
lav_fd->format = 'P';
|
lav_fd->format = 'P';
|
||||||
lav_fd->interlacing = LAV_NOT_INTERLACED;
|
lav_fd->interlacing = LAV_NOT_INTERLACED;
|
||||||
return lav_fd;
|
return lav_fd;
|
||||||
}
|
}
|
||||||
if (strncasecmp(video_comp,"dvsd",4)==0 || strncasecmp(video_comp,"dv",2)==0)
|
|
||||||
|
if( strncasecmp(video_comp, "avc1", 4 ) == 0 ||
|
||||||
|
strncasecmp(video_comp, "h264", 4 ) == 0 ||
|
||||||
|
strncasecmp(video_comp, "x264", 4 ) == 0 ||
|
||||||
|
strncasecmp(video_comp, "davc", 4 ) == 0 )
|
||||||
|
{
|
||||||
|
lav_fd->MJPG_chroma = CHROMA420;
|
||||||
|
lav_fd->interlacing = LAV_NOT_INTERLACED;
|
||||||
|
return lav_fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( strncasecmp(video_comp,"dvsd",4)==0 ||
|
||||||
|
strncasecmp(video_comp,"dvcp",4) ==0 ||
|
||||||
|
strncasecmp(video_comp,"dxsd",4) == 0 ||
|
||||||
|
strncasecmp(video_comp, "dvp",3) == 0 ||
|
||||||
|
strncasecmp(video_comp, "dvhd",4) == 0 ||
|
||||||
|
strncasecmp(video_comp, "dv",2 ) == 0)
|
||||||
{
|
{
|
||||||
int gw = lav_video_height( lav_fd );
|
int gw = lav_video_height( lav_fd );
|
||||||
if( gw == 480 )
|
if( gw == 480 )
|
||||||
@@ -1422,13 +1450,36 @@ lav_file_t *lav_open_input_file(char *filename, int mmap_size)
|
|||||||
return lav_fd;
|
return lav_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strncasecmp(video_comp, "mjpg", 4) == 0 || strncasecmp(video_comp,"mjpa",4)==0 ||
|
if( strncasecmp(video_comp, "png", 3 ) == 0 ||
|
||||||
strncasecmp(video_comp, "jpeg", 4) == 0)
|
strncasecmp(video_comp, "mpng",4) == 0 )
|
||||||
|
{
|
||||||
|
lav_fd->MJPG_chroma = CHROMA420;
|
||||||
|
lav_fd->interlacing = LAV_INTER_UNKNOWN;
|
||||||
|
return lav_fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( strncasecmp(video_comp, "svq1", 4 ) == 0 ||
|
||||||
|
strncasecmp(video_comp, "svq3", 4 ) == 0 ||
|
||||||
|
strncasecmp(video_comp, "rpza", 4 ) == 0 ||
|
||||||
|
strncasecmp(video_comp, "cyuv", 4 ) == 0 )
|
||||||
|
{
|
||||||
|
lav_fd->MJPG_chroma = CHROMA420;
|
||||||
|
lav_fd->interlacing = LAV_INTER_UNKNOWN;
|
||||||
|
return lav_fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( strncasecmp(video_comp,"mjpg", 4) == 0 ||
|
||||||
|
strncasecmp(video_comp,"mjpa", 4) == 0 ||
|
||||||
|
strncasecmp(video_comp,"jpeg", 4) == 0 ||
|
||||||
|
strncasecmp(video_comp,"mjpb" ,4) == 0 ||
|
||||||
|
strncasecmp(video_comp,"sp5x", 4) == 0 ||
|
||||||
|
strncasecmp(video_comp,"jpgl", 4) == 0 ||
|
||||||
|
strncasecmp(video_comp , "jfif", 4 ) == 0 ||
|
||||||
|
strncasecmp(video_comp, "dmb1", 4)==0 )
|
||||||
{
|
{
|
||||||
lav_fd->MJPG_chroma = CHROMA420;
|
lav_fd->MJPG_chroma = CHROMA420;
|
||||||
lav_fd->interlacing = LAV_INTER_UNKNOWN;
|
lav_fd->interlacing = LAV_INTER_UNKNOWN;
|
||||||
lav_fd->is_MJPG = 1;
|
lav_fd->is_MJPG = 1;
|
||||||
// return lav_fd;
|
|
||||||
|
|
||||||
/* Make some checks on the video source, we read the first frame for that */
|
/* Make some checks on the video source, we read the first frame for that */
|
||||||
|
|
||||||
|
|||||||
@@ -166,6 +166,10 @@ dv_t *rawdv_open_input_file(const char *filename, int mmap_size)
|
|||||||
dv->buf = (uint8_t*) vj_malloc(sizeof(uint8_t*) * dv->size);
|
dv->buf = (uint8_t*) vj_malloc(sizeof(uint8_t*) * dv->size);
|
||||||
dv->offset = 0;
|
dv->offset = 0;
|
||||||
|
|
||||||
|
veejay_msg(VEEJAY_MSG_DEBUG,
|
||||||
|
"DV properties %d x %d, %f, %d frames, %d sampling",
|
||||||
|
dv->width,dv->height, dv->fps, dv->num_frames,
|
||||||
|
dv->fmt );
|
||||||
|
|
||||||
dv_decoder_free( decoder );
|
dv_decoder_free( decoder );
|
||||||
|
|
||||||
|
|||||||
@@ -151,14 +151,14 @@ static vj_encoder *vj_avcodec_new_encoder( int id, editlist *el, int pixel_forma
|
|||||||
}
|
}
|
||||||
|
|
||||||
e->len = el->video_width * el->video_height;
|
e->len = el->video_width * el->video_height;
|
||||||
if(pixel_format == PIX_FMT_YUV422P)
|
if(el->pixel_format == FMT_422)
|
||||||
e->uv_len = e->len / 2;
|
e->uv_len = e->len / 2;
|
||||||
else
|
else
|
||||||
e->uv_len = e->len / 4;
|
e->uv_len = e->len / 4;
|
||||||
e->width = el->video_width;
|
e->width = el->video_width;
|
||||||
e->height = el->video_height;
|
e->height = el->video_height;
|
||||||
|
|
||||||
e->out_fmt = pixel_format;
|
e->out_fmt = el->pixel_format;
|
||||||
e->encoder_id = id;
|
e->encoder_id = id;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -279,7 +279,7 @@ int vj_avcodec_init(editlist *el, int pixel_format)
|
|||||||
if(!el) return 0;
|
if(!el) return 0;
|
||||||
out_pixel_format = pixel_format;
|
out_pixel_format = pixel_format;
|
||||||
|
|
||||||
av_log_set_level( AV_LOG_INFO );
|
//av_log_set_level( AV_LOG_INFO );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -434,7 +434,8 @@ static int vj_avcodec_copy_frame( vj_encoder *av, uint8_t *src[3], uint8_t *dst
|
|||||||
veejay_msg(VEEJAY_MSG_ERROR, "No encoder !!");
|
veejay_msg(VEEJAY_MSG_ERROR, "No encoder !!");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if( (av->encoder_id == 999 && av->out_fmt == PIX_FMT_YUV420P) || (av->encoder_id == 998 && av->out_fmt == PIX_FMT_YUV422P))
|
|
||||||
|
if( (av->encoder_id == 999 && av->out_fmt == FMT_420) || (av->encoder_id == 998 && av->out_fmt == FMT_422))
|
||||||
{
|
{
|
||||||
/* copy */
|
/* copy */
|
||||||
veejay_memcpy( dst, src[0], av->len );
|
veejay_memcpy( dst, src[0], av->len );
|
||||||
@@ -443,13 +444,13 @@ static int vj_avcodec_copy_frame( vj_encoder *av, uint8_t *src[3], uint8_t *dst
|
|||||||
return ( av->len + av->uv_len + av->uv_len );
|
return ( av->len + av->uv_len + av->uv_len );
|
||||||
}
|
}
|
||||||
/* copy by converting */
|
/* copy by converting */
|
||||||
if( av->encoder_id == 999 && av->out_fmt == PIX_FMT_YUV422P)
|
if( av->encoder_id == 999 && av->out_fmt == FMT_422)
|
||||||
{
|
{
|
||||||
yuv422p_to_yuv420p( src, dst, av->width, av->height);
|
yuv422p_to_yuv420p( src, dst, av->width, av->height);
|
||||||
return ( av->len + (av->len/4) + (av->len/4));
|
return ( av->len + (av->len/4) + (av->len/4));
|
||||||
}
|
}
|
||||||
|
|
||||||
if( av->encoder_id == 998 && av->out_fmt == PIX_FMT_YUV420P)
|
if( av->encoder_id == 998 && av->out_fmt == FMT_420)
|
||||||
{
|
{
|
||||||
uint8_t *d[3];
|
uint8_t *d[3];
|
||||||
d[0] = dst;
|
d[0] = dst;
|
||||||
@@ -460,20 +461,6 @@ static int vj_avcodec_copy_frame( vj_encoder *av, uint8_t *src[3], uint8_t *dst
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* if(av->sub_sample)
|
|
||||||
{
|
|
||||||
return(yuv422p_to_yuv420p(src,dst, av->width, av->height ));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
veejay_memcpy( dst, src[0], av->len );
|
|
||||||
veejay_memcpy( dst+(av->len), src[1], av->uv_len );
|
|
||||||
veejay_memcpy( dst+(av->len+av->uv_len) , src[2], av->uv_len);
|
|
||||||
}
|
|
||||||
return (av->len + av->uv_len + av->uv_len);
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
#include "rawdv.h"
|
#include "rawdv.h"
|
||||||
#include "vj-dv.h"
|
#include "vj-dv.h"
|
||||||
#endif
|
#endif
|
||||||
#define MAX_CODECS 32
|
#define MAX_CODECS 40
|
||||||
#define CODEC_ID_YUV420 999
|
#define CODEC_ID_YUV420 999
|
||||||
#define CODEC_ID_YUV422 998
|
#define CODEC_ID_YUV422 998
|
||||||
|
|
||||||
@@ -76,25 +76,54 @@ static struct
|
|||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
int id;
|
int id;
|
||||||
int pix_fmt;
|
|
||||||
} _supported_codecs[] =
|
} _supported_codecs[] =
|
||||||
{
|
{
|
||||||
{ "mjpeg" , CODEC_ID_MJPEG },
|
{ "mjpeg" , CODEC_ID_MJPEG },
|
||||||
{ "mjpegb", CODEC_ID_MJPEGB },
|
{ "mjpegb", CODEC_ID_MJPEGB },
|
||||||
#if LIBAVCODEC_BUILD > 4680
|
|
||||||
{ "sp5x", CODEC_ID_SP5X }, /* sunplus motion jpeg video */
|
|
||||||
#endif
|
|
||||||
#if LIBAVCODEC_BUILD >= 4685
|
|
||||||
{ "theora", CODEC_ID_THEORA },
|
|
||||||
#endif
|
|
||||||
{ "huffyuv", CODEC_ID_HUFFYUV },
|
|
||||||
{ "cyuv", CODEC_ID_CYUV },
|
|
||||||
{ "dv" , CODEC_ID_DVVIDEO },
|
|
||||||
{ "msmpeg4",CODEC_ID_MPEG4 },
|
{ "msmpeg4",CODEC_ID_MPEG4 },
|
||||||
{ "divx" ,CODEC_ID_MSMPEG4V3 },
|
{ "divx" ,CODEC_ID_MSMPEG4V3 },
|
||||||
{ "i420", CODEC_ID_YUV420 },
|
{ "i420", CODEC_ID_YUV420 },
|
||||||
{ "i422", CODEC_ID_YUV422 },
|
{ "i422", CODEC_ID_YUV422 },
|
||||||
|
{ "mjpg", CODEC_ID_MJPEG },
|
||||||
|
{ "mjpb", CODEC_ID_MJPEGB },
|
||||||
|
{ "dmb1", CODEC_ID_MJPEG },
|
||||||
|
{ "jpeg", CODEC_ID_MJPEG },
|
||||||
|
{ "mjpa", CODEC_ID_MJPEG },
|
||||||
|
{ "jfif", CODEC_ID_MJPEG },
|
||||||
|
{ "png", CODEC_ID_PNG },
|
||||||
|
{ "mpng", CODEC_ID_PNG },
|
||||||
|
#if LIBAVCODEC_BUILD > 4680
|
||||||
|
{ "sp5x", CODEC_ID_SP5X }, /* sunplus motion jpeg video */
|
||||||
|
#endif
|
||||||
|
{ "jpgl", CODEC_ID_MJPEG },
|
||||||
|
{ "dvsd", CODEC_ID_DVVIDEO},
|
||||||
|
{ "dvcp", CODEC_ID_DVVIDEO},
|
||||||
|
{ "dv", CODEC_ID_DVVIDEO},
|
||||||
|
{ "dvhd", CODEC_ID_DVVIDEO},
|
||||||
|
{ "dvp", CODEC_ID_DVVIDEO},
|
||||||
|
{ "mp4v", CODEC_ID_MPEG4 },
|
||||||
|
{ "xvid", CODEC_ID_MPEG4 },
|
||||||
|
{ "divx", CODEC_ID_MPEG4 },
|
||||||
|
{ "dxsd", CODEC_ID_MPEG4 },
|
||||||
|
{ "mp4s", CODEC_ID_MPEG4 },
|
||||||
|
{ "m4s2", CODEC_ID_MPEG4 },
|
||||||
|
{ "avc1", CODEC_ID_H264 },
|
||||||
|
{ "h264", CODEC_ID_H264 },
|
||||||
|
{ "x264", CODEC_ID_H264 },
|
||||||
|
{ "davc", CODEC_ID_H264 },
|
||||||
|
{ "div3", CODEC_ID_MSMPEG4V3 },
|
||||||
|
{ "mp43", CODEC_ID_MSMPEG4V3 },
|
||||||
|
{ "mp42", CODEC_ID_MSMPEG4V2 },
|
||||||
|
{ "mpg4", CODEC_ID_MSMPEG4V1 },
|
||||||
|
{ "yuv", CODEC_ID_YUV420 },
|
||||||
|
{ "iyuv", CODEC_ID_YUV420 },
|
||||||
|
{ "i420", CODEC_ID_YUV420 },
|
||||||
|
{ "yv16", CODEC_ID_YUV422 },
|
||||||
|
{ "pict", 0xffff },
|
||||||
|
{ "hfyu", CODEC_ID_HUFFYUV},
|
||||||
|
{ "cyuv", CODEC_ID_CYUV },
|
||||||
{ "svq1", CODEC_ID_SVQ1 },
|
{ "svq1", CODEC_ID_SVQ1 },
|
||||||
|
{ "svq3", CODEC_ID_SVQ3 },
|
||||||
{ "rpza", CODEC_ID_RPZA },
|
{ "rpza", CODEC_ID_RPZA },
|
||||||
{ NULL , 0 },
|
{ NULL , 0 },
|
||||||
};
|
};
|
||||||
@@ -107,9 +136,15 @@ static struct
|
|||||||
{
|
{
|
||||||
{ "mjpg", CODEC_ID_MJPEG },
|
{ "mjpg", CODEC_ID_MJPEG },
|
||||||
{ "mjpb", CODEC_ID_MJPEGB },
|
{ "mjpb", CODEC_ID_MJPEGB },
|
||||||
|
{ "dmb1", CODEC_ID_MJPEG },
|
||||||
{ "jpeg", CODEC_ID_MJPEG },
|
{ "jpeg", CODEC_ID_MJPEG },
|
||||||
{ "mjpa", CODEC_ID_MJPEG },
|
{ "mjpa", CODEC_ID_MJPEG },
|
||||||
{ "jfif", CODEC_ID_MJPEG },
|
{ "jfif", CODEC_ID_MJPEG },
|
||||||
|
{ "png", CODEC_ID_PNG },
|
||||||
|
{ "mpng", CODEC_ID_PNG },
|
||||||
|
#if LIBAVCODEC_BUILD > 4680
|
||||||
|
{ "sp5x", CODEC_ID_SP5X }, /* sunplus motion jpeg video */
|
||||||
|
#endif
|
||||||
{ "jpgl", CODEC_ID_MJPEG },
|
{ "jpgl", CODEC_ID_MJPEG },
|
||||||
{ "dvsd", CODEC_ID_DVVIDEO},
|
{ "dvsd", CODEC_ID_DVVIDEO},
|
||||||
{ "dv", CODEC_ID_DVVIDEO},
|
{ "dv", CODEC_ID_DVVIDEO},
|
||||||
@@ -121,6 +156,10 @@ static struct
|
|||||||
{ "dxsd", CODEC_ID_MPEG4 },
|
{ "dxsd", CODEC_ID_MPEG4 },
|
||||||
{ "mp4s", CODEC_ID_MPEG4 },
|
{ "mp4s", CODEC_ID_MPEG4 },
|
||||||
{ "m4s2", CODEC_ID_MPEG4 },
|
{ "m4s2", CODEC_ID_MPEG4 },
|
||||||
|
{ "avc1", CODEC_ID_H264 },
|
||||||
|
{ "h264", CODEC_ID_H264 },
|
||||||
|
{ "x264", CODEC_ID_H264 },
|
||||||
|
{ "davc", CODEC_ID_H264 },
|
||||||
{ "div3", CODEC_ID_MSMPEG4V3 },
|
{ "div3", CODEC_ID_MSMPEG4V3 },
|
||||||
{ "mp43", CODEC_ID_MSMPEG4V3 },
|
{ "mp43", CODEC_ID_MSMPEG4V3 },
|
||||||
{ "mp42", CODEC_ID_MSMPEG4V2 },
|
{ "mp42", CODEC_ID_MSMPEG4V2 },
|
||||||
@@ -133,10 +172,8 @@ static struct
|
|||||||
{ "hfyu", CODEC_ID_HUFFYUV},
|
{ "hfyu", CODEC_ID_HUFFYUV},
|
||||||
{ "cyuv", CODEC_ID_CYUV },
|
{ "cyuv", CODEC_ID_CYUV },
|
||||||
{ "svq1", CODEC_ID_SVQ1 },
|
{ "svq1", CODEC_ID_SVQ1 },
|
||||||
|
{ "svq3", CODEC_ID_SVQ3 },
|
||||||
{ "rpza", CODEC_ID_RPZA },
|
{ "rpza", CODEC_ID_RPZA },
|
||||||
#if LIBAVCODEC_BUILD > 4680
|
|
||||||
{ "spsx", CODEC_ID_SP5X },
|
|
||||||
#endif
|
|
||||||
{ NULL, 0 }
|
{ NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -183,6 +220,11 @@ static int _el_get_codec_id( const char *fourcc )
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int vj_el_get_decoder_from_fourcc( const char *fourcc )
|
||||||
|
{
|
||||||
|
return _el_get_codec_id( fourcc );
|
||||||
|
}
|
||||||
|
|
||||||
static void _el_free_decoder( vj_decoder *d )
|
static void _el_free_decoder( vj_decoder *d )
|
||||||
{
|
{
|
||||||
if(d)
|
if(d)
|
||||||
@@ -1010,11 +1052,19 @@ int vj_el_get_video_frame(editlist *el, long nframe, uint8_t *dst[3])
|
|||||||
data,
|
data,
|
||||||
res
|
res
|
||||||
);
|
);
|
||||||
if( len <= 0 || !got_picture)
|
|
||||||
|
veejay_msg(0, "bytes remain: %d, decoded %d, pixfmt %d , %d",
|
||||||
|
res,len, d->context->pix_fmt, in_pix_fmt);
|
||||||
|
|
||||||
|
if(!got_picture)
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR,
|
veejay_msg(0, "Unable to get whole picture");
|
||||||
"Frame %ld broken or video file is not made of pure I-frames, fix your videofiles",
|
return 0;
|
||||||
nframe);
|
}
|
||||||
|
|
||||||
|
if( len <= 0 )
|
||||||
|
{
|
||||||
|
veejay_msg(VEEJAY_MSG_ERROR, "reading frame");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1024,16 +1074,6 @@ int vj_el_get_video_frame(editlist *el, long nframe, uint8_t *dst[3])
|
|||||||
|
|
||||||
|
|
||||||
int src_fmt = in_pix_fmt;
|
int src_fmt = in_pix_fmt;
|
||||||
/*
|
|
||||||
int src_fmt = PIX_FMT_YUV444P;
|
|
||||||
// int src_fmt = ( in_pix_fmt == FMT_420 ? PIX_FMT_YUV420P: PIX_FMT_YUV422P );
|
|
||||||
switch(in_pix_fmt)
|
|
||||||
{
|
|
||||||
case FMT_420: src_fmt = PIX_FMT_YUV420P; break;
|
|
||||||
case FMT_411: src_fmt = PIX_FMT_YUV411P; break;
|
|
||||||
case FMT_422: src_fmt = PIX_FMT_YUV422P; break;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
int dst_fmt = ( out_pix_fmt== FMT_420 ? PIX_FMT_YUV420P: PIX_FMT_YUV422P) ;
|
int dst_fmt = ( out_pix_fmt== FMT_420 ? PIX_FMT_YUV420P: PIX_FMT_YUV422P) ;
|
||||||
|
|
||||||
pict.data[0] = dst[0];
|
pict.data[0] = dst[0];
|
||||||
|
|||||||
Reference in New Issue
Block a user