Move read_mms_packet() code to be inlined in the calling function.
Patch by Zhentan Feng <spyfeng gmail com>. Originally committed as revision 24700 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
05fc9a1bcf
commit
aaa91aa00e
@ -544,55 +544,6 @@ static int read_data(MMSContext *mms, uint8_t *buf, const int buf_size)
|
||||
return read_size;
|
||||
}
|
||||
|
||||
/** Read at most one media packet (or a whole header). */
|
||||
static int read_mms_packet(MMSContext *mms, uint8_t *buf, int buf_size)
|
||||
{
|
||||
int result = 0;
|
||||
int size_to_copy;
|
||||
|
||||
do {
|
||||
if(mms->asf_header_read_size < mms->asf_header_size) {
|
||||
/* Read from ASF header buffer */
|
||||
size_to_copy= FFMIN(buf_size,
|
||||
mms->asf_header_size - mms->asf_header_read_size);
|
||||
memcpy(buf, mms->asf_header + mms->asf_header_read_size, size_to_copy);
|
||||
mms->asf_header_read_size += size_to_copy;
|
||||
result += size_to_copy;
|
||||
dprintf(NULL, "Copied %d bytes from stored header. left: %d\n",
|
||||
size_to_copy, mms->asf_header_size - mms->asf_header_read_size);
|
||||
if (mms->asf_header_size == mms->asf_header_read_size) {
|
||||
av_freep(&mms->asf_header);
|
||||
}
|
||||
} else if(mms->remaining_in_len) {
|
||||
/* Read remaining packet data to buffer.
|
||||
* the result can not be zero because remaining_in_len is positive.*/
|
||||
result = read_data(mms, buf, buf_size);
|
||||
} else {
|
||||
/* Read from network */
|
||||
int err = mms_safe_send_recv(mms, NULL, SC_PKT_ASF_MEDIA);
|
||||
if (err == 0) {
|
||||
if(mms->remaining_in_len>mms->asf_packet_len) {
|
||||
av_log(NULL, AV_LOG_ERROR,
|
||||
"Incoming pktlen %d is larger than ASF pktsize %d\n",
|
||||
mms->remaining_in_len, mms->asf_packet_len);
|
||||
result= AVERROR_IO;
|
||||
} else {
|
||||
// copy the data to the packet buffer.
|
||||
result = read_data(mms, buf, buf_size);
|
||||
if (result == 0) {
|
||||
dprintf(NULL, "read asf media paket size is zero!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dprintf(NULL, "read packet error!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while(!result); // only return one packet.
|
||||
return result;
|
||||
}
|
||||
|
||||
static int send_close_packet(MMSContext *mms)
|
||||
{
|
||||
start_command_packet(mms, CS_PKT_STREAM_CLOSE);
|
||||
@ -721,8 +672,50 @@ static int mms_read(URLContext *h, uint8_t *buf, int size)
|
||||
{
|
||||
/* TODO: see tcp.c:tcp_read() about a possible timeout scheme */
|
||||
MMSContext *mms = h->priv_data;
|
||||
int result = 0;
|
||||
int size_to_copy;
|
||||
|
||||
return read_mms_packet(mms, buf, size);
|
||||
do {
|
||||
if(mms->asf_header_read_size < mms->asf_header_size) {
|
||||
/* Read from ASF header buffer */
|
||||
size_to_copy= FFMIN(size,
|
||||
mms->asf_header_size - mms->asf_header_read_size);
|
||||
memcpy(buf, mms->asf_header + mms->asf_header_read_size, size_to_copy);
|
||||
mms->asf_header_read_size += size_to_copy;
|
||||
result += size_to_copy;
|
||||
dprintf(NULL, "Copied %d bytes from stored header. left: %d\n",
|
||||
size_to_copy, mms->asf_header_size - mms->asf_header_read_size);
|
||||
if (mms->asf_header_size == mms->asf_header_read_size) {
|
||||
av_freep(&mms->asf_header);
|
||||
}
|
||||
} else if(mms->remaining_in_len) {
|
||||
/* Read remaining packet data to buffer.
|
||||
* the result can not be zero because remaining_in_len is positive.*/
|
||||
result = read_data(mms, buf, size);
|
||||
} else {
|
||||
/* Read from network */
|
||||
int err = mms_safe_send_recv(mms, NULL, SC_PKT_ASF_MEDIA);
|
||||
if (err == 0) {
|
||||
if(mms->remaining_in_len>mms->asf_packet_len) {
|
||||
av_log(NULL, AV_LOG_ERROR,
|
||||
"Incoming pktlen %d is larger than ASF pktsize %d\n",
|
||||
mms->remaining_in_len, mms->asf_packet_len);
|
||||
result= AVERROR_IO;
|
||||
} else {
|
||||
// copy the data to the packet buffer.
|
||||
result = read_data(mms, buf, size);
|
||||
if (result == 0) {
|
||||
dprintf(NULL, "read asf media paket size is zero!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dprintf(NULL, "read packet error!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while(!result); // only return one packet.
|
||||
return result;
|
||||
}
|
||||
|
||||
URLProtocol mmst_protocol = {
|
||||
|
Loading…
Reference in New Issue
Block a user